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