Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Node.GetNext !!! (https://www.delphipraxis.net/113654-node-getnext.html)

Delphiturbo 12. Mai 2008 14:25


Node.GetNext !!!
 
Hallo,

in dem Tutorials-Code stimmt nicht Result:=Node.GetNext
Ich lege 2 identische Werte in Treeview und dann suche
Das Programm findet nur eines und die Markierung bleibt stehen !!!
was ist falsch in Code ?
Tutorials here

mkinzler 12. Mai 2008 14:29

Re: Node.GetNext !!!
 
Wenn ein Eintrag gefunden wird, wird ja abgebrochen.

Die Muhkuh 12. Mai 2008 14:38

Re: Node.GetNext !!!
 
Das Break ist falsch.

mkinzler 12. Mai 2008 14:43

Re: Node.GetNext !!!
 
Würd ich nicht so sagen.

Die Muhkuh 12. Mai 2008 14:47

Re: Node.GetNext !!!
 
Naja, das Break bricht ab, im Endeffekt sagtest Du das gleiche ja auch ;)

Ich hab nur Deine Aussage mit dem Code konkretisiert.

mkinzler 12. Mai 2008 14:55

Re: Node.GetNext !!!
 
Aber das Entfernen des breaks ist ja nicht die Lösung oder?

Die Muhkuh 12. Mai 2008 14:57

Re: Node.GetNext !!!
 
Hab ich auch nicht gesagt, aber das Break führt zum Abbruch ;)

mkinzler 12. Mai 2008 15:01

Re: Node.GetNext !!!
 
Du hast gesagt, dass das break falsch ist.
Ich würde den Code in etwa so anpassen:
Delphi-Quellcode:
function GetNodeByText
(ATree : TTreeView; AValue:String;
 AVisible: Boolean; StartNode: TNode): TTreeNode;
var
    Node: TTreeNode;
begin
  Result := nil;
  if ATree.Items.Count = 0 then Exit;
  if StartNode = Nil then Node := ATree.Items[0] else Node = StartNode;
  while Node <> nil do
  begin
    if UpperCase(Node.Text) = UpperCase(AValue) then
    begin
      Result := Node;
      if AVisible then
        Result.MakeVisible;
      Break;
    end;
    Node := Node.GetNext;
  end;
end;

omata 12. Mai 2008 15:04

Re: Node.GetNext !!!
 
Wenn es mehrere gibt, dann kannst du aber nicht nur eins als Rückgabewert bekommen?!

Also vielleicht so...

Delphi-Quellcode:
type
  TSelectedTreeNodes = array of TTreeNode;

:
:

function GetNodeByText(ATree: TTreeView; AValue:String): TSelectedTreeNodes;
var Node: TTreeNode;
begin
  setlength(Result, 0);
  Node := ATree.Items.GetFirstNode;
  while assigned(Node) do begin
    if UpperCase(Node.Text) = UpperCase(AValue) then begin
      setlength(Result, length(Result)+1);
      Result[high(Result)] := Node;
    end;
    Node := Node.GetNext;
  end;
end;
Gruss
Thorsten

Moyyer 12. Mai 2008 15:09

Re: Node.GetNext !!!
 
Ich würde aus der Function das Break entfernen und stattdessen

Delphi-Quellcode:
Node.Selected := True;
hinschreiben.
Somit werden alle Nodes durchgegangen und bei Übereinstimmung markiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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