Ich wollte mehre verschiedene Wörter in einem RichEdit markieren. "Er" macht aber immer nur das erste Suchwort (zwar im ganzen Text), aber keine weiteren? Gibst da irgendeinen Trick? (Nur falls Zeit und Lust so während dem Fußball)
Delphi-Quellcode:
function TFindSourceMainForm.RichEditPos(const S: string): integer;
begin
if WholeWordsCheckBox.Checked then
Result := TStrUtils.WordPos(FSubStr, S)
else
Result := TStrUtils.Pos(FSubStr, S);
end;
procedure TFindSourceMainForm.HighlightResults;
var
I, J, APos, ACount, K, SubStrCount: Integer;
ARichEdit: TRichEdit;
begin
for I := 0 to PageControl.PageCount - 1 do
begin
ACount := 0;
ARichEdit := RichEdit(I);
ARichEdit.Lines.BeginUpdate;
try
if GraphicObjectTypesCheckBox.Checked then
SubStrCount := FGraphicObjectTypes.Count
else
SubStrCount := 1;
for K := 0 to SubStrCount - 1 do // ***
begin
if GraphicObjectTypesCheckBox.Checked then
FSubStr := FGraphicObjectTypes[K];
for J := 0 to ARichEdit.Lines.Count - 1 do
begin
APos := RichEditPos(ARichEdit.Lines[J]);
if APos > 0 then
begin
ARichEdit.SelStart := ACount + APos - 1;
ARichEdit.SelLength := Length(FSubStr);
ARichEdit.SelAttributes.Color := clBlack;
ARichEdit.SelAttributes.Style := [fsBold];
end;
ACount := ACount + Length(ARichEdit.Lines[J]) + 2; // 2 = Zeilenumbruch;
if FCancel then
Exit;
end;
end;
finally
ARichEdit.Lines.EndUpdate;
ARichEdit.SelStart := 0;
ARichEdit.SelLength := 0;
end;
end;
end;