AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TreeView hat kein Übergeordnetes Fenster (StringToComponent)
Thema durchsuchen
Ansicht
Themen-Optionen

TreeView hat kein Übergeordnetes Fenster (StringToComponent)

Offene Frage von "v2afrank"
Ein Thema von Softchaos67 · begonnen am 23. Jul 2004 · letzter Beitrag vom 21. Sep 2020
Antwort Antwort
Softchaos67

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

TreeView hat kein Übergeordnetes Fenster (StringToComponent)

  Alt 23. Jul 2004, 09: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
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#2

Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon

  Alt 23. Jul 2004, 09:47
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.

TreeView1.SaveToFile('inhalt.dat'); und zum laden

TreeView1.SaveFromFile('inhalt.dat'); Vielleicht bringt Dich das weiter!?
Tom
Danke
Tom
  Mit Zitat antworten Zitat
Softchaos67

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

Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon

  Alt 23. Jul 2004, 11:09
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
irgendwie gehts.....
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#4

Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon

  Alt 23. Jul 2004, 11:28
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

Möglicherweise hast du zwei Zeiger von TTreeview, in Gegensatz zu Panel_Beispiel ist Treeview1 lokal deklariert. Ich denke es gibt zweimal Treeview1.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Softchaos67

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

Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon

  Alt 26. Jul 2004, 07:08
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!
irgendwie gehts.....
  Mit Zitat antworten Zitat
Softchaos67

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

Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon

  Alt 26. Jul 2004, 07:10
Ach so, moment. Der Parent ist zugewiesen. Der Fehler kein übergeordnetes Fenster könnte wohl doch auch was anderes bedeuten oder?
irgendwie gehts.....
  Mit Zitat antworten Zitat
Softchaos67

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

Re: TreeView hat kein Übergeordnetes Fenster (StringToCompon

  Alt 28. Jul 2004, 10:41
gibts noch ideen?
irgendwie gehts.....
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
571 Beiträge
 
Delphi XE2 Professional
 
#8

AW: TreeView hat kein Übergeordnetes Fenster (StringToComponent)

  Alt 21. Sep 2020, 14:11
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:
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
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 ?
  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 20:32 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