Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TVirtualStringTree incremental search: wie finde ich weitere passende Nodes (https://www.delphipraxis.net/214316-tvirtualstringtree-incremental-search-wie-finde-ich-weitere-passende-nodes.html)

ggscholz 23. Dez 2023 14:45

Delphi-Version: 11 Alexandria

TVirtualStringTree incremental search: wie finde ich weitere passende Nodes
 
Hallo in die Runde,

ich finde keine Lösung, um von einem im VirtualStringTree mit
Code:
IterateSubtree
gefundenen Node den nächsten zu finden (den es gibt)

Im VST ist

Code:
IncrementalSearch = isAll
IncrementalSearchDirection = sdForward
IncrementalSearchStart = ssFocusedNode
eingestellt

Das hier sind die Proceduren, die bei der Eingabe in eine Editfeld den ersten Eintrag in einem Datenfeld finden (hier gefunden).

Code:
procedure TfVST.SearchForText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Data: Pointer; var Abort: Boolean);
var
  NodeData: PTreeData; //replace by your record structure
begin
  NodeData := Sender.GetNodeData(Node);
  Abort := AnsiStartsStr(string(data), NodeData.FItemnNbr); //abort the search if a node with the text is found.
end;

procedure TfVST.SearchItemNbrChange(Sender: TObject);
var
  foundNode : PVirtualNode;
begin
  inherited;
  //first param is your starting point. nil starts at top of tree. if you want to implement findnext
  //functionality you will need to supply the previous found node to continue from that point.
  //be sure to set the IncrementalSearchTimeout to allow users to type a few characters before starting a search.

  foundNode := vst.IterateSubtree(nil, SearchForText, pointer(SearchItemNbr.text));

  if Assigned (foundNode) then
  begin
    vst.FocusedNode := foundNode;
    vst.Selected[foundNode] := True;
  end;
Wenn ich dann über einen Button

Code:
foundNode := (vst.FocusedNode, SearchForText, pointer(SearchItemNbr.text)
versuche, die Suche ab der gefundenen Stelle fortzusetzen, wird nicht weiter im Baum gesucht.

Hat jemand eine Hinweis, wie ich die Suche im Baum ab dem gefundenen Node fortsetzen kann?

Mit dem Hinweis im Beispielcode komme ich nicht weiter


Beste Grüße und erholsame Feiertage wünscht euch

Gerd

Gausi 23. Dez 2023 18:14

AW: TVirtualStringTree incremental search: wie finde ich weitere passende Nodes
 
Ist in dem Konzept der (neue) Startknoten wirklich der aktuell fokussierte, der ja auch einen Treffer geben würde? Oder muss man für den nächsten Treffer explizit einen Knoten später starten?


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