![]() |
VirtualStringTree mit den Tasten navigieren (wie ein TreeView)
Hat jemand eine Ahnung davon, wie man ein VirtualStringTree mit den Tasten navigieren kann (wie ein TreeView), daß also zum Beispiel bei "a" ein Item den Fokus bekommet wird, dessen Text mit a beginnt? Da die VirtualStringTree Items nicht über eine Eigenschaft Text verfügen muß das wohl irgendwie anders funktionieren. Aber wie?:gruebel:
|
AW: VirtualStringTree mit den Tasten navigieren (wie ein TreeView)
Du kannst natürlich auf die Text Eigenschaft einer Node + Column zugreifen mit
Delphi-Quellcode:
. Aber für den Fall, dass du eine Funktion wie im Windows Explorer programmieren möchtest, dass wenn du "a" drückst, er auch auf den ersten gefundenen Eintrag mit "a" springt, dann solltest du die IncrementalSearch Funktion des Trees verwenden. Funktioniert super und habe ich auch schon in meinen eigenen Projekten benutzt.
vst.Text[Node, Column]
|
AW: VirtualStringTree mit den Tasten navigieren (wie ein TreeView)
Ok. Dank' Dir. Hab jetzt (erst mal) was nach VSTKeyPress geschrieben. Ich verwende statt Node.Data sowieso eine kleine Helperklasse zur Verwaltung der Captions und Items, damit geht es dann auch.
Delphi-Quellcode:
procedure TDirectoryTreeView.VSTKeyPress(Sender: TObject; var Key: Char);
var Node: PVirtualNode; begin Node := FVirtualDirectoryTree.GetNext(Key); if Node <> nil then begin Key := #0; VSTChange(FVST, Node); end; end; .. function TVirtualDirectoryTree.GetVisible(Node: PVirtualNode): boolean; var Temp: PVirtualNode; begin Result := true; Temp := Node.Parent; while (Temp <> nil) and (Temp <> FVST.GetFirst) do begin if not FVST.Expanded[Temp] then begin Result := false; Exit; end; Temp := Temp.Parent; end; end; function TVirtualDirectoryTree.GetNext(const C: Char): PVirtualNode; const CharSet: string = '0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ_abcdefghijklmnopqrstuvwxyzäöüß'; var Node: PVirtualNode; A, B: Char; S: string; begin Result := nil; FWorking := true; try if Pos(C, CharSet) > 0 then begin A := FUpperCaseChar[C]; Node := FindNodePath(FDirectory); Node := FVST.GetNext(Node); while Node <> nil do begin S := Caption[Node]; B := FUpperCaseChar[S[1]]; if (A = B) and Visible[Node] then begin Result := Node; Exit; end; Node := FVST.GetNext(Node); end; end; finally FWorking := false; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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