Компонента Timage

  • Автор темы dr.SeM
  • Дата начала
D

dr.SeM

Гость
#1
Здраствуйте!
у меня следующий вопрос:
к примеру создаётся масив
TImage *img[25];
Код:
for (int i=0;i<4;i++)
{
//----------------------
img[i]=new TImage(this);
img[i]->Parent=MainFormGame;
img[i]->Picture->LoadFromFile("smile.jpg");
img[who]->Name="S"+IntToStr(who);
img[i]->Visible=true;
img[i]->OnClick=ImageClick;
}
где ImageClick- функция должна спрятать изображение по котором кликнул юзер
Код:
void __fastcall TMainFormGame::ImageClick(TObject *Sender)
{
......
}
вопрос: как можно узнать по какому рисунку клікну юзер?
если надо могу скинуть проект.
IDE C++ Builder 6 :)

извените допустил ошибку :img[i]->Name="S"+IntToStr(who);//добавил из другой функции
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
dr.SeM
а Вы прописывайте TAG (есть такое свойство у любого компонента) у этого ImageClick в зависимости от тага работаем с тем Image c которым надо

dr.SeM
а Вы прописывайте TAG (есть такое свойство у любого компонента) у этого ImageClick в зависимости от тага работаем с тем Image c которым надо
 
D

dr.SeM

Гость
#3
я попробовал зделать через Tag,и неполучилось.
зделал так к примеру в конструкторе формы:
Код:
for (int i=0;i<4;i++)
{
//----------------------
img[i]=new TImage(this);
img[i]->Parent=MainFormGame;
img[who]->Tag=0;		 //noclick
img[i]->Picture->LoadFromFile("smile.jpg");
img[i]->Name="S"+IntToStr(i);
img[i]->Visible=true;
img[i]->OnClick=ImageClick;
}
потом в
Код:
void __fastcall TMainFormGame::ImageClick(TObject *Sender)
{
//вот тут и проблема потомучто на которой кликнул надо присвоить скажем 1
//а зделать так помоему нельзя [b]img->Tag=1[/b]
//так что надо в цикле перебрать все картинки и нужной присв. 1
//в итоге всем будет присвоено 1 
for (int i=0;i<4;i++)
{
img[i]->Tag=1;		 //по которой кликнул присвою 1
img[i]->Visible=false;
}
}
Извените но ничего в голову не приходит как ето решыть. Хоть бери и на форму помещать нужное количество картинок и каждую обрабатывать отдельно
 
D

dr.SeM

Гость
#4
Тобто, потом чтоб спрятать картинку по которой клик нужно ввест Sender->Free();?
 
D

dr.SeM

Гость
#5
я добавил ету строку у функцию
Код:
void __fastcall TMainFormGame::ImageClick(TObject *Sender) 
{
Sender->Free();
}
и при компиляции Билдер показал ошыбку: Project1.exe raised exception class EAccessViolation with message... in modul rtl60.bpl. а свойство Visible там в функции нету. Помоему етот рядок я не туда прописал.Подскажыте что делать.
 
D

dr.SeM

Гость
#6
Извените больше не повториться. Просто не смотрел на теги...
Правила есть правила, значит не будем больше нарушать.

извените , а как в етом случае зделать приведение типов что бы всё работало?В книгах которые у меня есть такое но описываеться. ;)
 
D

dr.SeM

Гость
#8
Здраствуйте
у меня есть класс в который в обшем щёте работает с TImage.В етом классе есть функцыя котороя должна выполняться когда на рисунок кликнули, я ету функцию написал так:
Код:
class t
{
public:
int x,y,a;
t::t();
void t::start();
void t::ShowImage(int x,int y);
void t::stop();
void t::OnClickImage();
TImage *img;
};
void t::ShowImage(int x,int y)
{
img=new TImage(Form1 );
img->Visible=false;
img->Parent= Form1;
img->Picture->LoadFromFile("smile.jpg");
img->OnClick=OnClickImage;//присваиваем функцию обработки клика
img->Visible=true;
img->Top=x;
img->Left=y;
}
void t::OnClickImage()
{
a=a+1;
Form1->Canvas->TextOutA(0,0,IntToStr(a));
img->Visible=false;
}
при компиляции кидает ошыбку :E2034 Cannot convert 'void (* (_closure )())()' to 'void (_fastcall * (_closure )(TObject *))(TObject *)' как выправить ето?
 
04.09.2006
2 566
2
#9
dr.SeM, прототип функции OnClickImage не правильный. На сколько помню, должно быть так:
Код:
void t::OnClickImage( TObject *Sender );
...
void t::ImageClick( TObject *Sender )
{
///
}