AGB  ·  Datenschutz  ·  Impressum  







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

ganze Forms abspeichern

Ein Thema von orakel · begonnen am 19. Jun 2004 · letzter Beitrag vom 20. Jun 2004
Antwort Antwort
orakel

Registriert seit: 18. Mai 2004
53 Beiträge
 
Delphi 6 Personal
 
#1

ganze Forms abspeichern

  Alt 19. Jun 2004, 17:23
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:
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;
Hier mein Beispiel:
Delphi-Quellcode:
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;
Was mach ich beim erstellen der neuen Form falsch?

THX orakel
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: ganze Forms abspeichern

  Alt 19. Jun 2004, 17:42
Zitat von orakel:
...
Dazu hab ich folgenden Code aus der Hilfe mal getestet.
Aber irgendwie funktioniert das nicht.(Beispiel)
'irgendwie geht nicht' ist keine, mir bekannte, fehlermeldung! Wenn du mal etwas präziser wirst, dann helfe ich dir gerne, da ich mich mit dem scheiss bestens auskenne
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
orakel

Registriert seit: 18. Mai 2004
53 Beiträge
 
Delphi 6 Personal
 
#3

Re: ganze Forms abspeichern

  Alt 19. Jun 2004, 17:51
Er compiliert ohne probleme,aber beim ausführen bzw. beim Klick auf Button3 kommt Fehlermeldung:"Class TForm not found"

in dieser Zeile:
Result := BinStream.ReadComponent(nil);
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: ganze Forms abspeichern

  Alt 19. Jun 2004, 18:08
Hallo,
so kommst Du glaube ich auch zum Ziel
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  Fenster2 : TForm;
begin
  Fenster2:=TForm1.Create(Self);
  Fenster2.ShowModal;
end;
[edit]Habe gerade gelesen, dass der Inhalt auch übernommen werden soll. Das geht so nicht[/edit]
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#5

Re: ganze Forms abspeichern

  Alt 19. Jun 2004, 18:54
Zitat von orakel:
Er compiliert ohne probleme,aber beim ausführen bzw. beim Klick auf Button3 kommt Fehlermeldung:"Class TForm not found"

in dieser Zeile:
Result := BinStream.ReadComponent(nil);
Das liegt wohl daran, dass TForm keine installierte komponente ist. Du kannst klassen aber nachträglich registrieren:

Delphi-Quellcode:
initialization
  registerClass(TForm);
Die restlichen komponenten müssten eigentlich registriert sein.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: ganze Forms abspeichern

  Alt 20. Jun 2004, 12:02
Hallo orakel
eigentlich habe diesen Beitrag schon gestern gepostet. Ist aber irgendwie nicht angekommen.

Also hier die Lösung:
Delphi-Quellcode:
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;
Der Tip von Maximov mit RegisterClass ist natürlich Voraussetzung damit es funktioniert.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
orakel

Registriert seit: 18. Mai 2004
53 Beiträge
 
Delphi 6 Personal
 
#7

Re: ganze Forms abspeichern

  Alt 20. Jun 2004, 21:29
werds gleich mal ausprobieren
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:43 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