AGB  ·  Datenschutz  ·  Impressum  







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

Finden einer Node

Ein Thema von CalganX · begonnen am 7. Jan 2004 · letzter Beitrag vom 18. Jan 2004
Antwort Antwort
Seite 2 von 2     12   
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Finden einer Node

  Alt 11. Jan 2004, 12:33
Hi,
ich werde mir das gleich mal ansehen.

Habe aber den Fehler gefunden: ich habe das ganze auf Druck von F12 ausgelöst, aber gleichzeitig ist F12 ein Hotkey im VST. Jetzt geht es wunderbar.

Danke,
Chris
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Finden einer Node

  Alt 11. Jan 2004, 12:42
Hi Jens,
so geht es natürlich auch.
Habe es jetzt aber so ähnlich, wie mirage gemacht.

Aber jetzt gibt es ein anderes Problem:
ich versuche eine Listnode zu finden. Das ist eine Node, die sich eine "Etage" tiefer als das Projekt befindet. Das Problem ist, dass es von diesen Listnodes mehrere gibt. Alle haben eine andere Beschriftung. Ich habe mir dafür folgende Funktion gebastelt:
Delphi-Quellcode:
function TfrmMain.GetListNode(Node: PVirtualNode; Caption: String): PVirtualNode;
var
  pData: PTVData;
begin
  if vstData.GetNodeLevel(Node) = 1 then begin
    pData := vstData.GetNodeData(Node);
    if pData.szCaption = Caption then
      Result := Node // <-- hier
    else
      GetListNode(Node.NextSibling, Caption);
  end else begin
    if vstData.GetNodeLevel(Node) < 1 then
      GetListNode(Node.FirstChild, Caption)
    else
      GetListNode(Node.Parent, Caption);
  end;
  Result := Node;
end;
Das Problem ist nun aber, dass auf die markierte Stelle durch den Compilier nie zugegriffen wird. Wieso? Und ist irgendwo ein Fehler? Denn es öffnet sich zwar nicht das CPU-Fenster, aber dafür scheint der Rückgabewert lt. Delphi nil zu sein.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Finden einer Node

  Alt 11. Jan 2004, 12:48
Hallo,
wenn ich Dich richtig verstanden habe, möchtest Du ab einem bestimmten Node im
Baum abwärts suchen. Dann probier mal folgendes:
Delphi-Quellcode:
procedure TForm1.SearchLoop(Node: TTreeNode);
{SearchLoop geht von Node aus im Baum abwärts}
var
  TmpNode : TTreeNode;
begin
  If Node<>Nil then
    {Hier wird dann entschieden, ob der gesuchte Node gefunden wurde}
  TmpNode:=Node.getFirstChild;
  While TmpNode<>Nil do
    begin
     SearchLoop(TmpNode);
     TmpNode:=Node.getNextChild(TmpNode);
    end;
end;
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Finden einer Node

  Alt 17. Jan 2004, 19:49
Hi,
ich habe das ganze mal auf das VST portiert und versucht das auf meinen Fall zu übertragen. Allerdings scheint das ganze eine endlosschleife zu sein.
Delphi-Quellcode:
function TfrmMain.SearchLoop(Node: PVirtualNode; sCaption: WideString): PVirtualNode;
var
  TmpNode : PVirtualNode;
  pData: PTVData;
begin
  If Node<>Nil then begin
    pData := vstData.GetNodeData(Node);
    if (pData <> nil) and (pData.szCaption = sCaption) then begin
      Result := Node;
      Exit;
    end;
  end else Result := nil;
  TmpNode:=Node.FirstChild;
  While TmpNode<>Nil do
    begin
     SearchLoop(TmpNode, sCaption);
     TmpNode:=Node.NextSibling;
    end;
end;
Chris

[edit] Ich weiß, dass ich was falsch gemacht habe. Und ich weiß auch, dass der Fehler darin liegt, dass ich den Rückgabewert von SearchLoop nicht behandel. Aber das Problem ist, dass ich nicht weiß, was ich tun soll. [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Finden einer Node

  Alt 18. Jan 2004, 15:22
Hallo Chris,
stimmt, mein vorheriger Source klappert alle Unterknoten ab einem bestimmten Knoten
bis zum letzten Unterknoten ab.
Der Source hier funktioniert anders. Wähle einen bestimmten Knoten. Von diesem Knoten aus
werden alle Unterknoten besucht. Wenn ein Node mit dem gesuchten Text gefunden wurde bricht
die Rekursion ab.
Delphi-Quellcode:
function TForm1.SearchForNode(Node : TTreeNode; const NodeText : String) : TTreeNode;
var
  TmpNode : TTreeNode;
begin
  Result:=Nil;
  If Node<>Nil then
    If AnsiUpperCase(Node.Text)=AnsiUpperCase(NodeText) then
      Result:=Node;
  TmpNode:=Node.getFirstChild;
  While (TmpNode<>Nil) and (Result=Nil) do
    begin
     Result:=SearchForNode(TmpNode,NodeText);
     TmpNode:=Node.getNextChild(TmpNode);
    end;
end;
Ob das auch mit VirtualTreeView funktioniert kann ich sagen. Weil - habe ich nicht.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Finden einer Node

  Alt 18. Jan 2004, 15:32
Hi Jens,
vielen Dank! Das funktioniet wunderbar! Und das umschreiben auf VirtualStringTree hat auch wunderbar funktioniert.

Für alle interessierten: hier meine Funktion:
Delphi-Quellcode:
function TfrmMain.GetListNode(Node : PVirtualNode; const NodeText : String) : PVirtualNode;
var
  TmpNode : PVirtualNode;
  pData: PTVData;
begin
  Result:=Nil;
  If Node<>Nil then begin
    pData := vstData.GetNodeData(Node);
    If AnsiLowerCase(pData.szCaption)=AnsiLowerCase(NodeText) then
      Result:=Node;
  end;
  TmpNode:=Node.FirstChild;
  While (TmpNode<>Nil) and (Result=Nil) do
    begin
     Result:=GetListNode(TmpNode,NodeText);
     TmpNode:=Node.NextSibling;
    end;
end;
Das ist Jens' Code einfach nur auf VirtualStringTree übertragen.

Danke,
Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:20 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