Показать сообщение отдельно
  #2  
Старый 30.11.2010, 12:52
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Вот пример подсветки синтаксиса делфи (то бишь, как и в ващем случае, например "end" выделит, а точку с запятой после end 'a нет:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const   
  word: array[1..32] of string[15] = ('if','then','else','begin','end','for','to',
    'do','while','repeat','until','case','of','type','var','const','procedure',   
    'function','array','string','unit','interface','uses','class','private',
    'public','implementation','in','and','or','xor','not');
  comment: array[1..6] of string[2] = ('{','}','(*','*)','//',#13#10);
var
  k,k1,i: integer;
begin
  for i:=1 to length(word) do
    begin
      k:=-length(word[i]);
      repeat
        k:=RichEdit1.FindText(word[i],k+length(word[i]),
           length(RichEdit1.Text)-k-length(word[i]),[stWholeWord]);
        RichEdit1.SelStart:=k;
        RichEdit1.SelLength:=length(word[i]);
        RichEdit1.SelAttributes.Style:=[fsBold];
        RichEdit1.SelAttributes.Color:=clNavy;
      until k < 0;
    end;
  for i:=0 to 2 do
    begin
      k1:=-length(comment[i*2+1]);
      repeat
        k:=k1;
        k:=RichEdit1.FindText(comment[i*2+1],k+length(comment[i*2+1]),
           length(RichEdit1.Text)-k-length(comment[i*2+1]),[stMatchCase]);
        k1:=RichEdit1.FindText(comment[i*2+2],k+length(comment[i*2+2]),
            length(RichEdit1.Text)-k-length(comment[i*2+2]),[stMatchCase]);
        RichEdit1.SelStart:=k;
        RichEdit1.SelLength:=k1-k+length(comment[i*2+2]);
        RichEdit1.SelAttributes.Style:=[fsItalic];
        RichEdit1.SelAttributes.Color:=clNavy;
      until k < 0;
    end;
end;

ЗЫ обращаться к символу можно либо так: RichEdit1.Text[i] либо как в написали (будет работать): RichEdit1.Lines.Strings[i][k].
__________________
Помогаю за Спасибо
Ответить с цитированием