| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 
 | function TForm1.FindText( const SearchStr: string;
               StartPos, FindLength : LongInt; Options: TSearchTypes;
               SearchDown : Boolean = TRUE ): Integer;
var
Find: TFindText;
Flags: Word;
 
   begin
       with Find do
   begin
      chrg.cpMin := StartPos;
      chrg.cpMax := StartPos + FindLength;
      lpstrText := PChar(SearchStr);
         end;
 
Flags := 0;
 
if stWholeWord in Options then
   Flags := Flags or FT_WHOLEWORD
else
   Flags := Flags and not FT_WHOLEWORD;
 
if stMatchCase in Options then
   Flags := Flags or FT_MATCHCASE
else
   Flags := Flags and not FT_MATCHCASE;
 
if SearchDown then
   Flags := Flags OR $01
      else
   begin
   //Flags := Flags AND not $01;     // Search Up, just does not work !
   Flags := Flags OR $01
   end;
 
Result := -1;
 
if SearchDown then
   Result := SendMessage(RichEdit1.Handle, EM_FINDTEXT, Flags, LongInt(@Find))
else
   // Search Up, just does not work !  So just search down over and over
   // adjusting the start point backward.
   while (StartPos > -1) and (result = -1) do
      begin
      //result := RichEdit1.Perform(EM_FindText, Flags, LongInt(@Find));
      Result := SendMessage(RichEdit1.Handle, EM_FINDTEXT, Flags, LongInt(@Find));
      Dec(StartPos);
      Find.chrg.cpMin := StartPos;
    end;
end;
 
 
 
 
 
procedure TForm1.FindDialogFind(Sender: TObject);
   var
      FoundAt: LongInt;
      StartPos, FindLength, ToEnd : LongInt;
      TheFindOptions   : TFindOptions; 
      TheSearchTypes  : TSearchTypes;
    begin
      TheFindOptions := [];
      TheSearchTypes := [];
 
if frDown in FindDialog.Options then
     begin
        StartPos := RichEdit1.SelStart + RichEdit1.SelLength;
        FindLength := Length(RichEdit1.Text) - StartPos;
             end
         else
    begin
        StartPos := RichEdit1.SelStart;
        FindLength := 0;
     end;
 
         with Sender as TFindDialog do
     begin
         if frMatchCase in Options then
               TheSearchTypes := TheSearchTypes + [stMatchCase];
         if frWholeWord in Options then
               TheSearchTypes := TheSearchTypes + [stWholeWord];
             end;
        FoundAt := FindText(FindDialog.FindText, StartPos, FindLength, TheSearchTypes,  (frDown in FindDialog.Options) );
           if FoundAt <> -1 then
       begin
           RichEdit1.SetFocus;
             RichEdit1.SelStart := FoundAt;
             RichEdit1.SelLength := Length(FindDialog.FindText);
               end
            else
   MessageDlg('"' + FindDialog.FindText + '" not found.', mtInformation, [mbOk], 0);
end; | 
Partager