![]() |
propertys speichern mit filestream.writecomponent
hallo,
ich moechte mehrere objecte laden. habe aber ein problem mit filestream. vielleicht mach ich auch einen denkfehler? tum laden nehm ich folgenden code
Delphi-Quellcode:
also meine speicherroutine funktioniert. er geht ne objectlist durch und speichert die objecte schoen nacheinander. stehen alle in der datei drin.
var
FileStream : TFilestream; Item: TMapobject; Obj : TObject; i:integer; begin FileStream:=TFileStream.Create('test',fmOpenRead); for i:=filestream.position to filestream.Size-1 do begin item:=FileStream.ReadComponent(nil) as TMapObject; //fehler tritt auf. (stream read error) item.Create(self,image1.Left+item.MapX,image1.Top+item.mapy,item.einheitentyp,item.status); Liste.add(Tobject(item)); end; mein problem is, das ich beim laden ja noch nicht weis wieviele objecte enthalten sind ich wollt das mit der for next machen ala "until EOF". aber irgendwie mach ich das entweder einen denkfehler oder aber was anderes. laed readcomponent den den ganzen stream auf einmal oder wie bei readln nur immer einen datensatz? Gruß richard |
Re: propertys speichern mit filestream.writecomponent
Delphi-Quellcode:
So nicht! :roll:
for i:=filestream.position to filestream.Size-1 do
Delphi-Quellcode:
Besser so ;)
while filestream.Postition < filestream.Size do
|
Re: propertys speichern mit filestream.writecomponent
danke dax,
funzt prima! :) kleine frage trotzdem noch. wird nicht in dieser zeile schon das object erstellt?
Delphi-Quellcode:
warum wird es aber erst sichtbar, wenn ich es nochma ueber den construcktor aufrufe? :gruebel:
item:=FileStream.ReadComponent(nil) as TMapObject; //fehler tritt auf. (stream read error)
Delphi-Quellcode:
item.Create(self,image1.Left+item.MapX,image1.Top+item.mapy,item.einheitentyp,item.status);
|
Re: propertys speichern mit filestream.writecomponent
Ich glaube, du hast da was missverstanden. Das Objekt wird in der Tat beim lesen schon erstellt, alles, was dein nachgeschaltetes Create macht, ist ein paar Properties setzen. Du könntest genausogut mit .Parent, .Width, .Height usw hantieren ;)
|
Re: propertys speichern mit filestream.writecomponent
das object existiert also nicht doppelt?
naja das mit .parent hab ich probiert. aber das hatt nicht geklappt. ich dachte wenn ein object erstellt wird. wird dabei immer der construcktor aufgerufen? hab es erst versucht mit item.parent:=TWinControl(owner). |
Re: propertys speichern mit filestream.writecomponent
Beim hantieren mit Streams sind mir diese Methoden aufgefallen, und da wollte ich sie auch mal ausprobieren. Nur irgendwie funktioniert's bei mir nicht :(
Mein Code:
Delphi-Quellcode:
Das Speichern funktioniert so weit, nur beim Laden gibt es dann einen Fehler:
procedure loadKompo;
var Stream: TStream; begin Stream := TFileStream.Create('test.asdf', fmOpenRead or fmShareDenyNone); Memo1.Assign(Stream.ReadComponent(nil) as TMemo); //bzw.: »Memo1 := Stream.ReadComponent(nil) as TMemo;« - gleicher Fehler Stream.Free; end; procedure saveKompo; var Stream: TStream; begin Stream := TFileStream.Create('test.asdf', fmCreate or fmShareDenyNone); Stream.WriteComponent(Memo1); Stream.Free; end; »Im Projekt Project1.exe ist eine Exception der Klasse EClassNotFound mit der Meldung 'Klasse TMemo nicht gefunden' aufgetreten.« Weiß jemand, was ich da machen kann? :gruebel: LG, ich |
Re: propertys speichern mit filestream.writecomponent
Juhuuuuu :lol:
Hab's jetzt herausgefunden:
Delphi-Quellcode:
Also nicht der Rückgabewert, sondern der Parameter...
Stream.ReadComponent(Memo1);
:mrgreen: :mrgreen: LG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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