20.11.2007, 00:07
общий
это ответ
Здравствуйте, RussianGM!
Ну для начала опишем обработчик нашего события.. Допустим он будет выдавать значения поля Tag нашего TImage:
void __fastcall itemClick(void* This, TObject *Sender)
{
ShowMessage("Tag = " + IntToStr(((TImage*)Sender)->Tag));
}
Указатель This будет принимать адрес экзепляра класса, вызвавшего событие, указатель Sender будет содержать адрес объекта, в котором было сгенерировано событие (так мы и будет отличать их).
Далее нам потребуется у вновь созданных объектов связать нужное событие и вышенаписанный нами обработчик (например так):
TImage *Im[5];
int Left = 0;
for(int i=0;i<5;i++)
{
Im[i]=new TImage(Form1);
Im[i]->Parent=Form1;
TMethod event; /Описываем метод ...
event.Data = this;
event.Code = itemClick;
Im[i]->OnClick = *(TNotifyEvent*)&event; //присваиваем нашему событию
Im[i]->Left = Left;
Im[i]->Picture->LoadFromFile("2.jpg");
Im[i]->Tag = Left;
Left += 50;
}
----
Это случай, если обработчик события не является методом класса...
2 вариант:
Unit1.h:
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall itemClick(TObject *Sender); //метод-обработчик события
};
Unit1.cpp:
//Наш обработчик (this уже не присутствует, т.к. он передается неявно):
void __fastcall TForm1::itemClick(TObject *Sender)
{
ShowMessage("Tag = " + IntToStr(((TImage*)Sender)->Tag));
}
Ну и собственно наш код:
TImage *Im[5];
int Left = 0;
for(int i=0;i<5;i++)
{
Im[i]=new TImage(Form1);
Im[i]->Parent=Form1;
Im[i]->OnClick = itemClick;
Im[i]->Left = Left;
Im[i]->Picture->LoadFromFile("2.jpg");
Im[i]->Tag = Left;
Left += 50;
}
}