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/)
-   -   Delphi Verwalten einer variablen Menge von TPanels (https://www.delphipraxis.net/103165-verwalten-einer-variablen-menge-von-tpanels.html)

delphinia 11. Nov 2007 17:59


Verwalten einer variablen Menge von TPanels
 
Hallo,


Ich habe Form

eine unterschiedliche Menge von Panels.
um diese Rauszufinden bzw diese anzuordnen mache ich folgendes:

Delphi-Quellcode:
  for k := 0 to pred(ControlCount) do
    if Controls[k] is TPanel then
Begin
 Controls[k].top := y;
 Controls[k].left := x;
end;

So weit so gut das Funktioniert auch...
hier die erste Frage. Gibt es eine bessere Möglich keit des verwaltens (habe D5)



Wenn ein neues Panel hinzukommt wärend der Laufzeit - wie erfahre ich die Position des letzten Panels?

Der_Unwissende 11. Nov 2007 18:14

Re: Verwalten einer variablen Menge von TPanels
 
Zitat:

Zitat von delphinia
So weit so gut das Funktioniert auch...
hier die erste Frage. Gibt es eine bessere Möglich keit des verwaltens (habe D5)

Hi,
an sich gibt es andere Möglichkeiten die zu verwalten, aber ob die Besser sind hängt davon ab, was Du mit den Panels vor hast. Hier empfehlen sich die üblichen Verdächtigen. Datenstrukturen, die eine variable Anzahl von gleichen Elementen verwalten können sind immer Listen (in jeglicher Form) sowie Bäume. Natürlich sind Listen nur entartete Bäume, es gibt also im Prinzip keinen großen Unterschied zwischen den Beiden.
In Delphi hast Du wenn es um Listen geht zwei Möglichkeiten, Du kannst auf TList oder TObjectList zurückgreifen, ob es die (oder eine davon) schon in D5 gibt weiß ich nicht. Aber Du findest sicherlich in der DP die eine oder andere Implementierung für Listen. An sich müsstest Du nur ein dyn. Array verwalten. Idealerweise einfach ein Array mit einer festen Größe anlegen (z.B. 100 Elemente), beim Füllen immer die größe und den tatsächlichen Füllstand merken und wenn's Array voll wird, dann einfach neue Elemente hinzufügen (z.B. wieder 100). Dadurch verteilt sich der Overhead des Speicherallozierens auf alle 100 Elemente, macht das ganze etwas effizienter. Zudem kannst Du dank des Arrays wahlfrei auf einzelne Elemente zugreifen (anders als bei verketteten Listen).

Zitat:

Zitat von delphinia
Wenn ein neues Panel hinzukommt wärend der Laufzeit - wie erfahre ich die Position des letzten Panels?

Da gibt es wieder verschiedene Möglichkeiten. Eine einfache ist, dass Du einfach Variablen anlegst, in denen diese Informationen gespeichert werden. Der Nachteil ist dann ganz klar, dass Du eben auch dafür sorgen musst, dass die Belegung der Variablen immer up to date ist. Greifst Du auf eine Liste zurück, kannst Du einfach das Letzte Panel anhängen und das letzte Element ist entsprechend immer auch das letzte Panel. Die fertigen Listen haben eine Eigenschaft, mit der Du das letzte Element ermitteln kannst, bei einer eigenen Implementierung kannst Du die natürlich auch vorsehen (Füllstand merkst Du Dir eh, das Element an diesem Index ist das Letzte).
Zudem könntest Du gerade bei Listen bzw. Bäumen auch dafür sorgen, dass die Panels schon sortiert (z.B. nach der Position) eingefügt werden. Ist das Letzte Panel ohnehin das mit der "größten" Position, ist das natürlich nicht nötig.

Gruß Der Unwissende

Deep-Sea 12. Nov 2007 08:19

Re: Verwalten einer variablen Menge von TPanels
 
Zusätzlich zu den Listen, die Der_Unwissende genannt hat, gibt es noch TComponentList (auch in der Unit Contnrs). Aber ob es die schon seit D5 gibt, ka.

Zitat:

Zitat von delphinia
Wenn ein neues Panel hinzukommt wärend der Laufzeit - wie erfahre ich die Position des letzten Panels?

Wie kommt denn ein Panel hinzu? Du erzeugst es doch wohl selber, also kennst du es ya und kannst dementsprechend die gewünschten Werte auslesen, oder?! ...

peschai 12. Nov 2007 09:07

Re: Verwalten einer variablen Menge von TPanels
 
Hallo Delphinia,

Warum möchtest du dein Beispiel ändern bzw. fragst nach was einfacherem ? Denn in meinen Augen ist das einfach oder ich verstehe nicht ganz auf was du ninaus möchtest ?

Wenn du mit letztem Panel meinst, das welches du als letztes hinzugefügt hast, so hat es den höchsten Index in controls ...

marabu 12. Nov 2007 10:48

Re: Verwalten einer variablen Menge von TPanels
 
Hallo Doreen,

wenn du nach der Position des letzten Panels fragst, dann vielleicht deshalb, weil du ein bestimmtes Layout für die Panels hast? In dem Fall ist die Position meistens eine Funktion des Panel-Index und da macht es Sinn eine spezielle Liste der Panels zu führen um den Index nicht erst suchen zu müssen.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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