Buttons dynamisch zur Laufzeit erstellen und entfernen
-
Hallo
Ich erstelle je nach RecordCount Buttons in einer Schleife.
Dabei wird der Name jedes Buttons dynamisch erstellt.
Das klappt auch soweit.TRect R; i = 0; while (!ADOQueryGrid->Eof) { i= i + 1; butDay->Name = "bDet" + IntToStr(i); butDay->Caption = "Notiz"; butDay->Left = stringGridMain->Left + R.Left + 2; butDay->Top = stringGridMain->Top + R.Top + 2; butDay->OnClick = butDayClick; butDay->Parent = MainForm; ADOQueryGrid->Next(); }
Wenn die Schleife ein 2.tes Mal ausgeführt wird, müssen die
Buttons vorher wieder entfernt werden. Wie geht das ?
Ich hab folgende Funktion dafür.void TMainForm::removeButtons() { for (i=1; i<=globButCount; i++) { MainForm->RemoveComponent("bDet" + IntToStr(i)); } }
Geht jedoch nicht, weil eine Komponente erwartet wird
und nicht der Namen als AnsiStringGruß und Danke
-
Hallo
siehe FAQ, Thread Dynamische Arrays von Komponenten oder Objekten
bis bald
akari
-
Danke ...
DynamicArray<TButton*>btnArray; klappt
Nur beim Löschen des Button geht es nicht:
void TProjForm::removeButtons() { for (i=0; i<=btnArray.Length - 1; i++) { ProjForm->RemoveControl(btnArray[i]; } }
Entfernt den Button vom Parent, aber der Button
muß ja komplett aufgelöst werden, denn er wird ja mit:btnArray[i] = new TButton(this);
permananent neu erzeugt
-
Hallo
deshalb sollte das ja auch so aussehen
void TProjForm::removeButtons() { for (i=0; i < btnArray.Length; i++) { delete btnArray[i]; } btnArray.Length = 0; // Gegenenfalls Array zurücksetzen }
bis bald
akari
-
Informier dich mal, was das this hier im Aufruf bedeutet (Stichwort Owner).
btnArray[i] = new TButton(this);
-
Hallo
@ Braunstein : der Owner bringt dem OP hier (anscheinend) nichts, denn er will ja die Buttons noch zur Lebenszeit des Owners neu erstellen.
Wenn die Schleife ein 2.tes Mal ausgeführt wird, müssen die
Buttons vorher wieder entfernt werden. Wie geht das ?Und wenn man davon ausgeht das Owner noch mehr Controls außer die Buttons beinhaltet, kann man keine Automatische Bereinigung laufen lassen.
bis bald
akari
-
Danke.........
war grade schon am suchen nach delete ...
und was btnArray[i]->... anbietetbuttons werden jetzt dynamisch erzeugt und wieder gelöscht.
Genau, automatische Bereinigung alle Komponentene gäbe eine blanke Form.
Generell ist meine Aufgabenstellung, Buttons zu erstellen in
Gridspalte mit Menge je nach Zeilenanzahl. Momentan mach ichs mit Fake-Buttons.
Sobald aber eine Spalte resized wird, bleibt der Button sitzen / überlappt in andere Spalte.Grüße Euch