AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStringList und Add-/InsertObject (Verständnisprobleme)
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList und Add-/InsertObject (Verständnisprobleme)

Ein Thema von Karsten · begonnen am 5. Sep 2003 · letzter Beitrag vom 8. Sep 2003
 
aogwaba

Registriert seit: 21. Aug 2003
16 Beiträge
 
#10

Re: TStringList und Add-/InsertObject (Verständnisprobleme)

  Alt 7. Sep 2003, 11:20
Dann benutz doch eine Klasse statt eines Records, und pack die ganze mechanik da hinein.
Um eine TList baust du eine Wrapper-Klasse, welche deine Daten verwaltet.
Ist ein bisschen mehr Schreibarbeit, aber wesentlich besser wartbar und
in ein paar Wochen noch nachvollziehbar....

Delphi-Quellcode:

unit Unit1;

interface

uses classes,SysUtils;
type

TDaten=class
constructor create (s:string;i:integer);
private
mytext:String;
myinteger:integer;
public
procedure readFromStream(aStream:tstream);
function writeToStream(aStream:tstream):integer;
end;

TDatenContainer=class
constructor create(fname:string);overload;
destructor destroy;override;
private
filename:string;
mylist:tlist;

public
procedure addItem(td:tdaten);
function getItemAt(i:integer):tdaten;

procedure readFromStream(aStream:Tstream);
procedure writeToStream(aStream:TStream);

end;

implementation

constructor TDaten.create(s:string;i:integer);
begin
mytext:=s;
myinteger:=i;
end;

procedure tDaten.readFromStream(aStream:Tstream);
var len:integer;
begin
  aStream.read(myinteger,sizeof(myinteger));
  aStream.read(len,sizeof(len));
  setLength(mytext,len);
  aStream.read(mytext[1],sizeof(mytext));
  //...
end;

function TDaten.writeToStream(aStream:tstream):integer;
var len:integer;
begin
  result:=aStream.position;
  aStream.write(myinteger,sizeof(myinteger));
  len:=length(mytext);
  aStream.write(len,sizeof(len));
  aStream.write(mytext[1],sizeof(mytext));
  //...
end;

constructor TDatenContainer.create(fname:string);
begin
  inherited create;
  filename:=fname;
  mylist:=tlist.create;
end;

procedure TDatenContainer.addItem(td:tdaten);
begin
  mylist.add(td);
end;

function TDatenContainer.getItemAt(i:integer):tdaten;
begin
result:=nil;
if i<mylist.count then result:=mylist.items[i];
end;

procedure TDatenContainer.readFromStream;
var mystream:tfileStream;
mydaten:tdaten;
i:integer;
begin
try
mystream:=tfilestream.create(filename,fmopenread);
mystream.read(i,sizeof(i));
for i:=0 to mylist.count-1 do
begin
  mydaten:=TDaten.create; //erst Instanz erzeugen, sorry!
  mydaten.readFromStream(mystream);
  Mylist.add(mydaten);
end;
finally
mystream.free;
end;
end;

procedure TDatenContainer.writeToStream;
var mystream:tfileStream;
mydaten:tdaten;
i,len:integer;
begin
try
mystream:=tfilestream.create(filename,fmopenread);
len:=mylist.count;
mystream.write(len,sizeof(len));
  for i:=0 to mylist.count-1 do
  begin
    mydaten:=mylist.items[i];
    mydaten.writeToStream(mystream);
  end;
finally
mystream.free;
end;
end;

destructor TDatenContainer.destroy;
begin
mylist.free;
inherited;
end;
  
end.
packed record= entfernt die padding(Füll-) bytes welche Delphi per default einfügt.

cu Waba
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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