Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mehrere Objekte in einer Schleife erzeugen (https://www.delphipraxis.net/3899-mehrere-objekte-einer-schleife-erzeugen.html)

Flogo 4. Apr 2003 15:18


Mehrere Objekte in einer Schleife erzeugen
 
Hi Leute ich würde gern sowas hier machen:

Code:
  for i := 1 to LevelZahl do
    Levels[i] := (TLevel + IntToStr(i)).Create;
TLevel1 bis TLevel20 (oder mehr) sind alles Klassen vom Typ TLevel von dem auch das Array ist.

Geht das irgendwie?

sakura 4. Apr 2003 15:39

Mir ist leider keine Möglichkeit bekannt. Das hört sich aber auch nicht unbedingt nach einem durchdachten Konzept an. Sind die Level denn wirklich alle so unterschiedlich, dass jedes eine eigene Klasse benötigt?

...:cat:...

Flogo 4. Apr 2003 15:47

Ich hab leider keine Idee wie ichs sonst machen soll (das mit den Klassen nicht das mit dem erstellen) in den Klassen steht drin was bei einem Klick passiert (ist für ein Point-n-Klick-Adventure) außerdem sind da alle Variablen von dem Level drin.
Im der Klasse steht also sowas wie

Code:
  if HaveRedKey then OpenDoor(2)
also unterscheiden sich die LevelKlassen schon stark.

Das mit dem Erstellen kann ich zur Not auch "von Hand" machen
also

Code:
Levels[1] := TLevel1.Create;
Levels[2] := TLevel2.Create;
Levels[4] := TLevel3.Create;
...
aber für die Levelklassen fällt mir nichts anderes ein

Touchdown 4. Apr 2003 17:04

Warum einfach wenns auch kompliziert geht.

Versuch mal das und hin und wieder F1 :mrgreen:


Delphi-Quellcode:
Liste : TObjectlist; // irgendwo public
Level : TLevel;     // irgendwo lokal wenn möglich
for i := 0 to sovielLevelwieduhast -1 do
begin
  Level := TLevel.create; / so sind natürlich alle vom gleichen Typ
  Liste.add(Level);
end;

Flogo 4. Apr 2003 17:23

Ich kann nicht alle vom gleichen typ machen weil ja in jedem was anderes passiert (andere Variablen + if verschachtelungen)
Aber mal abgesehen davon was für einen Vorteil hat die ObjectList gegenüber einem array of TOjekt??

Christian Seehase 4. Apr 2003 18:50

Moin Flogo,

eine Idee noch:

Benutze immer die gleich Klasse, und übergebe beim Constructor die erforderliche Nummer als Paramter.

So kannst Du dann innerhalb der Kompo anhand des Parameters entscheiden, was passieren soll.

Das würde vor allem dann Sinn machen, wenn die Masse der Methoden bei allen TLevelXX Klassen ansonsten gleich ist.

Touchdown 4. Apr 2003 21:41

Einfach 'TObjectlist' in Delphi eingeben und F1 drücken, dann siehst du die Vorteile (ich könnte auch copy-paste machen :mrgreen: )

Array of TObject = Prozedurale Programmierung mit dem Deckmantel der OOP! (etwas übertrieben aber stimmt im Grunde). Noch schlimmer sind Records und Co!

Flogo 5. Apr 2003 07:58

gut ich hab versucht auf die TObjectList umzusteigen
aber bei meinem array konnte ich sagen
Code:
Levels[5].load
Bei der Liste geht das nicht mehr. brauch ich da ne eigene function, die mir das richtige object und die richtige klasse zurückgibt?

Touchdown 5. Apr 2003 13:42

Also erstmal, die Hilfe kann man über F1 aufrufen, F1 befindet sich neben der Taste 'ESC'. Da du damit offensichtlich Probleme damit hast hier ein Copy-Paste aus meiner Hilfe :mrgreen:

Mit TObjectList können Sie eine Liste von Objekten speichern und verwalten. Die Komponente stellt Eigenschaften und Methoden für das Hinzufügen, Löschen, Umsortieren, Suchen, Zugreifen und Sortieren von Objekten zur Verfügung. Ist die Eigenschaft OwnsObjects auf true gesetzt (Voreinstellung), verwaltet TObjectList den Speicher seiner Objekte, das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird, wenn es mit der Methode Delete, Remove oder Clear aus der Liste entfernt wird oder wenn die Instanz TObjectList selbst aufgelöst wird.

Flogo 5. Apr 2003 17:18

Ok Ok Ich hab die Hilfe schon gefunden (Die F1 Taste auch. war neben der F2 Taste :wink: )
Aber hast du meinen Thread gelesen??

Code:

Levels.Items[2].load; //Levels ist eine TObjectList
//funktioniert nicht

Levels[2].load; //Hier ist Levels ein Array of TLevel
//funktioniert


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.
Seite 1 von 3  1 23      

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