![]() |
Finden einer Node
Hi,
ich will mit Hilfe einer Funktion die oberste Node einer beliebigen SubNode finden. Was ich meine: ich habe eine Node, die sich einige Ebenen tiefer befinden, als die Hauptnode. Und diese Hauptnode will ich haben. Also gehe ich immer weiter eine Ebene hoch, bis ich zu der entsprechenden Node kommen, deren Eigenschaft dwMode der Daten auf 1 steht. So zumindest die Theorie. Die Praxis sieht folgendermaßen aus:
Delphi-Quellcode:
Doch da Delphi grundsätzlich eine Abneigung gegen mich hat meint er das CPU-Fenster öffnen zu müssen um stillschweigend zu sagen, dass ich böse war. ;)
function TfrmMain.GetProjectNode(aNode: PVirtualNode): PVirtualNode;
var pNode: PVirtualNode; pData: PTVData; begin pNode := aNode; Result := nil; while (true) do begin pData := vstData.GetNodeData(pNode); if (pData.dwMode = 1) or (pNode = nil) then Exit; pNode := pNode.Parent; end; Result := pNode; end; Was mache ich falsch? Chris PS: Das ganze bezieht sich auf VirtualStringTree's. ;) |
Re: Finden einer Node
Vielleicht solltest du noch abfragen, ob pData ungleich nil ist. Es könnte ja sein, dass eine Node keine Daten enthält.
|
Re: Finden einer Node
Hi Chewie,
ich denke, dass das nicht der Grund für den Fehler ist, zumal das nichts bringt und zum anderen ich immer die Daten selber schreibe und auch die Daten setze. ;) Chris |
Re: Finden einer Node
Geh trotzdem mal im Einzelschrittmodus durch, sowas kann nie schaden. Ist besonders nützlich bei Schleifen mit wenig Durchläufen ohne Rekursion und lange Berechnungen.
|
Re: Finden einer Node
Hi,
gute Idee. ;) Warum ich das immer vergessen?! :gruebel: Jedenfalls hakt es an der markierten Zeile bzw. in der danach.
Code:
(Ja... das ist ein anderer Source, aber der oben war falsch)
function TfrmMain.GetProjectNode(aNode: PVirtualNode): PVirtualNode;
var pNode: PVirtualNode; pData: PTVData; begin pNode := aNode; Result := nil; while (true) do begin if (pNode = nil) then Exit; [color=#ff0000] pData := vstData.GetNodeData(pNode);[/color] if (pData = nil) then Exit; if (pData.dwMode = 1) then Break; pNode := pNode.Parent; end; Result := pNode; end; Chris |
Re: Finden einer Node
Hi,
hat denn keiner eine Idee, wo der Fehler sein kann? :( Gibt es vielleicht eine andere Möglichkeit mein Vorhaben zu realisieren? Chris |
Re: Finden einer Node
Hi,
mit einem normalen TreeView habe ich es so gelöst. Bei meinem Test hat es sogar funktioniert :D
Delphi-Quellcode:
mfG
function GetParentNode(Node: TTreeNode): TTreeNode;
begin if Node.Level <> 0 then begin Node := Node.Parent; Result := GetParent(Node); end else Result := Node; end; mirage228 |
Re: Finden einer Node
Hi,
danke, aber leider funktioniert das nicht. Das Problem ist, dass ich beim VST nur PVirtualNode verwenden kann und dieser Typ die Eigenschaft "Level" nicht hat und auch nicht vergleichbares. :( Chris |
Re: Finden einer Node
Hi,
es gibt doch eine Möglichkeit, aber leider funktioniert das auch nicht. :( Chris |
Re: Finden einer Node
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
starte mal die Anlage und klicke auf einen beliebigen Node. Dann schau Dir mal die function RootNodeText im Source an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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