![]() |
vst - ein leidiges Problem mit der Suche
Hallo an Alle!
Bräuchte DRINGEND Eure Hilfe. Die Suche im VST nervt mich jetzt schon drei Tage und ich schaffe es einfach nicht. :wall: :wall: :wall: Habs mit der IncrementalSearch versucht - war nichts - hab es einfach nicht zum Laufen gebracht. Ausgangspunkt ist: Ich hab ein VST mit 2 Columns Gesucht werden soll nur in der ersten Column. Die erste Column hat Parent - Child - Grandchild es sind jeweils unterschiedliche Felder aus unterschiedlichen Tabellen. Soweit funzt das VST super - bis eben auf die Suche Es soll möglich sein nach allen drei Feldern als Parent - Child und Grandchild zu suchen, kann auch über drei verschiedene Editfelder realisiert werden. Hab jetzt zumindest mal einen Ansatz
Delphi-Quellcode:
procedure TKalk.naechsteneintragsuchenClick(Sender: TObject);
var f ,run : PVirtualNode; begin if assigned(vst.FocusedNode) then begin run := vst.FocusedNode; run := run.NextSibling; while Assigned(run) do begin f := vst.IterateSubTree(run,ausfuehren,nil,[],true,false); if assigned(f) then begin vst.FocusedNode := f; vst.Selected[f] := true; break; end; run := run.NextSibling; end; end; end;
Delphi-Quellcode:
Dies funktioniert aber nur wenn ich den Suchbegriff in ein Editfeld eingebe, dann einen Node markiere und dann die Suche durch Buttonklick starte. --> ich muss also vor jedem Suchbegriff einen Node markieren. Sehr nervig - vor allem - wie sag ich es meinen Kunden?
procedure Tkalk.ausfuehren(Sender: TBaseVirtualTree; Node: PVirtualNode;
Data: Pointer; var Abort: Boolean); begin Abort := vst.Text[Node,0] = objauswsucherechnungsnummer.Text; end; Mir ist schon klar, dass ein Focus auf einem Node beim obigen Code gesetzt sein muss - aber wie kann man per Code einen Focus auf den ersten Node setzen. Das nächste Problem wäre noch, dass das Grandchild ein zusammengesetzter String ist, kann man diesen mit LeftStr in der Suche abkürzen. Danke für Eure Hilfe Ratloser (kann man wohl nicht mehr sein) |
Re: vst - ein leidiges Problem mit der Suche
Du könntest zum Beispiel mit
Delphi-Quellcode:
den ersten Knoten holen. Dadurch muss kein Knoten gewählt sein.
vst.GetFirst
Zitat:
|
Re: vst - ein leidiges Problem mit der Suche
incremental search ist sehr einfach:
zuerst mal eine ereignisprozedur:
Delphi-Quellcode:
dann noch den vst zuweisen und incs freischalten:
procedure TVST_Sort.IncrementalSearch(
Sender: TBaseVirtualTree; Node: PVirtualNode; const SearchText: WideString; var Result: Integer); var a, b: String; begin a:=AnsiLowerCase(SearchText); if node<>nil then b:=AnsiLowerCase(TVirtualStringTree(sender).Text[node, sender.FocusedColumn]) else b:=''; result:=StrLIComp(PChar(a), PChar(b), Min(length(a), length(b))); end;
Delphi-Quellcode:
thats it.
with meinvst do
begin IncrementalSearch:=isVisibleOnly; IncrementalSearchTimeout:=1000; if not Assigned(OnIncrementalSearch) then OnIncrementalSearch:=TVST_Sort.IncrementalSearch; end; |
Re: vst - ein leidiges Problem mit der Suche
Hallo!
Erstmal herzlichen Dank für Eure Hilfe! Das mit dem IncrementalSearch hab ich heute Nacht durch Zufall gefunden, hatte den Focus falsch gesetzt und durch Zufall lernte das VST laufen. War nicht ganz das was ich suchte, nachdem es eine Software für Handwerker ist, glaube ich, es wäre komfortabler, wenn man den eingegebenen Suchbegriff sehen kann. War immer der Meinung, man gibt den Suchbegriff sichtbar in einem Editfeld ein und der IncrementalSearch sucht im vst 'live' den richtigen Datensatz! Zu meiner zweiten Frage:
Delphi-Quellcode:
Meinen VST habe ich wie folgt aufgebaut:
Das nächste Problem wäre noch, dass das Grandchild ein zusammengesetzter String ist, kann man diesen mit LeftStr in der Suche abkürzen.
Ich kann zwar Deutsch und Pascal ... trotzdem bleibt mir der Sinn dieses Satzes unerschlossen. Feld1 Parent --Feld2 Child ----Feld3+Feld4 Grandchild ----Feld3+Feld4 Grandchild --Feld2 Child ----Feld3+Feld4 Grandchild Feld1 Parent --Feld2 Child --Feld2 Child ----Feld3+Feld4 Child Habe vier Editfelder für die 4 möglichen Suchbegriffe und einen Button um die Suche zu starten. Edit1 Suchbegriff für Feld1 Edit2 Suchbegriff für Feld2 Edit3 Suchbegriff für Feld3 (Feld3 besteht aus den ersten 6 Stellen des Grandchild) Edit4 Suchbegriff für Feld4 (Feld4 besteht aus dem Teilstring ab dem 8. Zeichen des Grandchild) Vielleicht hat jemand eine zündende Idee. LG Ratloser |
Re: vst - ein leidiges Problem mit der Suche
Hallo!
Bin schon ein klein wenig weiter! Hab jetzt folgenden Code:
Delphi-Quellcode:
procedure TKalk.naechsteneintragsuchenClick(Sender: TObject);
var f ,run : PVirtualNode; suchobjekt: String; begin suchobjekt := objauswsucherechnungsnummer.text; vst.getfirst; // vst.setfocus; if assigned(vst.FocusedNode) then begin run := vst.FocusedNode; run := run.NextSibling; while Assigned(run) do begin f := vst.IterateSubTree(run,ausfuehren,Pointer(suchobjekt),[],true,false); if assigned(f) then begin vst.FocusedNode := f; vst.Selected[f] := true; break; end; run := run.NextSibling; end; end; end;
Delphi-Quellcode:
Funzt eigentlich gut - nur mit einem Problem:
procedure Tkalk.ausfuehren(Sender: TBaseVirtualTree; Node: PVirtualNode;
Data: Pointer; var Abort: Boolean); begin Abort := vst.Text[Node,0] = objauswsucherechnungsnummer.Text; end; Ich gebe den Wert in ein Edit-Feld ein, wenn ich dann sofort, wie es eigentlich sein sollte, mit dem Button die Suche auslöse, dann passiert gar nichts. vst.focusednode = false Wenn ich den Wert in das Edit-Feld eingebe, dann einen Node am VST auswähle und dann auf den Button klicke funzt es. Hat jemand eine Idee, wie ich das Klicken des ersten Nodes vor dem Klicken des Buttons umgehen kann. Danke Ratloser |
Re: vst - ein leidiges Problem mit der Suche
vieleicht so?
Delphi-Quellcode:
vst.focusednode:=vst.getfirst;
|
Re: vst - ein leidiges Problem mit der Suche
:hello: :hello: :hello: :hello: :hello: :hello: :hello: :hello: :hello: :hello:
Super - Vielen Dank! Es funktioniert bestens. Ein herzliches Dankeschön. LG Ratloser (jetzt schon etwas weniger) :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz