Wenn der Cursor zurückspringt, dann mußt du seine Position berechnen und neu positionieren.
//EDIT:
Also wenn es nicht perfekt sein muss, hier ein Ansatz von fünf Minuten. Es werden zwar nur die reservierten Wörter beachtet, aber wenn es reicht, dann reicht auch TRichEdit.:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
HT_BOLD = '
procedure,const,var,type,begin,end,with,do,unit,uses,class';
//usw.
var
sl: TStringList;
i, p: Integer;
s:
String;
begin
with RichEdit1
do
begin
Lines.BeginUpdate;
WordWrap := False;
SelectAll;
SelAttributes.
Name := '
Courier New';
SelAttributes.Size := 10;
sl := TStringList.Create;
try
sl.CommaText := HT_BOLD;
for i := 0
to sl.Count - 1
do
begin
SelStart := 0;
SelLength := 0;
repeat
p := FindText(sl[i], SelStart, MaxInt, [stMatchCase]);
if p > -1
then
begin
SelStart := p;
SelLength := Length(sl[i]);
SelAttributes.Style := SelAttributes.Style + [fsBold];
SelAttributes.Color := clNavy;
SelStart := SelStart + 1;
end;
until p = -1;
end;
finally
sl.Free;
end;
Lines.EndUpdate;
end;
end;