AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sub-Komponenten serialisieren

Offene Frage von "DGL-luke"
Ein Thema von DGL-luke · begonnen am 30. Aug 2006 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#21

Re: Sub-Komponenten serialisieren

  Alt 6. Okt 2006, 16:53
soo... hab jetzt das text-dfm:

Code:
object TPanel
  Left = 16
  Top = 68
  Width = 207
  Height = 186
  TabOrder = 0
end
das ist das, was geschrieben werden sollte. ich paste jetzt einfach noch mal meinen code:

Delphi-Quellcode:
procedure TFormElementSupplier.Load(FileName: string; Parent: TWinControl; Add: Boolean);
var Manager: TBaseFormElementManager;
    ManagerClass: TBaseFormElementManagerClass;
    ms,msc: TMemoryStream;
    size: Integer;
    Index: Integer;
begin
  IsUnSerializing := True;
  if not Add then
    Elements.Clear;

  ms := TMemoryStream.Create;
  msc := TMemoryStream.Create;
  try
    ms.LoadFromFile(FileName);
    ms.Position := 0;
    while ms.Position < ms.Size do
    begin
      //read class and size of element
      ms.Read(ManagerClass,sizeof(ManagerClass));
      ms.Read(size,SizeOf(size));

      //copy element into temporary stream to isolate it
      msc.Clear;
      msc.CopyFrom(ms,size);

      //create manager
      Manager := ManagerClass.Create;
      //create element
      Manager.FControl := ManagerClass.ElementClass.Create(Manager);
      //unserialize element
      msc.ReadComponent(Manager.FControl); //<--- knallt hier... "Stream-Lesefehler"
      Manager.InitElement(Parent);
    end;
  finally
    ms.Free;
    msc.Free;
  end;
  IsUnSerializing := False;
end;

procedure TFormElementSupplier.Save(FileName: string);
var i,size: Integer;
    ms,msc,textstream: TMemoryStream;
    ManagerClass: TClass;
    s: string;
begin
  ms := TMemoryStream.Create;
  msc := TMemoryStream.Create;
  textstream := TMemoryStream.Create;
  try
    for i := 0 to Elements.Count -1 do
    begin
      //write the control
      msc.Clear;
      msc.WriteComponent(Elements[i].FControl);
      msc.Position := 0;

      size := msc.Size;
      ObjectBinaryToText(msc,textstream);
      msc.Position := 0;

      //write the manager's class
      ManagerClass := Elements[i].ClassType;
      ms.Write(ManagerClass, SizeOf(ManagerClass));

      //write the size of the control
      ms.Write(size,SizeOf(size));
      //write the control
      ms.CopyFrom(msc, msc.Size);
    end;
    ms.Position := 0;
    ms.SaveToFile(FileName);
    textstream.SaveToFile(Filename + 'txt');
  finally
    ms.Free;
    msc.Free;
    textstream.Free;
  end;
end;
Nicht, weil ich zu faul bin zum debuggen, sondern weil ich einfach schon alles versucht habe. "knallt hier" ist markiert in der load-procedure...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#22

Re: Sub-Komponenten serialisieren

  Alt 6. Okt 2006, 17:35
Nur ne Vermutung: Vor dem ReadComponent fehlt evtl. n Position := 0;

BTW: Manager.FControl Du greifst doch nicht etwa von außen auf ein Feld zu oder?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#23

Re: Sub-Komponenten serialisieren

  Alt 6. Okt 2006, 17:42
Hi jungs,

als ich das hier gelesen habe hab ich mich daran erinnert, dass ich ähnliches auch mal am Wickel hatte. das aber unter D5.

Bei mir war es so, dass beim Lesen der Serialisierung die Instanz der Komponente existieren mußte. Also bei nil ging es sowiso in die Hose. es reichte aus einfach erst mal ein Create auszuführen.

Ich geb euch hier mal meinen code für das Schreiben und Lesen der Serialisierung. Ich hoffe es hilft. Bei mir war es dann eigentlich kein Problem mehr.

Schreiben:
Delphi-Quellcode:
procedure TSercheThread.WriteListToFile;
var Stream : TFileStream;
begin
  IF not Assigned(FMahnListView) then Exit;
  Stream := TFileStream.Create(MahnFileName, fmCreate or fmShareDenyNone);
  try
    Stream.WriteComponent(FMahnListView);
  finally
    Stream.Free;
  end;
end;
Lesen:
Delphi-Quellcode:
procedure TSercheThread.ReadListFromFile;
var Stream : TFileStream;
begin
  IF not Assigned(FMahnListView) then Exit;

  IF not FileExists(ExtractFilePath(Application.ExeName) + MahnFileName) then
    Stream := TFileStream.Create(MahnFileName, fmCreate or fmShareDenyNone)
  else
    Stream := TFileStream.Create(MahnFileName, fmOpenReadWrite or fmShareDenyNone);

  try
    IF Stream.Size = 0 then Exit;
    FMahnListView := TListView(Stream.ReadComponent(FMahnListView));
  finally
    Stream.Free;
  end;
end;
Das war dann auch wirklich ein TListView. Ob das alles so mit TControl funzt wage ich zu bezweifeln. Ich hoffe ich konnte euch einen Hinweis geben der hilft (bin grad knapp in der Zeit und habe diesen Thread nur diagonal gelesen).

gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Sub-Komponenten serialisieren

  Alt 7. Okt 2006, 00:00
Hmmm...

Zitat:
Nur ne Vermutung: Vor dem ReadComponent fehlt evtl. n Position := 0;


Zitat:
Du greifst doch nicht etwa von außen auf ein Feld zu oder?
Tu ich. Sollte aber funktionieren, ich initialisiere alles was nötig ist.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#25

Re: Sub-Komponenten serialisieren

  Alt 7. Okt 2006, 08:31
Zitat von DGL-luke:
Tu ich. Sollte aber funktionieren, ich initialisiere alles was nötig ist.
Für sowas gibts eigentlich properties... Warum man properties nehmen sollte und keine public fields? Wart ma ich hab da vor einiger Zeit n lustigen Text dazu gelesen... *sucht* Ah da haben wirs: http://tut.php-q.net/klassen.html Interessant is hier das Kapitel "6. Vererbung in PHP und typische Fallen". Der Rest dürfte Kalter Kaffee sein... Is zwar für PHP und da gibts leider keine properties(komischerweise nennen die da Felder Eigenschaften, aber was solls). Anhand der Evolution der Meerschweinchen sieht man da ganz gut, warum öffentliche Felder böse sind... *g*

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Sub-Komponenten serialisieren

  Alt 7. Okt 2006, 15:59
Properties? Ja, da muss ich nur das "F" aus dem aufrufenden Source entfernen
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#27

Re: Sub-Komponenten serialisieren

  Alt 7. Okt 2006, 16:32
Zitat von DGL-luke:
Properties? Ja, da muss ich nur das "F" aus dem aufrufenden Source entfernen


mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 03:34 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