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

user profile iconBestzeller hat folgendes geschrieben Zum zitierten Posting springen:
Ich komm mit der Tobjectlist nicht klar, welche uses braucht man für die?

Siehe Hilfe: Contnrs ;-)

user profile iconBestzeller hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconBestzeller hat folgendes geschrieben Zum zitierten Posting springen:
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.