Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 

Re: RichEdit Wort finden, Farbig und Fett markieren

  Alt 28. Nov 2005, 14:58
Hallo Nils,

auch mit deinem Code würde, wenn er funktionieren würde, nur die erste Fundstelle markiert - du hast schließlich keine Schleife drin. Auch hast du die Bedingung für FindText() falsch abgeändert - nicht > 0 sondern >= 0 müsstes du abfangen. Die nächste Suche würde in deinem Code eine Stelle auslassen, so dass du direkt hintereinander stehende Fundstellen nicht erkennst. Ich habe keine weiteren Fehler gesucht, aber es können durchaus noch weitere in deinem Code stecken.

Delphi-Quellcode:
uses
  Types;

function FindTextAll(re: TRichEdit; sText: string; options: TSearchTypes): TIntegerDynArray;
var
  iStart, iFound, iLength: integer;
begin
  SetLength(Result, 0);
  iStart := 0;
  iLength := Length(re.Lines.Text);
  while iStart < (iLength - Length(sText)) do
  begin
    iFound := re.FindText(sText, iStart, iLength - iStart, options);
    if iFound = -1 then
      Exit;
    SetLength(Result, Succ(Length(Result)));
    Result[High(Result)] := iFound;
    iStart := iFound + Length(sText);
  end;
end;

procedure TDemoForm.FindButtonClick(Sender: TObject);
var
  ida: TIntegerDynArray;
  i: integer;
  sText: string;
begin
  sText := FindEdit.Text;
  ida := FindTextAll(RichEdit, sText, []);
  for i := Low(ida) to High(ida) do
    with RichEdit do
    begin
      SelStart := ida[i];
      SelLength := Length(sText);
      SelAttributes.Color := clBlue;
      SelAttributes.Style := [fsBold];
    end;
  RichEdit.SetFocus;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat