Einzelnen Beitrag anzeigen

Softchaos67

Registriert seit: 23. Jul 2004
39 Beiträge
 
Delphi 7 Enterprise
 
#1

TreeView hat kein Übergeordnetes Fenster (StringToComponent)

  Alt 23. Jul 2004, 10:24
Hallo,
ich versuche einen TreeView als String zu speichern. Habe dazu in der Delphi Hilfe die funktionen
Code:
function ComponentToString(Component: TComponent): string;
function StringToComponent(Value: string): TComponent;
gefunden.
ComponentToString funktioniert erwartungsgemäss.
Wenn ich aber versuche den TreeView wieder zu laden bekomme ich folgende FehlerMeldung:

Element TreeView1 hat kein übergeordnetes Fenster!

Die Exception wird in der funktion StringToComponent erzeugt
Result := BinStream.ReadComponent(nil);

Woran könnte das liegen?
Hier der Source
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
   Panel1 := TPanel.Create(Self);
   If OpenDialog1.Execute then begin
      memo1.Lines.LoadFromFile(OpenDialog1.FileName);
      Panel1 := TPanel(StringToComponent(memo1.Text));
   end;
   Panel1.Parent := Form2;
   Panel1.Visible := true;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
   TreeView1 :TTreeView;
begin
  TreeView1 := TTreeView.Create(Self);
  TreeView1.Parent := Panel2;

   If OpenDialog1.Execute then begin
      memo1.Lines.LoadFromFile(OpenDialog1.FileName);
      TreeView1 := TTreeView(StringToComponent(memo1.Text));
   end;
   TreeView1.Visible := false;
   TreeView1.Parent := Panel2;
   TreeView1.Visible := true;
end;
Mit dem Panel funktioniert das tadellos#
Hier noch die funktionen:
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;
//----------------------------------------------------------------------------------------------------------------------
initialization
   RegisterClass(TPanel);
   RegisterClass(TTreeView);
end.
danke für eure Hilfe!
irgendwie gehts.....
  Mit Zitat antworten Zitat