PosEx hat zumindest bis Delphi 5 durchaus mit Paramter 0 als Index funktioniert, wurde in einer späteren Delphiversion verändert.
Im zweiten Beispiel von himitsu wird i mit 1 initialisiert, muss an dieser Stelle richtig 0 sein (gesucht wird ab i + 1).
Hier noch meine (hübschere
) Variante:
Delphi-Quellcode:
function Markiere(ARichedit: TRichEdit; AText: String; AColor: TColor): Boolean;
{---}
function FindNext(const AValue, AText: String; var AIndex: Integer): Boolean; inline;
begin
AIndex := PosEx(AValue, AText, AIndex);
Result := (AIndex > 0);
end;
{---}
var
s: String;
i: Integer;
begin
Result := False;
s := ARichEdit.Text;
i := 1;
while FindNext(AText, s, i) do
begin
ARichEdit.SelStart := i - 1;
ARichEdit.SelLength := Length(AText);
ARichEdit.SelAttributes.Color := AColor;
Inc(i, Length(AText));
Result := True;
end;
end;
if Markiere(Richedit1, 'mit', clRed) then
ShowMessage('gefunden');