Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Erstellen von Objektlisten während des Programmablaufs (https://www.delphipraxis.net/138091-erstellen-von-objektlisten-waehrend-des-programmablaufs.html)

Optiplex 3. Aug 2009 14:13


Erstellen von Objektlisten während des Programmablaufs
 
Hallo DP'ler,

ich habe eine typisierte Objektliste. Beim Programmstart weis ich noch nicht wie viele während des Programmablauf von diesen Listen erstellt werden müssen (Usereingabe). Normalerweise werden Objektlisten in variablen hinterlegt und in FormCreate erstellt. Wie mache ich das wenn die Anzahl nicht bekannt ist. (Ich hoffe dass ich mich einigermaßen verständlich ausgedrückt habe.)

Danke und Gruß Dieter

Luckie 3. Aug 2009 14:15

Re: Erstellen von Objektlisten während des Programmablaufs
 
Verwalte die Objektlisten doch auch in einer Objektliste.

Ralf Kaiser 3. Aug 2009 15:27

Re: Erstellen von Objektlisten während des Programmablaufs
 
...oder erstelle die Objektlisten erst wenn der Benutzer die Anzahl eingegeben hat. Dann ist die Anzahl ja wieder bekannt.

Gibt es zwingende Gründe, warum sie unbedingt in FormCreate erstellt werden müssen?

tabl 3. Aug 2009 20:46

Re: Erstellen von Objektlisten während des Programmablaufs
 
versuch mal mit nen dynamischen array vom entsprechenden typ der jedesmal wenn ein neues objekt hinzugefügt wird die länge um 1 erhöht. funcs bei mir eig immer recht gut. zumi bei labelsund änlichen. wie das bei objektlisten aussieht ka, sollte aba auch funcsen

Optiplex 4. Aug 2009 06:27

Re: Erstellen von Objektlisten während des Programmablaufs
 
erstmal Danke für die Antworten.

@Lucki
Funktioniert denn das ? Wie spreche ich denn die einzelnen objekte über diese Listen an den ich habe ja dann eine Liste für die Listen und wie kann ich die einzelnen Objektlisten auseinanderhalten. Welche Liste soll man dafür verwenden TList oder TObjektlist. Meine Listen sind alle von Typ TObjectlist.

Hast du eventuell ein Beispiel für mich.

@ Alfi001
Da liegt das Problem, der User weis die Anzahl die er benötigt auch nicht. Nein die Listen müssen nicht unbedingt in der FormCreate erstellt werden.

@tabl
Dynamischer Array ? Für das verwalten der einzelnen Objekte benutze ich ja diese Objektlisten, ob man diese in einem Dynamischer Array wiederum verwalten kann? Hab ich noch nie Probiert.

Hast du eventuell ein kurzes Beispiel zur Hand?

Gruß Dieter

Blup 4. Aug 2009 07:15

Re: Erstellen von Objektlisten während des Programmablaufs
 
Beispiel:
Delphi-Quellcode:
FMeineListen := TObjectList.Create;

for i := 0 to Anzahl - 1 do
  FMeineListen.Add(TObjectList.Create);


function GetObjectList(AIndex: Integer): TObjectList;
begin
  Result := FMeineListen[AIndex] as TObjectList;
end;

GetObjectList(5).Add(TMeinObject.Create);

MeinObject := GetObjectList(5)[1] as TMeinObject;

Ralf Kaiser 4. Aug 2009 07:55

Re: Erstellen von Objektlisten während des Programmablaufs
 
Zitat:

Zitat von Optiplex
@ Alfi001
Da liegt das Problem, der User weis die Anzahl die er benötigt auch nicht. Nein die Listen müssen nicht unbedingt in der FormCreate erstellt werden.

Seltsam. Du hattest geschrieben "(Usereingabe)". Wie kann so eine Eingabe erfolgen wenn der Benutzer die Anzahl die er eingeben soll selbst nicht kennt? :gruebel:

Was ich meinte: An irgeneiner Stelle wird das Programm doch wissen "ich brauche jetzt 3 Listen". Erstell einfach an der Stelle, an der die Anzahl feststeht die Listen. (EGAL wie die Anzahl festgelegt wurde, durch Eingabe oder Berechnung oder sonstwie)

Optiplex 4. Aug 2009 08:14

Re: Erstellen von Objektlisten während des Programmablaufs
 
Danke Blup für dein Beispiel, wenn das so funkt wär das eine Lösung.

Ich habe gerade was gelesen, dass es eine TClasslist gibt, kennt sich jenmand damit aus. Hat diese Liste Vorteile gegeüber einer Objektliste bei der Verwaltung von Objektlisten.

@Alfi001
Der User kann sich jederzeit entscheiden noch eine Objektliste anzufangen, deshalb ist es nicht möglich dies abzufragen, zu berechnen oder sonstwie zu erfahren.

Gruß Dieter

Luckie 4. Aug 2009 08:32

Re: Erstellen von Objektlisten während des Programmablaufs
 
Du sprichst die ObjektListen wie in einem Array an. Da die Objekte in der Liste ja auch Objektlisten sind hast du praktisch ein zweidimensionales Array. Arrays würde ich nicht nehmen, da du dich da immer um den Speicher beim Freigeben kümmern musst. Eventuell hilft dir auch mein Tutorial über Containerklassen, denn das ist genau das, was du machen willst: http://www.michael-puff.de/Artikel/C...rKlassen.shtml

Ralf Kaiser 4. Aug 2009 08:50

Re: Erstellen von Objektlisten während des Programmablaufs
 
Zitat:

Zitat von Optiplex
@Alfi001
Der User kann sich jederzeit entscheiden noch eine Objektliste anzufangen, deshalb ist es nicht möglich dies abzufragen, zu berechnen oder sonstwie zu erfahren.

Dann erzeuge diese Objektliste genau dann wenn der Benutzer sich dafür entscheidet oder wenn es aus einem anderen Grund nötig werden sollte und speichere diese dann in einer anderen Objektliste oder einem Array (wie das geht oder was die Vor/Nachteile von Arrays oder Speicherung in einer Liste sind wurde ja hier im Thread bereits besprochen)

Namenloser 4. Aug 2009 08:57

Re: Erstellen von Objektlisten während des Programmablaufs
 
Zitat:

Zitat von Optiplex
Ich habe gerade was gelesen, dass es eine TClasslist gibt, kennt sich jenmand damit aus. Hat diese Liste Vorteile gegeüber einer Objektliste bei der Verwaltung von Objektlisten.

Klassen != Objekte

Da eine Variable vom Typ deiner von TObjectList abgeleiteten Klasse selbst auch wieder nur ein Objekt ist, kannst du sie ebenfalls in einer anderen Objektliste abspeichern. Eine TClassList ist jedoch eine Liste von Klassen, also Object-Typen, nicht von Objekten selbst. Das ist z.B. praktisch, wenn eine Klasse alle von ihr abgeleiteten Klassen kennen soll. Dann wird eine statische Klassenvariable vom Typ TClassList in der Basisklasse angelegt, und für jede abgeleitete Klasse ein Eintrag dort angelegt (am besten im initialization-Abschnitt).

Optiplex 4. Aug 2009 11:46

Re: Erstellen von Objektlisten während des Programmablaufs
 
Danke erstmal, ich hab das soweit verstanden, glaub ich jedenfalls.

Also ich erstelle eine Untypesierte Objektliste (mainliste) in einer Variablen für meine Typysierten ObjectListen.
Über diese mainliste kann ich meine Objektlisten ansprechen und auf die eigentlichen Objekte zugreifen.

Das werde ich mal ausprobieren, ob ich damit zurechtkomme, falls nicht melde ich mich wieder.

Danke Luckie für den Link.

Gruß
Dieter

Luckie 4. Aug 2009 11:55

Re: Erstellen von Objektlisten während des Programmablaufs
 
Ich würde eine typisierte nehmen, dann kannst du nicht versehentlich ein anderes Objekt in der Liste ablegen.

Optiplex 5. Aug 2009 07:35

Re: Erstellen von Objektlisten während des Programmablaufs
 
Hallo zusammen
muss mich noch mal melden, denn ich habe Probleme mit den Variablen für die Objektlisten

Turnierliste ->KOSystemSpieleListe ->Spielerliste
->DoppelKOSpieleListe ->Spielerliste

natürlich gibt es zu jeder Liste auch ein Objekt wobei das Objekt Spiel in den Spielelisten gleich ist
so sieht der Aufbau im Hintergrund aus
wie bekomme ich das nun mit den Variablen geregelt, da ich ja jede Liste in einer Variablen erstellen muss, ich aber nicht weis wie viele Turniere und welchen Turniertyp der User startet. Daher kenne ich auch nicht die Anzahl der einzelnen Spielerlisten.

Hat jemand eine Lösung für dieses Problem? Bin noch ziemlich ungeübt mit dem Umgang von OOP.

@Luckie
ich wollte eine untypisierte Turnierliste da dort wie du siehst verschiedene Spielelisten geführt werden sollen(da habe ich aber auch noch Erklärungsbedarf, da ich nicht weis wie ich die einzelnen Turniere ansprechen soll.)

Gruß Dieter

Luckie 5. Aug 2009 09:03

Re: Erstellen von Objektlisten während des Programmablaufs
 
Na ja:
Delphi-Quellcode:
MyObjectList := ContainerObjectListe.Items[i]
Liefert dir die Objektliste in der Objektliste.

Dann müsste
Delphi-Quellcode:
MyObject := MyObjectList.Items[j]
dir das Objekt in der Objektliste zurückgeben.


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