Einzelnen Beitrag anzeigen

ratloser

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

Suche im VST - Suche nächster - Suche vorheriger

  Alt 17. Jan 2006, 22:04
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
Vielen Dank!

Konrad
  Mit Zitat antworten Zitat