![]() |
ganze Forms abspeichern
Hi,
ich habe bei meinem Proggi eine Form, von der aus weitere zur Laufzeit erstellt werden können. Ich möchte nun eine Speicher/Laden -Funktion mit einbauen. Da sollen dann die ganzen Forms (mit Inhalt) abgespeichert werden. Dazu hab ich folgenden Code aus der Hilfe mal getestet. Aber irgendwie funktioniert das nicht.(Beispiel)
Delphi-Quellcode:
Hier mein Beispiel:
function ComponentToString(Component: TComponent): string;
var BinStream:TMemoryStream; StrStream: TStringStream; s: string; begin BinStream := TMemoryStream.Create; try StrStream := TStringStream.Create(s); try BinStream.WriteComponent(Component); BinStream.Seek(0, soFromBeginning); ObjectBinaryToText(BinStream, StrStream); StrStream.Seek(0, soFromBeginning); Result:= StrStream.DataString; finally StrStream.Free; end; finally BinStream.Free end; end; function StringToComponent(Value: string): TComponent; var StrStream:TStringStream; BinStream: TMemoryStream; begin StrStream := TStringStream.Create(Value); try BinStream := TMemoryStream.Create; try ObjectTextToBinary(StrStream, BinStream); BinStream.Seek(0, soFromBeginning); Result := BinStream.ReadComponent(nil); finally BinStream.Free; end; finally StrStream.Free; end; end;
Delphi-Quellcode:
Was mach ich beim erstellen der neuen Form falsch?
procedure TForm1.Button1Click(Sender: TObject);
begin Fenster1:=TForm.Create(self); Fenster1.show; end; procedure TForm1.Button2Click(Sender: TObject); begin Form1.Memo2.Text:=ComponentToString(Fenster1); end; procedure TForm1.Button3Click(Sender: TObject); var Fenster2:TComponent; begin Fenster2:=StringToComponent(Memo2.Text).Create(self); end; THX orakel |
Re: ganze Forms abspeichern
Zitat:
|
Re: ganze Forms abspeichern
Er compiliert ohne probleme,aber beim ausführen bzw. beim Klick auf Button3 kommt Fehlermeldung:"Class TForm not found"
in dieser Zeile:
Delphi-Quellcode:
Result := BinStream.ReadComponent(nil);
|
Re: ganze Forms abspeichern
Hallo,
so kommst Du glaube ich auch zum Ziel
Delphi-Quellcode:
[edit]Habe gerade gelesen, dass der Inhalt auch übernommen werden soll. Das geht so nicht[/edit]
procedure TForm1.Button3Click(Sender: TObject);
var Fenster2 : TForm; begin Fenster2:=TForm1.Create(Self); Fenster2.ShowModal; end; |
Re: ganze Forms abspeichern
Zitat:
Delphi-Quellcode:
Die restlichen komponenten müssten eigentlich registriert sein.
initialization
registerClass(TForm); |
Re: ganze Forms abspeichern
Hallo orakel
eigentlich habe diesen Beitrag schon gestern gepostet. Ist aber irgendwie nicht angekommen. Also hier die Lösung:
Delphi-Quellcode:
Der Tip von Maximov mit RegisterClass ist natürlich Voraussetzung damit es funktioniert.
procedure TForm1.Button2Click(Sender: TObject);
var Fenster2 : TForm1; MStream : TMemoryStream; begin Fenster2:=TForm1.CreateNew(Application); // CreateNew mal in der OH nachschlagen MStream:=TMemoryStream.Create; Try MStream.WriteComponent(Self); MStream.Position:=0; MStream.ReadComponent(Fenster2); Fenster2.Visible:=False; // Für Visible wird True aus dem Stream gelesen. Muss aber False sein // nicht notwendig -> Fenster2.Left:=Left+20; Fenster2.Top:=Top+20; // <- nicht notwendig Fenster2.ShowModal; Finally MStream.Free; // Fenster2.Release; end; end; |
Re: ganze Forms abspeichern
werds gleich mal ausprobieren
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz