![]() |
Delphi-Version: 5
TPanel zur Laufzeit anlegen und löschen
Hallo zusammen,
ich erzeuge im oncreate oder im on show des Form in einer Schleife mehrere Panels mit diversen Beschriftungen. Das klappt auch so. Jetz möchte ich aber auf "Knopfdruck" heisst auf Buttonklick diese Panels löschen und dafür andere Panels(mit Beschriftung) erzeugen. Ein myCustomPanel.free; löscht mir nur den zuletzt erzeugten Panel. Wie funktioniert das richtig? Danke gruss KH |
AW: TPanel zur Laufzeit anlegen und löschen
Pack sie in ein Array oder eine TObjectList/TComponentList.
|
AW: TPanel zur Laufzeit anlegen und löschen
Merk Dir die Instanzen der Panels beim Erstellen z.B. in einer TObjectList. Dann kannst Du die zum freigeben einfach durchgehen.
|
AW: TPanel zur Laufzeit anlegen und löschen
Oder man nimmt eine
![]()
Delphi-Quellcode:
TMyForm = class( TForm )
private FPanelAncestor : TComponent; procedure BuildPanels; end; procedure TMyForm.BuildPanels; var LPanel : TPanel; begin FreeAndNil( FPanelAncestor ); FPanelAncestor := TComponent.Create( Self ); LPanel := TPanel.Create( FPanelAncestor ); LPanel.Parent := Self; ... end; |
AW: TPanel zur Laufzeit anlegen und löschen
Hab das bisher immer so gelöst, dass ich die Komponente in eine Liste gepackt habe. Da du Delphi 5 verwendest wirst du wohl Arrays benutzen müssen:
Delphi-Quellcode:
// Deklarationen
Panels : array of TPanel; // Funktionen procedure TForm1.btn1Click(Sender: TObject); var LPanel : TPanel; c : integer; begin SetLength(Panels,10); for c := 0 to 9 do begin LPanel := TPanel.Create(self); LPanel.Parent := self; LPanel.Height := 15; LPanel.Width := 100; LPanel.Top := c * 20; LPanel.Caption := 'Panel #' + IntToStr(c); Panels[c] := LPanel; end; end; procedure TForm1.btn2Click(Sender: TObject); var LPanel : TPanel; c : integer; begin for c := 0 to Length(Panels)-1 do begin Panels[c].free; end; SetLength(Panels,0); end; |
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
MfG Dalai |
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
Hab mich immer schön mit Arrays rumgeschlagen :freak: |
AW: TPanel zur Laufzeit anlegen und löschen
ich danke euch
|
AW: TPanel zur Laufzeit anlegen und löschen
mit "low" und "high" ist man auf der sichereren Seite, wenn sich das Array von der Anzahl der Elemente ändert:
Delphi-Quellcode:
Wobei natürlich
procedure TForm1.btn1Click(Sender: TObject);
var LPanel : TPanel; c : integer; begin SetLength(Panels,10); for low(Panels) to high(Panels) do //<-- begin { ...}
Delphi-Quellcode:
bei dynamischen Arrays auch durch eine 0 ersetzt werden kann
low(Panels)
|
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
Werde ich in Zukunft jedoch so machen, danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz