|
Dynamiczne tworzenie komponentów |
|
|
|
|
Wpisał doctor
|
|
Środa, 14. Luty 2007 00:58 |
|
Dynamiczne tworzenie komponentów oraz podpinanie zdarzeń
W tej lekcji nauczymy się, jak dynamicznie tworzyć komponenty. Jest to bardzo wygodne w przypadku, gdy na formularzu trzeba ich umieścić mnóstwo (a jakże), często w określonym porządku geometrycznym. Zamiast robić to ręcznie, można sobie uprościć ten proces.
Do tworzenia komponentów w sposób dynamiczny posłuży nam operator new. Aby utworzyć nowy komponent potrzebuemy znać nazwę jego klasy bazowej. Musimy także podać "rodzica" utworzonego komponentu, a więc Form1; Pamiętać należy, aby po skończonej pracy usunąć komponent operatorem delete.
Przykład Na formularzu co sekundę będzie tworzony 1 button aż do momentu gdy na formie będzie 10 buttonów. Kładziemy na formę 1 Label oraz 1 Timer. Na Label 2 będzie wyświetlana ilość aktywnych komponentów na formie. Kto mi powie dlaczego jest ich 12, skoro utworzyliśmy tylko 10 buttonów?
void __fastcall TForm1::Timer1Timer(TObject *Sender) { ilosc_przyciskow++; if(ilosc_przyciskow < 10) { TButton *Button = new TButton(this); Button->Parent = Form1; Button->Name = "Button" + (String)ilosc_przyciskow; Button->Caption = "Button" + (String)ilosc_przyciskow; int left = random(Form1->Width - Button->Width); int top = random(Form1->Height - Button->Height);
Button->Left = left; Button->Top = top;
Button->OnClick = OnClick; //podpięcie obsługi zdarzenia // pod dynamiczny komponent int CC = ComponentCount; //ilosc komponentow na formie Label1->Caption = IntToStr(CC); } else Timer1->Enabled = false; } |

HE HE HE Gdy klikniemy na jakiś button, pojawi się okienko z nazwą tego przycisku. void __fastcall TForm1::OnClick(TObject *Sender) { ShowMessage(ActiveControl->Name); } |
W zdarzeniu OnClose aplikacji pamiętać należy o zwolnieniu jej zasobów za pomocą void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; //zwalnianie zasobow aplikacji }
|
Dla leniwych do pobrania skompilowana aplikacja oraz pliki projektu.
|
|
Ostatnia aktualizacja: Piątek, 10. Lipiec 2009 14:02 |