Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Container(Listen) für Records? (https://www.delphipraxis.net/69785-container-listen-fuer-records.html)

Bloodfire 19. Mai 2006 21:50


Container(Listen) für Records?
 
Hi!

Gibt es keine Container(-liste) für Records?
(so wie TObjectlist)

Müsste ich, wenn ich mir dann eine Klasse, die nur aus String & Integer Eigenschaften besteht, per .Create-Aufruf erzeugen?

Danke!

himitsu 19. Mai 2006 22:10

Re: Container(Listen) für Records?
 
Wenn du den Speicher für deine Records selber reservierst (nicht über eine Variable), dann kannst du den Pointer zu diesem Record auch locker in sowas wie TObjectList speichern,

denn die TObjetctList ist ja auch nichts anderes, als eine Liste mit Pointern auf den Speicher der enthaltenen Objekte.

Hawkeye219 19. Mai 2006 22:23

Re: Container(Listen) für Records?
 
Zitat:

Zitat von himitsu
Wenn du den Speicher für deine Records selber reservierst (nicht über eine Variable), dann kannst du den Pointer zu diesem Record auch locker in sowas wie TObjectList speichern,

denn die TObjetctList ist ja auch nichts anderes, als eine Liste mit Pointern auf den Speicher der enthaltenen Objekte.

Dann aber die TObjectList über

Delphi-Quellcode:
List := TObjectList.Create(False);
erzeugen, sonst gibt's üble Probleme bei der Freigabe der Liste :wink: Besser wäre vielleicht eine TList.

Gruß Hawkeye

Bloodfire 19. Mai 2006 22:29

Re: Container(Listen) für Records?
 
Danke für die schnellen Antworten!

Ich glaube, ich werde aber eh eher eine Klasse erstellen und diese über eine TObjectList verwalten.
Wozu hat man denn auch eine objektorientierte Sprache? :-)

Aber hierzu nochmal der Verweis zu meiner vorigen Frage:
Muss man nun eine Variable einer Klasse createn, wenn die Klasse wie folgt aussieht:

Code:
TFormat = class(TObject)
    Name: String;
    FontName: String;
    FontSize: Integer;
    FontStyle: TFontStyle;
    FontColor: TColor;
    FontAlign: TAlignment;
    NextFormat: String;
  public
    constructor Create; //?? wird das benötigt?
    destructor Destroy; //?? wird das benötigt?

    procedure WriteFormat(fName, fFontName: String; fFontSize: Integer;
      fFontStyle: TFontstyle; fFontColor: TColor; fFontAlign: TAlignment;
      fNext: String);
    procedure SaveToFile(fFileName: String);
    procedure LoadFromFile(fFileName: String);
  end;
Oder reicht auch eine einfache Deklaration?

Code:
var
  format: tformat;
begin
  format.name:='test';
end;

Hawkeye219 19. Mai 2006 22:34

Re: Container(Listen) für Records?
 
Hallo,

die einfache Deklaration reicht nicht aus, da es sich um dynamische Datenstrukturen handelt. Du mußt die Objekte erzeugen und auch wieder freigeben:

Delphi-Quellcode:
Format := TFormat.Create;
:
Format.Free;
Gruß Hawkeye

Bloodfire 19. Mai 2006 22:42

Re: Container(Listen) für Records?
 
Ok, passt.

Das .Free übernimmt in meinem Fall dann aber die ObjectList per ObjectList.Delete(index), oder?

Hawkeye219 19. Mai 2006 22:52

Re: Container(Listen) für Records?
 
Ja, wenn Delphi-Referenz durchsuchenTObjectList.OwnsObjects auf True steht. Beim Aufruf des TObjectList-Constructors ohne Parameter wird das so gesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.

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