![]() |
Re: Sub-Komponenten serialisieren
soo... hab jetzt das text-dfm:
Code:
das ist das, was geschrieben werden sollte. ich paste jetzt einfach noch mal meinen code:
object TPanel
Left = 16 Top = 68 Width = 207 Height = 186 TabOrder = 0 end
Delphi-Quellcode:
Nicht, weil ich zu faul bin zum debuggen, sondern weil ich einfach schon alles versucht habe. "knallt hier" ist markiert in der load-procedure... :cry:
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; |
Re: Sub-Komponenten serialisieren
Nur ne Vermutung: Vor dem ReadComponent fehlt evtl. n Position := 0;
BTW:
Delphi-Quellcode:
Du greifst doch nicht etwa von außen auf ein Feld zu oder? :?
Manager.FControl
mfg Christian |
Re: Sub-Komponenten serialisieren
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:
Lesen:
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;
Delphi-Quellcode:
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).
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; gruß oki |
Re: Sub-Komponenten serialisieren
Hmmm...
Zitat:
Zitat:
|
Re: Sub-Komponenten serialisieren
Zitat:
![]() mfg Christian |
Re: Sub-Komponenten serialisieren
Properties? Ja, da muss ich nur das "F" aus dem aufrufenden Source entfernen :mrgreen:
|
Re: Sub-Komponenten serialisieren
Zitat:
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 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