Ładny brzuch
Witam!
Mam kolejny probleml;) tworze sobie jakies komponenty dynamicznie np. elementy menu. Chce im przypisac funkcje onclick tylko tak zeby kazdy mial inn. Lub tak zeby kazdy mial taka sama ale zeby jakas zmeinna sie zmianiala zaleznie od tego na jaki sie kliknie. Troche mieszam ale pokaze kod:
for(int i=0;i<Lista->Count;i++)
{
TMenuItem *NewItem = new TMenuItem(Application);
NewItem->Caption=Lista->Strings[i];
NewItem->onclick=JakasFunkcja;
MainMenu->Items->Items[0]->Add(NewItem);
}
Wiem ze moge dac tam funkcje typu
void __fastcall TGlowny::Buttonclick(TObject *Sender)
{
}
Ale wtedy nie mam zadnej manipulacji a kazdemu nowo utowrzonemu elementowi przypisze taka sama funkcje :/. Pewno sie myle :D. Wiec prosze o pomoc :).
Pozdrawiam.
albo sobie napiszesz funkcje Button1Click, Button2Click, ..., Button100Click ;) i je bedziesz podpinal pod co tam potrzebujesz albo napisz jedna funkcje, ktora na podstawie Sender'a wykonuje okreslona akce [hint: Sender to obiekt, ktory wywolal metode, czyli konkretny Button lub MenuItem]
przyznam ze nie wiedzialem o tym :P ... i sie nawet nei zastanawialem nad tym co to wogule Sender. Ale dalej patrzac mam kolejny problem .. chcialbym odwolac sie np. do Name, Caption, Text lub innej zmiennej obiektu nie sprawdzajac klasy albo w inny sposob.
((Sender->ClassName()*)(Sender)->Name;
nie za bardzo chce dzialac ;p
Czy jest jakis inny sposob?
Pozdrawiam!:)
muszisz jawnie podawac typ, na ktory rzutujesz:
void __fastcall TForm1::Buttonclick(TObject *Sender) { ShowMessage( ((TButton*)Sender)->Caption ); }
No i wlasnie chodzi o to ze funkcje chce podpiac do wielu roznych obiektow. Majac np. Buttona i Label myslalem nad czyms takim.
void __fastcall TForm1::Buttonclick(TObject *Sender) { String NazwaKlasy=Sender->ClassName(); if(NazwaKlasy=="TLabel") { ShowMessage(((TLabel*)Sender)->Name); } else if(NazwaKlasy=="TButton") { ShowMessage(((TButton*)Sender)->Name); } }
Z deka to amatorszczyzna sie wydaje ale nie siedze w tym zbyt dlugo i nic innego mi do glowy nie przychodzi. Ale wiem tez ze chyba mozna na jana wpisac staly obiekt np. TButton i nawet jesli sender to TLabel to i tak bede mial dostep do Name i Caption, chyba ze sie myle? W takim wypadku moge sobie stworzyc komponent o odpowiadajacyh mi opcjach?
to zalezy co chesz wyciagnac z obiektu...
jezeli tylko Name to mozesz rzutowac na cos wyzszego w hierarchi:
ShowMessage( ((TControl*)Sender)->Name );
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam kolejny probleml;) tworze sobie jakies komponenty dynamicznie np. elementy menu. Chce im przypisac funkcje onclick tylko tak zeby kazdy mial inn. Lub tak zeby kazdy mial taka sama ale zeby jakas zmeinna sie zmianiala zaleznie od tego na jaki sie kliknie. Troche mieszam ale pokaze kod:
for(int i=0;i<Lista->Count;i++)
{
TMenuItem *NewItem = new TMenuItem(Application);
NewItem->Caption=Lista->Strings[i];
NewItem->onclick=JakasFunkcja;
MainMenu->Items->Items[0]->Add(NewItem);
}
Wiem ze moge dac tam funkcje typu
void __fastcall TGlowny::Buttonclick(TObject *Sender)
{
}
Ale wtedy nie mam zadnej manipulacji a kazdemu nowo utowrzonemu elementowi przypisze taka sama funkcje :/. Pewno sie myle :D. Wiec prosze o pomoc :).
Pozdrawiam.
albo sobie napiszesz funkcje Button1Click, Button2Click, ..., Button100Click ;) i je bedziesz podpinal pod co tam potrzebujesz albo napisz jedna funkcje, ktora na podstawie Sender'a wykonuje okreslona akce [hint: Sender to obiekt, ktory wywolal metode, czyli konkretny Button lub MenuItem]
przyznam ze nie wiedzialem o tym :P ... i sie nawet nei zastanawialem nad tym co to wogule Sender. Ale dalej patrzac mam kolejny problem .. chcialbym odwolac sie np. do Name, Caption, Text lub innej zmiennej obiektu nie sprawdzajac klasy albo w inny sposob.
((Sender->ClassName()*)(Sender)->Name;
nie za bardzo chce dzialac ;p
Czy jest jakis inny sposob?
Pozdrawiam!:)
muszisz jawnie podawac typ, na ktory rzutujesz:
void __fastcall TForm1::Buttonclick(TObject *Sender) { ShowMessage( ((TButton*)Sender)->Caption ); }
No i wlasnie chodzi o to ze funkcje chce podpiac do wielu roznych obiektow. Majac np. Buttona i Label myslalem nad czyms takim.
void __fastcall TForm1::Buttonclick(TObject *Sender) { String NazwaKlasy=Sender->ClassName(); if(NazwaKlasy=="TLabel") { ShowMessage(((TLabel*)Sender)->Name); } else if(NazwaKlasy=="TButton") { ShowMessage(((TButton*)Sender)->Name); } }
Z deka to amatorszczyzna sie wydaje ale nie siedze w tym zbyt dlugo i nic innego mi do glowy nie przychodzi. Ale wiem tez ze chyba mozna na jana wpisac staly obiekt np. TButton i nawet jesli sender to TLabel to i tak bede mial dostep do Name i Caption, chyba ze sie myle? W takim wypadku moge sobie stworzyc komponent o odpowiadajacyh mi opcjach?
to zalezy co chesz wyciagnac z obiektu...
jezeli tylko Name to mozesz rzutowac na cos wyzszego w hierarchi:
ShowMessage( ((TControl*)Sender)->Name );