Hallo an Alle!
Hab mal wieder ein kleines Problem
Hab im VirtualStringTree eine Suche eingebaut.
Es gibt dabei vier verschiedene Felder zur Eingabe von Suchbegriffen.
Diese vier Suchbegriffe werden über einen ONExit-Event in die Variable suchobjekttext eingelesen.
Button7 startet die Suche - VST findet dabei den ersten Suchbegriff.
Delphi-Quellcode:
procedure TKalk.Button7Click(Sender: TObject);
var
f ,run : PVirtualNode;
suchobjekt: String;
begin
suchzaehler := 0;
suchobjekt := suchobjekttext;
vst.FocusedNode := vst.getfirst;
vst.FullCollapse;
vst.SetFocus;
if assigned(vst.FocusedNode) then begin
run := vst.FocusedNode;
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;
Nachfolgender Code soll den vorherigen Eintrag suchen
Delphi-Quellcode:
procedure TKalk.vorherigeneintragsuchenClick(Sender: TObject);
var
f ,run : PVirtualNode;
suchobjekt: String;
laufenderzaehler: integer;
begin
if suchzaehler > 0 then suchzaehler := suchzaehler - 1;
laufenderzaehler:= suchzaehler;
suchobjekt := suchobjekttext;
vst.FocusedNode := vst.getfirst;
vst.SetFocus;
if assigned(vst.FocusedNode) then begin
run := vst.FocusedNode;
while Assigned(run) do begin
f := vst.IterateSubTree(run,ausfuehren,Pointer(suchobjekt),[],true,false);
if assigned(f) then begin
if laufenderzaehler = suchzaehler then
begin
vst.FocusedNode := f;
vst.Selected[f] := true;
break;
end
else
laufenderzaehler := laufenderzaehler + 1;
end;
run := run.NextSibling;
end;
end;
end;
Nachfolgender Code soll den nächsten Eintrag finden:
Delphi-Quellcode:
procedure TKalk.naechsteneintragsuchenClick(Sender: TObject);
var
f ,run : PVirtualNode;
suchobjekt: String;
laufenderzaehler: integer;
begin
suchzaehler := suchzaehler + 1;
laufenderzaehler:= 0;
suchobjekt := suchobjekttext;
vst.FocusedNode := vst.getfirst;
vst.SetFocus;
if assigned(vst.FocusedNode) then begin
run := vst.FocusedNode;
while Assigned(run) do begin
f := vst.IterateSubTree(run,ausfuehren,Pointer(suchobjekt),[],true,false);
if assigned(f) then begin
if laufenderzaehler = suchzaehler then
begin
vst.FocusedNode := f;
vst.Selected[f] := true;
break;
end
else
laufenderzaehler := laufenderzaehler + 1;
end;
run := run.NextSibling;
end;
end;
end;
Nun zu meinem Problem:
Die Suche funktioniert einwandfrei, die Suche nach dem nächsten oder vorherigen Eintrag funktioniert eigentlich auch - solange ich nicht den letzten Sucheintrag erreiche. Wenn ich den letzten Sucheintrag erreiche und dann nochmals auf NÄCHSTEN FINDEN klicke, dann weiss ich nicht, wie ich die Suche stoppen soll - eigentlich sollte er anzeigen - LETZTEN EINTRAG GEFUNDEN.
Macht er aber nicht, und wenn ich dann auf VORHERIGEN SUCHEN klicke, dann springt er völlig unmotiviert zu irgenwelchem Eintrag.
Hat jemand eine Idee.
LG Ratloser