Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Dynamische Variabeln?
Bestzeller - Mi 22.04.09 20:16
Titel: Dynamische Variabeln?
Hi,
Ich hab ein eigenes Objekt erstellt und jedes mal wenn ich ein neues erstelle ,das alte aber noch behalten will, muss ich oben var object1,object2,....:Myobject hinschreiben, gibt es da auch eine andere Möglichkeit, soddass ich das nur einmal da stehen haben muss?
jakobwenzel - Mi 22.04.09 20:22
Du kannst Arrays (dynamische in dem Fall) oder eine TObjectList verwenden.
Bestzeller - Mi 22.04.09 20:33
Danke für die schnelle antwort!
Würde es dann object:array of Myobject heißen oder wie mach ich das ?
jaenicke - Mi 22.04.09 20:36
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var MyList: TObjectList; begin MyList := TObjectList.Create; MyList.OwnsObjects := True;
... MyList.Add(MeinObject); ... TMyObject(MyList[0]). ... ...
MyList.Free; end; |
Bestzeller - Mi 22.04.09 21:08
Ich komm mit der Tobjectlist nicht klar, welche uses braucht man für die? Und ist es egal wenn alle Objekte darin den gleichen Namen haben? Und sprech ich das erste Objekt so an : TMyObject(MyList[0]) ?
jaenicke - Mi 22.04.09 21:16
Bestzeller hat folgendes geschrieben : |
| Ich komm mit der Tobjectlist nicht klar, welche uses braucht man für die? |
Siehe Hilfe: Contnrs ;-)
Bestzeller hat folgendes geschrieben : |
| Und ist es egal wenn alle Objekte darin den gleichen Namen haben? |
Der Name einer Komponente hat keine Bedeutung dabei, allerdings können auf einem Forumlar nicht mehrere des gleichen Namens liegen.
Ich vermute du meinst die Bezeichnung der Variablen, die du da hineinlegst? Du packst da nur das Objekt bzw. dessen Adresse hinein, das hat mit dem Variablennamen in Delphi gar nix zu tun.
Bestzeller hat folgendes geschrieben : |
| Und sprech ich das erste Objekt so an : TMyObject(MyList[0]) ? |
Richtig, wobei TMyObject eben der Typ deines Objekts ist.
Bestzeller - Mi 22.04.09 21:30
Danke dir , aber er kennt Tobjectlist immer noch nicht. Gibt es das schon bei Delphi 4? Wenn nein weiß ich wieso.^^
jaenicke - Mi 22.04.09 21:45
Delphi 4? Da gibts das vielleicht noch nicht. Gibts nen Grund, dass du nicht nur eine so uralte sondern auch noch eine relativ fehlerbehaftete Version benutzt?
Sonst würde ich dir
Turbo Delphi [
http://www.delphi-library.de/viewtopic.php?p=539975] empfehlen, das ist eine kostenlose Version von Delphi 2006 Professional, in die man nur keine zusätzlichen Packages installieren kann. Man muss also zusätzliche Komponenten manuell erzeugen.
Dafür sind z.B. viele Internet- und DB-Komponenten bereits dabei.
Bei dir kannst du TList benutzen, musst dich aber um die Freigabe dann selbst kümmern.
Bestzeller - Sa 25.04.09 19:24
Das liegt daran, dass wir in der Schule noch Delphi 4 haben ;)
Hidden - So 26.04.09 02:21
Tja, als Lösung blieben dann die schon genannten Arrays übrig, müsste sich was zu finden lassen :)
Im Prinzip könntest du dir deine TObjectList auch einfach selbst programmieren. Das könntest du für den einfachen Fall noch so gestalten, dass jedes dieser Objekte einen Zeiger auf ein weiteres(seinen Nachfolger) erhält.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TMyObject = class(TObject) private FNext: TMyObject; public destructor Destroy; override; procedure AppendSuccessor; end;
destructor TMyObject.Destroy; begin FNext.Free; inherited Destroy; end;
procedure TMyObject.AppendSuccessor; begin FNext := TMyObject.Create; end; |
mfG,
jaenicke - So 26.04.09 03:44
TList gibt es wie gesagt dort bereits. Nur die automatische Freigabe mit TObjectList eben nicht.
Heißt: Die Objekte müssen nicht nur in die Liste eingefügt werden, sondern beim Löschen aus der Liste auch wieder aus dem Speicher entfernt werden mit Free, genauso beim Beenden des Programms.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!