AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView: Bestimmten Knoten finden

Ein Thema von JPSelter · begonnen am 23. Jun 2006 · letzter Beitrag vom 23. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#1

VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:19
Beim Einfügen eines neuen Knotens kann es vorkommen, dass der neue Knoten alle Inhalte eines anderen Knotens übernehmen soll. Bloss dieser alte Knoten kann irgendwo im Baum sein (aber immer nur auf der obersten Ebene), wie finde ich den? Wie durchlaufe ich einen VirtualTreeView? Gibts einen Index, den ich ansprechen kann?
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#2

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:29
Hallo,

kannst du den Quellknoten nicht in einer Variablen zwischenspeichern?

Ansonsten kannst du mit
Delphi-Quellcode:
Node := vst.GetFirst;

while (Assigned(Node)) do begin
  // Kontrolle, ob der Knoten der gesuchte ist
  ...

  // nächsten Knoten holen.
  Node := vst.GetNext(Node);
end;
alle Knoten des Trees durchlaufen.

Mit
Delphi-Quellcode:
Node := IrgendeinKnoten;

while (Assigned(Node)) do begin
  // Kontrolle, ob der Knoten der gesuchte ist
  ...

  // nächsten Knoten holen.
  Node := vst.GetNextSibling(Node);
end;
durchläufst du alle Knoten, die in der Ebene von IrgendeinKnoten liegen.



Viele Grüße,
pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:36
Hallo,

den Knoten findest Du, indem Du alle Elemente der obersten Ebene durchläufts:
Delphi-Quellcode:
type
  PMyNodeData=^TMyNodeData;
  TMyNodeData=record
    NodeName:WideString;
    ...
  end; // TMyNodeData

function TForm1.FindeNode(const aName:String):PVirtualNode;
var n:PVirtualNode;
    d:PMyNodeData;
begin
  Result:=nil;
  n:=VirtualStringTree1.GetFirst;
  while (n<>nil) do
  begin
    d:=VirtualStringTree1.GetNodeData(n);
    if SameText(d^.NodeName, aName) then
    begin
      Result:=n;
      Break;
    end; // if
    n:=n^.NextSibling;
  end; // while
end; // TForm1.FindeNode
Aufgerufen wird das ganze dann in etwa so:
Delphi-Quellcode:
  ...
  with VirtualStringTree1 do
  begin
    FocusedNode:=FindeNode('huhu, wo bist Du?');
    if (FocusedNode<>nil) then Selected[FocusedNode]:=True;
  end; // with
  ...
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:41
Danke Euch beiden, werde beides mal probieren. Noch ne Frage zu GetNext: Durchläuft es einfach alle Indizes des Baums oder geht es nur vom Root zu einem Child?

Achja, es wird etwas komplizierter: Kann man sich den Baum vorher sortieren lassen? Alle meine Knoten haben ein Datum und ich suche den Knoten mit dem Ziel-Inhalt des jüngsten Datums. Ich schätze aber, die Indizes sind so wie sie erstellt wurden. Also werd ich da wohl alle Knoten durchlaufen müssen, das Datum vergleichen und den jüngsten Knoten merken. Dürfte ja auch nicht so schwer sein.
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
Dale

Registriert seit: 7. Apr 2006
Ort: Alsdorf
42 Beiträge
 
Delphi 2006 Professional
 
#5

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:51
Zitat:
Achja, es wird etwas komplizierter: Kann man sich den Baum vorher sortieren lassen? Alle meine Knoten haben ein Datum und ich suche den Knoten mit dem Ziel-Inhalt des jüngsten Datums. Ich schätze aber, die Indizes sind so wie sie erstellt wurden. Also werd ich da wohl alle Knoten durchlaufen müssen, das Datum vergleichen und den jüngsten Knoten merken. Dürfte ja auch nicht so schwer sein.
Das Sortieren im VirtualTreeView kann man mit dem Event "OnCompareNodes" umsetzen:

Delphi-Quellcode:
PROCEDURE TForm.VirtualTreeViewCompareNodes(
            Sender: TBaseVirtualTree;
            Node1, Node2: PVirtualNode;
            Column: TColumnIndex;
            VAR Result: Integer
          );

  VAR lData1, lData2 : PNodeData;

BEGIN

  // Knotendaten beider Knoten ermitteln
  lData1 := Sender.GetNodeData(Node1);
  lData2 := Sender.GetNodeData(Node2);

  // falls die Daten gültig sind ...
  IF (Assigned(lData1) AND Assigned(lData2)) THEN
     Result := lData1.Datum - lData2.Datum;

END;
wobei ich deine Datenstruktur für das Datum natürlich nicht kenne.
Wenn "Result" < 0 ist, dann kommt Knoten1 zuerst, wenn "Result" > 0 ist, dann kommt Knoten2 zuerst.

Gruß Dale
  Mit Zitat antworten Zitat
Benutzerbild von JPSelter
JPSelter

Registriert seit: 24. Jan 2005
Ort: Attendorn/Sauerland
235 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:58
Diese Routine habe ich bereits. Die Darstellung ist sortiert. Frage ist, ob die Indizes mit durchsortiert werden, oder ob die in der Reihenfolge bleiben wie sie erstellt wurden.
=JPSelter=

Visit www.ditonovia.de for our breathtaking movies: Herrin der Ringe (Fantasy 2005), Hemisphere (Science-Fiction 2004) & Braveknife (Parodie 2001) and more...
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 10:59
Hallo,

vielleicht hilft Dir folgendes Tutorial weiter: VirtualTreeView
  Mit Zitat antworten Zitat
Dale

Registriert seit: 7. Apr 2006
Ort: Alsdorf
42 Beiträge
 
Delphi 2006 Professional
 
#8

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 11:16
Je nach dem ob du auf- oder absteigend sortiert hast, ist der erste oder der letzte Knoten der Knoten mit dem jüngsten Datum, also "GetFirst" bzw. "GetLast" müsste dir direkt den gesuchten Knoten liefern.

Gruß Dale
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#9

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 11:34
die schnellste methode sollte mit "iteratesubtree" sein.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: VirtualTreeView: Bestimmten Knoten finden

  Alt 23. Jun 2006, 11:49
Zitat von generic:
die schnellste methode sollte mit "iteratesubtree" sein.
In diesem speziellen Fall wahrscheinlich nicht:

Zitat von JPSelter:
Bloss dieser alte Knoten kann irgendwo im Baum sein (aber immer nur auf der obersten Ebene).
IterateSubTree durchläuft alle Knoten im angegebenen (Teil-)baum.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:36 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