Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Oberste Node in TreeView finden (https://www.delphipraxis.net/120677-oberste-node-treeview-finden.html)

Yheeky 15. Sep 2008 08:56


Oberste Node in TreeView finden
 
Hi,

ich habe mir eine Funktion "GetParentNode" geschrieben, die aus einer Baumstruktur den obersten Parent ermitteln soll. Ich habe zwei Lösungen versucht, aber beide liefern nicht das gewünschte Ergebnis. Ich kann den Fehler leider nicht finden.

Hier meine beiden Varianten:

Delphi-Quellcode:
function GetNodeParent(Node: TTreeNode): TTreeNode;
var
  tempNode: TTreeNode;
begin
  // Übergebene Node als TempNode festlegen
  tempNode := Node;

  if tempNode.Parent <> nil then
    GetNodeParent(tempNode.Parent);

  result := tempNode;
end;
Delphi-Quellcode:
function GetNodeParent(Node: TTreeNode): TTreeNode;
var
  tempNode: TTreeNode;
begin
  // Übergebene Node als TempNode festlegen
  tempNode := Node;

  while tempNode.Parent <> nil do
    tempNode := tempNode.Parent;

  result := tempNode;
end;
Kann mir jemand helfen?

Aurelius 15. Sep 2008 09:01

Re: Oberste Node in TreeView finden
 
Was liefern denn beide Funktionen für ein Ergebnis?

Yheeky 15. Sep 2008 09:04

Re: Oberste Node in TreeView finden
 
Habe folgende TreeView:

- Fahrzeuge
--- Autos
--- Motorräder
--- Fahrräder
- Personal
--- Azubis
...

Wenn ich mich z.B. in "Fahrräder" befinde, bekomme ich "Fahrräder" zurückgeliefert. Kann den Fehler leider nicht finden. Müsste doch eigentlich korrekt sein, oder?

calculon 15. Sep 2008 09:06

Re: Oberste Node in TreeView finden
 
Beide ungetesetet, aber so würd' ich mal ansetzen...

Delphi-Quellcode:
function GetNodeParent(Node: TTreeNode): TTreeNode;
begin
  result := Node.TopItem;
end;
Delphi-Quellcode:
function GetTreeViewRoot(tv: TTreeView): TTreeNode;
begin
  result := nil;
  if tv.Items.Count > 0 then
    result := tv.Items.Item[0];
end;

Gruß
--

Aurelius 15. Sep 2008 09:08

Re: Oberste Node in TreeView finden
 
Kannst du vielleicht mal im Debugger durchgehen ob die Funktion an sich funktioniert?

@ calculon: So gehts natürlich auch :D

Yheeky 15. Sep 2008 09:09

Re: Oberste Node in TreeView finden
 
Mhmm, hab´s Problem gefunden. Es hat sich komischerweise eine Funktion eingeschlichen, die die ParentNode in die selektierte Node umbenannt hat *gg*...dann geht´s natürlich nicht.

Danke trotzdem!

PS: TopItem ist natürlich praktischer ;-)

Aurelius 15. Sep 2008 09:11

Re: Oberste Node in TreeView finden
 
:lol:

Sowas ähnliches ist mir auch mal passiert, ich hab mich dumm und dämlich gesucht :?

Yheeky 15. Sep 2008 09:18

Re: Oberste Node in TreeView finden
 
Tja, man lernt nie aus ;-)
Ohne das hier zu posten hätte ich vermutlich noch Stunden gesucht, aber es ist ja immer so, dass, wenn man hier postet, man die Antwort doch oft schnell selbst findet ;-)

Benedikt 15. Sep 2008 10:01

Re: Oberste Node in TreeView finden
 
Zitat:

Zitat von calculon
Beide ungetesetet, aber so würd' ich mal ansetzen...
Delphi-Quellcode:
function GetNodeParent(Node: TTreeNode): TTreeNode;
begin
  result := Node.TopItem;
end;

Ich weiß, ungetestet, aber ich werfs nochmal ein, nicht dass das mal zur Verwirrung führt - TopItem ist eine Eigenschaft direkt vom TreeView und gibt das oberste angezeigte Element zurück - an der Stelle würde Node.Parent also wesentlich mehr Sinn machen :zwinker:
Für den Root bietet sich übrigens noch TreeView1.Items.GetFirstNode an.

MfG Benedikt

alzaimar 15. Sep 2008 11:21

Re: Oberste Node in TreeView finden
 
Delphi-Quellcode:
Function GetTopItem(ANode : TTreeNode) : TTreeNode;
Begin
  While ANode.Parent<>Nil do ANode := ANode.Parent;
  Result := ANode.Parent;
End;
Nur der Vollständigkeit halber.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr.
Seite 1 von 2  1 2      

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