Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VirtualStringTree Eintrag suchen. (https://www.delphipraxis.net/205122-virtualstringtree-eintrag-suchen.html)

Zodi 3. Aug 2020 20:59

VirtualStringTree Eintrag suchen.
 
Hi Delphianer

Ich habe ne VST und verwende ne Inputbox um Einträge in der VST zusuchen.
gelöst habe isch das so...
Delphi-Quellcode:
procedure TWindowManager.VSTKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  XNode: PVirtualNode;
  Data: PTreeData;
  SearchKey : String;
begin
  if (ssCtrl in Shift) and ((Key = Ord('F')) or (Key = Ord('f'))) then begin
     SearchKey := inputbox('Windowmanager Search','Search Caption','');
     XNode := VST.GetFirst;
     while XNode <> nil do begin
       Data := VST.GetNodeData(XNode);
       if lowercase(Data^.Column1) = lowercase(SearchKey) then begin
          VST.ClearSelection;
          VST.Selected[XNode] := True;
          VST.SetFocus;
          break;
       end else
          XNode := VST.GetNextSibling(XNode);
     end;
  end;
end;
nur findet und fokusiert er den Eintrag nur wenn er im Inputbox genau so geschrieben wird wie er auch im VST drinn steht.
wie kann ikch das machen das er den Eintrag auch findet wenn man z.b nur die ersten 3-4 Buchstaben eingibt.


Grüsse Zodi

himitsu 3. Aug 2020 21:24

AW: VirtualStringTree Eintrag suchen.
 
Delphi-Referenz durchsuchenPos
Delphi-Referenz durchsuchenPoSex ähhh PosEx
Delphi-Referenz durchsuchenStartsStr
Delphi-Referenz durchsuchenStartsText
Delphi-Referenz durchsuchenContainsStr
Delphi-Referenz durchsuchenContainsText
string.StartsText (Delphi-Referenz durchsuchenTStringHelper)
string.StartsWith
string.IndexOf
Delphi-Referenz durchsuchenTMask.Matches
Delphi-Referenz durchsuchenTRegEx
...

Und willst du wirklich nur die Siblings durchsuchen?


Zitat:

Delphi-Quellcode:
Key = Ord('f')

Das wird niemals passieren.

Aviator 3. Aug 2020 21:48

AW: VirtualStringTree Eintrag suchen.
 
Ich würde an der Stelle auch eher mit
Delphi-Quellcode:
GetNext()
arbeiten wenn du alle Nodes beachten willst. Es sei denn, du hast nur eine Ebene von Nodes oder willst gezielt nur eine Ebene durchsuchen.

Wenn du die Nodes eventuell sogar unsichtbar schalten willst, dann solltest du auch darauf achten, dass du die Parent Nodes visible lässt wenn eine ChildNode den gesuchten Text enthält. Und ebenfalls solltest du prüfen, ob eine Node nicht ggf. unsichtbar ist die den gesuchten Text beinhaltet. Dann müsstest du sie evtl. sichtbar schalten oder beim Setzen des Focus und Selected States ausklammern. Zum Prüfen für die Sichtbarkeit gibt es die
Delphi-Quellcode:
Tree.IsVisible[Node]
property.

haentschman 4. Aug 2020 05:31

AW: VirtualStringTree Eintrag suchen.
 
Moin...:P
Zitat:

Ich habe ne VST und verwende ne Inputbox um Einträge in der VST zusuchen.
[meine Meinung]
Man sucht nicht im visuellen Control, sondern in der Datenmenge die das visuelle Control befüllt. :warn: Bei einem Match kann man das visuelle Control auf diesen Eintrag setzen oder anders auswerten. :wink:
[\meine Meinung]

Aviator 4. Aug 2020 10:06

AW: VirtualStringTree Eintrag suchen.
 
Zitat:

Zitat von haentschman (Beitrag 1471082)
[meine Meinung]
Man sucht nicht im visuellen Control, sondern in der Datenmenge die das visuelle Control befüllt. :warn: Bei einem Match kann man das visuelle Control auf diesen Eintrag setzen oder anders auswerten. :wink:
[\meine Meinung]

Das ist wohl richtig. Allerdings sieht es so aus, als ob der die Daten zur Node zugeordnet speichert. Dann müsste er auch das System erst einmal umstellen.

Dazu kommt, dass er sich eine Liste bauen müsste, die die gefilterten Ergebnisse beinhaltet. In diesem Fall ging es aber wohl eher darum, eine Node mit dem entsprechenden Text in einem Haufen anderer Nodes anzuzeigen und die Anzeige nicht auf diese eine (oder ggf. mehrere Nodes) zu beschränken. Zumindest lese ich das so aus seiner Frage heraus.

Und einen Selected Zustand über eine Liste zu erreichen wird wohl doch etwas schwieriger sein.


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