Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kniffliges Problem beim Serialisieren (https://www.delphipraxis.net/85737-kniffliges-problem-beim-serialisieren.html)

SMALLID 9. Feb 2007 18:58

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 ...

Jens Schumann 10. Feb 2007 08:38

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:
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.
Ein Blick in die OH unter CreateNew sollte als Erklärung ausreichen


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Seite 3 von 3     123   

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