AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

vst - ein leidiges Problem mit der Suche

Ein Thema von ratloser · begonnen am 8. Jan 2006 · letzter Beitrag vom 9. Jan 2006
Antwort Antwort
ratloser

Registriert seit: 4. Mai 2005
Ort: Linz
36 Beiträge
 
#1

vst - ein leidiges Problem mit der Suche

  Alt 8. Jan 2006, 22:20
Hallo an Alle!

Bräuchte DRINGEND Eure Hilfe.

Die Suche im VST nervt mich jetzt schon drei Tage und ich schaffe es einfach nicht.

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:
procedure Tkalk.ausfuehren(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Data: Pointer; var Abort: Boolean);
begin
  Abort := vst.Text[Node,0] = objauswsucherechnungsnummer.Text;
end;
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?

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)
Vielen Dank!

Konrad
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: vst - ein leidiges Problem mit der Suche

  Alt 9. Jan 2006, 07:22
Du könntest zum Beispiel mit vst.GetFirst den ersten Knoten holen. Dadurch muss kein Knoten gewählt sein.

Zitat von ratloser:
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#3

Re: vst - ein leidiges Problem mit der Suche

  Alt 9. Jan 2006, 09:19
incremental search ist sehr einfach:

zuerst mal eine ereignisprozedur:
Delphi-Quellcode:
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;
dann noch den vst zuweisen und incs freischalten:
Delphi-Quellcode:
  with meinvst do
  begin
    IncrementalSearch:=isVisibleOnly;
    IncrementalSearchTimeout:=1000;
    if not Assigned(OnIncrementalSearch) then
      OnIncrementalSearch:=TVST_Sort.IncrementalSearch;
  end;
thats it.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
ratloser

Registriert seit: 4. Mai 2005
Ort: Linz
36 Beiträge
 
#4

Re: vst - ein leidiges Problem mit der Suche

  Alt 9. Jan 2006, 19:44
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:
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.
Meinen VST habe ich wie folgt aufgebaut:

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
Vielen Dank!

Konrad
  Mit Zitat antworten Zitat
ratloser

Registriert seit: 4. Mai 2005
Ort: Linz
36 Beiträge
 
#5

Re: vst - ein leidiges Problem mit der Suche

  Alt 9. Jan 2006, 20:25
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:
procedure Tkalk.ausfuehren(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Data: Pointer; var Abort: Boolean);
begin
  Abort := vst.Text[Node,0] = objauswsucherechnungsnummer.Text;
end;
Funzt eigentlich gut - nur mit einem Problem:

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
Vielen Dank!

Konrad
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#6

Re: vst - ein leidiges Problem mit der Suche

  Alt 9. Jan 2006, 23:23
vieleicht so?
vst.focusednode:=vst.getfirst;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
ratloser

Registriert seit: 4. Mai 2005
Ort: Linz
36 Beiträge
 
#7

Re: vst - ein leidiges Problem mit der Suche

  Alt 9. Jan 2006, 23:47


Super - Vielen Dank! Es funktioniert bestens.

Ein herzliches Dankeschön.

LG Ratloser (jetzt schon etwas weniger)
Vielen Dank!

Konrad
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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