Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - weitersuchen im FindDialog funktioniert nicht


colaka - Sa 15.01.11 08:50
Titel: weitersuchen im FindDialog funktioniert nicht
Hallo,

ich möchte in meinem Richedit einen Text finden, den ich im Finddialog eingegeben habe. Das mache ich mit dem folgenden Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TFDok.FindDialogFind(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit do
  begin
    { Suchbeginn nach der aktuellen Markierung (falls vorhanden), }
    { andernfalls am Textanfang starten }
    if SelLength <> 0 then
      StartPos := SelStart + SelLength
    else
      StartPos := 0;

    { ToEnd ist die Länge von StartPos bis zum Ende des Textes im RTF-Eingabefeld }
    ToEnd := Length(Text) - StartPos;
    FoundAt := FindText(FindDialog.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog.FindText);
    end;
  end;
end;


Das erste gesuchte Wort wird auch gefunden und markiert, aber wenn ich auf "Weitersuchen" klicke, wird nichts mehr gefunden.

Ich kann den Fehler leider nicht finden.

Danke Ebi


jaenicke - Sa 15.01.11 09:30

Du ignorierst die Optionen des Dialogs und reagierst nicht darauf, wenn es der letzte Fund ist, aber in eine Richtung (nach unten) sollte es so klappen. Hast du vielleicht HideSelection beim RichEdit noch auf True und siehst die Markierung nur nicht?


colaka - Sa 15.01.11 09:35

Hallo,

HideSelection stand wirklich auf true. Aber dann verstehe ich nicht, warum das erste gefundene Wort angezeigt wurde.

Naja, wie dem auch sei. Es funktioniert, und dafür sage ich danke.

Gruß Ebi


jaenicke - Sa 15.01.11 09:40

user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
HideSelection stand wirklich auf true. Aber dann verstehe ich nicht, warum das erste gefundene Wort angezeigt wurde.
Wahrscheinlich, weil dabei der Fokus auch zurück auf das RichEdit gesetzt wurde. ;-)
In deinem Code wird SetFocus aber nicht mehr aufgerufen, wenn schon der letzte Fund erreicht ist.