Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Dynamisch erstellte CategoryPanel wieder freigeben - Wie? (https://www.delphipraxis.net/172547-dynamisch-erstellte-categorypanel-wieder-freigeben-wie.html)

torud 10. Jan 2013 09:57

Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Hallo Wissende,

mit folgendem Code kann man ja dynamisch CatgeroyPanel auf einer CategoryPanelGroup anlegen.

Delphi-Quellcode:
var
  P: TCategoryPanel;
begin
  P := TCategoryPanel.Create(panPages);
  P.Parent := panPages;
  P.PanelGroup := panPages;
  p.Caption := 'Page 1';
  p.Height := 180;
  p.Tag := Formular.Pages.Count;
Mich interessiert nun, wie ich diese wieder freigeben kann.

Damit scheints nicht zu funktionieren:

Delphi-Quellcode:
panPages.Panels.Clear;
Muss ich hier eventuell mit einem Cast auf Panels[i] arbeiten?

uligerhardt 10. Jan 2013 10:38

AW: Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Wenn du sie explizit löschen willst oder musst:
Delphi-Quellcode:
for i := 0 to Pred(panPages.Count) do
  panPages.Panels[i].Free;
Wenn die Panels genauso lang wie die Gruppe leben sollen, kannst du das löschen aber auch dem Owner überlassen.

torud 10. Jan 2013 11:41

AW: Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Hallo Uli,

diese Idee hatte ich auch schon, aber wenn ich versuche den Code so anzuwenden, dann erhalte ich komischerweise immer die Fehlermeldung, dass Free ein undefinierter Bezeichner wäre.

Wenn ich die Free-Methode direkt auf ein fixes Panel, dann klappts.

Versuche ich es über einen Cast:
Delphi-Quellcode:
(panPages.Panels[0] as TCategoryPanel).Free;
ist die Meldung, dass der Operatorentyp so nicht anwendbar ist.
Das macht ja auch Sinn, weil die Panels vom Typ TList sind.

Hast Du hierfür noch eine Erklärung?
Wundert mich, dass es so kompliziert ist.

sx2008 10. Jan 2013 12:20

AW: Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Zitat:

Zitat von uligerhardt (Beitrag 1198462)
Delphi-Quellcode:
for i := 0 to Pred(panPages.Count) do
  panPages.Panels[i].Free;

Das würde Probleme machen, weil durch das Freigeben sich Verschiebungen ergeben.
Beim Löschen von Objekten muss die Schleife rückwärts laufen:
Delphi-Quellcode:
for i := Pred(panPages.Count) downto 0 do
  panPages.Panels[i].Free;

uligerhardt 10. Jan 2013 12:45

AW: Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Zitat:

Zitat von sx2008 (Beitrag 1198477)
Beim Löschen von Objekten muss die Schleife rückwärts laufen:

Ähm ja. Das kommt davon, wenn man Code postet, ohne ihn vorher zu testen. :oops:

Uwe Raabe 10. Jan 2013 12:49

AW: Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Da Panels eine TList ist, sind die Einträge simple Pointer. Also besser so (dann ist auch die Reihenfolge egal):

Delphi-Quellcode:
for i := 0 to panPages.Count - 1 do
  TCustomCategoryPanel(panPages.Panels[i]).PanelGroup := nil;

torud 10. Jan 2013 13:00

AW: Dynamisch erstellte CategoryPanel wieder freigeben - Wie?
 
Danke für die Antworten!

Damit klappts dann wirklich, denn der vorherige Code gibt die PanelGroup frei, was tödlich für andere Panels und den gesamten TCategoryPanel ist.

Delphi-Quellcode:
TCustomCategoryPanel(panPages.Panels[0]).Free;
Dieser Code gibt jeweils das erste Panel wieder frei.

Jetzt muss ich nur noch rausfinden, wie man das aktuell fokussierte Panel herausbekommt, damit ich den Index für´s Löschen richtig setzen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz