Hi Leute,
ich hab jetzt mal folgendes getestet:
Text im RichEdit mit FindText durchsuchen, gesuchten String selektieren und Textattribute setzen. Dann weitersuchen. Das alles bis zum ende des Textes. Das ich das für mehrere Suchstrings mache ist jetzt erst mal nicht weiter von Interesse.
Nun klappt das auch erst mal ordentlich, jedoch die Geschwindigkeit lässt mächtig zu wünschen übrig. Die Logdatei (reiner Text) ist ca. 600K groß.
Meine entsprechenden Methoden zum Finden und Formatieren sehen so aus:
Delphi-Quellcode:
procedure TFormatTypeObj.FormatLogText(RichEdit : TRichEdit);
var TextPos, StartPos, FStrLength : Integer;
begin
if not Assigned(RichEdit) then Exit;
if RichEdit.Text = '' then Exit;
FStrLength := Length(FFormatString);
StartPos := 0;
while not (RichEdit.FindText(FFormatString, StartPos, Length(RichEdit.Text) - StartPos, []) = -1) do begin
TextPos := RichEdit.FindText(FFormatString, StartPos, Length(RichEdit.Text) - StartPos, []);
Richedit.SelStart := TextPos;
RichEdit.SelLength := FStrLength;
FormatText(RichEdit.SelAttributes);
StartPos := TextPos + FStrLength;
end;
end;
procedure TFormatTypeObj.FormatText(SelAttributes: TTextAttributes);
begin
if not assigned(SelAttributes) then Exit;
SelAttributes.Color := FColor;
SelAttributes.Charset := FCharSet;
SelAttributes.Pitch := FPitch;
SelAttributes.Name := FName;
SelAttributes.Size := FSize;
SelAttributes.Style := FStyle;
SelAttributes.Height := FHeight;
end;
Das ich die Formatierung in eine Klasse ausgelagert habe sei hier noch erwähnt. So kann ich mehrere Strings für unterschiedliche Formatierungen mit ihren Format-Attributen definieren, die jede durch ein eigenes Object repräsentiert werden. Alle diese Objecte werden in einer Liste gehalten. Der Liste wird der zu formatierende Text mittels des haltenden RichEdit übergeben. Diese ruft wiederum die Methode FormatLogText auf und übergibt das RichEdit.
wie gesagt, klappt soweit, aber dauert ewig.
Kann hier jemand einen schnelleren Weg anbieten?
Gruß oki