AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi propertys speichern mit filestream.writecomponent
Thema durchsuchen
Ansicht
Themen-Optionen

propertys speichern mit filestream.writecomponent

Ein Thema von richard_boderich · begonnen am 17. Aug 2005 · letzter Beitrag vom 21. Aug 2005
Antwort Antwort
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

propertys speichern mit filestream.writecomponent

  Alt 17. Aug 2005, 15:46
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:
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;
also meine speicherroutine funktioniert. er geht ne objectlist durch und speichert die objecte schoen nacheinander. stehen alle in der datei drin.
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
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: propertys speichern mit filestream.writecomponent

  Alt 17. Aug 2005, 15:49
for i:=filestream.position to filestream.Size-1 do So nicht!

while filestream.Postition < filestream.Size do Besser so
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#3

Re: propertys speichern mit filestream.writecomponent

  Alt 17. Aug 2005, 16:14
danke dax,

funzt prima! kleine frage trotzdem noch. wird nicht in dieser zeile schon das object erstellt?

item:=FileStream.ReadComponent(nil) as TMapObject; //fehler tritt auf. (stream read error) warum wird es aber erst sichtbar, wenn ich es nochma ueber den construcktor aufrufe?

    item.Create(self,image1.Left+item.MapX,image1.Top+item.mapy,item.einheitentyp,item.status);
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: propertys speichern mit filestream.writecomponent

  Alt 17. Aug 2005, 16:17
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
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#5

Re: propertys speichern mit filestream.writecomponent

  Alt 17. Aug 2005, 16:24
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).
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#6

Re: propertys speichern mit filestream.writecomponent

  Alt 20. Aug 2005, 19:25
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:
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;
Das Speichern funktioniert so weit, nur beim Laden gibt es dann einen Fehler:
»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?

LG, ich
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#7

Re: propertys speichern mit filestream.writecomponent

  Alt 21. Aug 2005, 12:10
Juhuuuuu
Hab's jetzt herausgefunden:
Stream.ReadComponent(Memo1); Also nicht der Rückgabewert, sondern der Parameter...


LG
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:51 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