Einzelnen Beitrag anzeigen

ggscholz

Registriert seit: 20. Nov 2013
59 Beiträge
 
Delphi 11 Alexandria
 
#1

TVirtualStringTree incremental search: wie finde ich weitere passende Nodes

  Alt 23. Dez 2023, 14:45
Delphi-Version: 11 Alexandria
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
Gerd
  Mit Zitat antworten Zitat