23. 11. 2007. | #1 |
član
Na probnom radu
|
Borland6 C++ EventHandlers
Dosada sam sa dogadjajima u kodu radio:
Kôd:
TMenuItem *itemPod = new TMenuItem(PopupMenu2); itemPod->OnClick = Dogadjaj; . . . Kôd:
void __fastcall TForm1::Dogadjaj(TObject *Sender) { .... } Za ovaj slucaj mi treba: Kôd:
TMenuItem *itemPod = new TMenuItem(PopupMenu2); itemPod->OnClick = ????????????????; <--------------kako ide ovaj poziv Kôd:
void __fastcall TUtakmica::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { StringGrid1->Canvas->Brush->Color = clBlue; StringGrid1->Canvas->Font->Color = clRed; StringGrid1->Canvas->FillRect(Rect); StringGrid1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]); } Vidim da se dogadjaj obradi prilikom kreiranja forme (jel moze ovo da se zabrani?), ali meni je neophodno da ga explicitno pozovem. Kako da pozovem ovaj obradjivac dogadjaja? Kako da prosledim odgovarajuce parametre i koje? Poslednja izmena od tokajac : 23. 11. 2007. u 21:20. |
24. 11. 2007. | #2 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
|
Ja se ne secam dobro, ali DrawCell ti poziva sistem kada se osvezava ekran! Ne pozivas je ti nego se ona sama poziva non-stop (tj taj njihov framework je poziva, a ti treba da je redefinises), a ne samo kad se loaduje forma.
Ja sam ovo jedino na faxu radio, i mozda mogu da iskopam primer neki, ako ti ovo objasnjenje nije dosta. Dakle, tvoj OnClick hendler promeni neki objekat, koji se vidi iz tvoje TUtakmica klase, i na osnovu toga se drukcije iscrta na gridu. Ne znam kako se ovde na forumu pise kod ali je fora class TUtakmica { ... TMyObj *myObj; }; pa dalje TMenuItem *itemPod = new TMenuItem(PopupMenu2); itemPod->OnClick = myHandler; pa onda negde void __fastcall TNekaKlasa::myHandler(obj *sender) { myObj->doSmth(); //Koji si mu nekako prosledio } i onda u DrawCell koristis to da bi drukcije iscrto tj. napravio izmenu... DrawCell se sam poziva!!! Poslednja izmena od djipko : 24. 11. 2007. u 19:18. Razlog: typos, syntax |
24. 11. 2007. | #3 |
član
Certified
Datum učlanjenja: 03.10.2006
Poruke: 96
Hvala: 27
44 "Hvala" u 26 poruka
|
Cisto da napomenem...
Ako ces koristiti ovaj moj savet obrati paznju na sinhronizaciju, posto to u pozadini rade neki razliciti threadovi, a pristupaju jel jednom objektu, koji cuva neke izmene. Nije pametno zakucavati taj DrawCell, ali posto jedan samo cita (DrawCell) a drugi samo pise (handler) to kontam nece biti problem, ali je bangava praksa u svakom slucaju... |
|
|