![]() |
Re: Kniffliges Problem beim Serialisieren
Ja das hatte ich wieder als "Workaround" auch schon im Sinn. Der Owner ist ja meines Wissens nach eine Read-Only-Eigenschaft. Ich müsste den dann also explizit nochmal schreiben (obwohl allein durch die Dateistruktur ja schon klar ist, welche Komponente zu wem gehört) und dann mit der Methode "InsertComponent" arbeiten. Also erst laden, dann schauen welcher Owner in der Datei-Property steht, und die Komponente dorthin einfügen.
Das ist aber so ... unelegant. Es muss doch eine elegante Möglichkeit, quasi äquivalent zu "getChildren" beim Speichern geben ... |
Re: Kniffliges Problem beim Serialisieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
wenn ich es richtig verstanden habe geht es darum die Eingaben in den Controls über das Streamingsystem zu speichern. Ich verfolge den Thread schon einige Zeit. Leider habe ich in den Untiefen meines Archivs erst jetzt die Lösung gefunden.
Delphi-Quellcode:
Ein Blick in die OH unter CreateNew sollte als Erklärung ausreichen
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StatusBarEx, Menus, StdCtrls; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; SB: TStatusBarEx; ffnen1: TMenuItem; Memo1: TMemo; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; OpenDialog: TOpenDialog; procedure Beenden1Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure ffnen1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } constructor Create(aOwner: TComponent); override; end; var Form1: TForm1; implementation uses Utils1; {$R *.DFM} procedure TForm1.Beenden1Click(Sender: TObject); begin Close; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var fs: TFilestream; FFilename : String; begin FFilename:=ApplicationPath+'controls.sav'; fs:= TFilestream.Create(FFilename, fmCreate); try fs.WriteComponent(self); finally fs.free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin WriteToStatusBar(SB,'Writecomponent Test',0); end; procedure TForm1.ffnen1Click(Sender: TObject); begin If Not Opendialog.Execute then Exit; Memo1.Lines.LoadFromFile(Opendialog.Filename); end; constructor TForm1.Create(aOwner: TComponent); var fs: TFileStream; FFilename : String; begin FFilename:=ApplicationPath+'controls.sav'; if FileExists(FFilename) then begin CreateNew(aOwner); // Hier ist der Trick fs:= TFileStream.Create(FFilename, fmOpenread or fmShareDenyWrite); try fs.ReadComponent(self); finally fs.free; end; end else inherited Create(aOwner); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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