![]() |
TreeView hat kein Übergeordnetes Fenster (StringToComponent)
Hallo,
ich versuche einen TreeView als String zu speichern. Habe dazu in der Delphi Hilfe die funktionen
Code:
gefunden.
function ComponentToString(Component: TComponent): string;
function StringToComponent(Value: string): TComponent; 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:
Mit dem Panel funktioniert das tadellos#
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; Hier noch die funktionen:
Delphi-Quellcode:
danke für eure Hilfe!
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. |
Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon
Also zu Deinem Problem kann ich Dir nicht wirklich was sagen, aber ich nutze Folgende Methoden, wenn ich mal einen Treeview abspeichern und wieder laden will.
Delphi-Quellcode:
und zum laden
TreeView1.SaveToFile('inhalt.dat');
Delphi-Quellcode:
Vielleicht bringt Dich das weiter!?
TreeView1.SaveFromFile('inhalt.dat');
Tom |
Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon
Ja, das hatte ich auch schon.
Ich bräuchte halt die andere Version. Im übrigen will ich wissen, warum das Panel funktioniert, die TreeView aber nicht. Trotzdem Danke :P |
Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon
Zu dem Fehler, falls es unklar ist. Das Treeview hat keinen Parent, das ist relativ klar, warum dies so ist, ist nicht ganz so einfach :shock:
Möglicherweise hast du zwei Zeiger von TTreeview, in Gegensatz zu Panel_Beispiel ist Treeview1 lokal deklariert. Ich denke es gibt zweimal Treeview1. |
Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon
wenn ich keine lokale TreeView Variable deklariere oder den Create weglasse habe ich die selbe Fehlermeldung. Was die Meldung bedeutet ist mir auch klar., Der TV braucht einen Parent um sich zu visualisieren. Nur, an welcher stelle des ladens kann/muss ich ihm den Parent zuweisen???
Danke für eure Beiträge! |
Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon
Ach so, moment. Der Parent ist zugewiesen. Der Fehler kein übergeordnetes Fenster könnte wohl doch auch was anderes bedeuten oder?
|
Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon
gibts noch ideen?
|
AW: TreeView hat kein Übergeordnetes Fenster (StringToComponent)
Neuer Rekord ? Über 16 Jahre her.
Aber ich habe jetzt genau das gleiche Problem Ich kann aber auch ein Ergänzung geben. Als value bekommt die funktion folgenden String übergeben
Delphi-Quellcode:
Die genaue Fehlermeldung lautet 'Fehler beim Lesen von ListView1.Items.ItemData: Element 'ListView1' hat kein übergeordnetes Fenster'. hat einer eine Idee woran es liegen kann ?
object ListView1: TListView
Left = 24 Top = 40 Width = 385 Height = 150 Columns = < item Width = 75 end item Width = 75 end item Width = 75 end> Items.ItemData = { 01AC0000000200000000000000FFFFFFFFFFFFFFFF0200000000000000094500 69006E007400720061006700200031000A450069006E00740072006100670020 00310031000A450069006E00740072006100670020003100320000000000FFFF FFFFFFFFFFFF020000000000000009450069006E007400720061006700200032 000A450069006E0074007200610067002000320031000A450069006E00740072 0061006700200032003200FFFFFFFFFFFFFFFF} TabOrder = 0 ViewStyle = vsReport end Wenn jetzt der Teil mit Items.Itemdata weggelassen wird also dieser string übergeben wird funktioniert es object ListView1: TListView Left = 24 Top = 40 Width = 385 Height = 150 Columns = < item Width = 75 end item Width = 75 end item Width = 75 end> TabOrder = 0 ViewStyle = vsReport end |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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