![]() |
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. |
AW: TPanel zur Laufzeit anlegen und löschen
Es geht ja nicht nur um die Länge, statische Arrays können ja durchaus mit einem Index <> 0 beginnen.
|
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
Dann kannst Du auch gleich bei
Delphi-Quellcode:
bleiben, da ein dynamisches Array immer bei 0 beginnt und der letzte Index immer Length-1 ist.
Length(Array) - 1
|
AW: TPanel zur Laufzeit anlegen und löschen
Hier wiederhole ich mich gern (
![]() Zitat:
|
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
|
AW: TPanel zur Laufzeit anlegen und löschen
Sagen wir lieber: nicht immer. Ein statisches Array mit Startindex 0 sollte keine Probleme bereiten.
|
AW: TPanel zur Laufzeit anlegen und löschen
aber auch ein statisches Array mit Startindex <> 0 dürfte problemlos damit funktionieren
jedenfalls fällt mir auf die Schnelle kein Fall ein, wo das nicht so sein sollte |
AW: TPanel zur Laufzeit anlegen und löschen
*Äh* das bezog sich ja nicht auf Deinen Code, sondern auf das 0 bis Length - 1, sofern ich das richtig verstanden habe.
[edit] Achnee, BadenPower hat ja Dich zitiert. Dann würde mich aber auch mal ein Fall interessieren, wo das nicht funktionieren soll. [/edit] |
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
Delphi-Quellcode:
funktioniert nicht.
SetLength(StatischesArray,100);
|
AW: TPanel zur Laufzeit anlegen und löschen
schon klar - aber das ist noch keine Erklärung warum low und high bei einem statischen Array nicht funktionieren sollte
|
AW: TPanel zur Laufzeit anlegen und löschen
Darum ging es aber doch auch gar nicht, sondern um die Indizes der Laufvariablen.
|
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
Ich hatte geschrieben, dass Dein Code-Beispiel mit statischen Arrays nicht funktionieren würde und deshalb getrost auf die Verwendung von Low und High verzichtet werden kann. |
AW: TPanel zur Laufzeit anlegen und löschen
ah so ok - sorry - missverstanden
|
AW: TPanel zur Laufzeit anlegen und löschen
Wozu soll man sich Gedanken machen (müssen), ob es sich um ein statisches, dynamisches oder offenes Array handelt und wie deren Indizes aussehen?
|
AW: TPanel zur Laufzeit anlegen und löschen
Zitat:
Nur wenn man miteinander redet, dann kann man Mißverständisse erkennen und beseitigen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 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-2025 by Thomas Breitkreuz