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 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