![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Никак не могу выделить нужный текст.
Я делаю что то типо отладчика. Заношу ключевые слова (кодовые) в массив Code[0..7] of string; Вот code[0]:='n'; code[1]:='%'; code[2]:='P'; code[3]:='DR'; code[4]:='IFR'; code[5]:='T'; code[6]:='ConnIP'; code[7]:='ClsIP'; 1. Мне нужно чтоб эти слова в RichEdit выдедялись жирным цветом 2. Сразу после n, %, P значения должны оставаться обычными. то есть nНаименование. 3. После ";" текст был синим Я бьюсь уже полдня. Никак не выходит Если не обращать внимания на то, что выделяется что попало в Richedit загвостка еще в том, что не может быть n[/b]Наименование1 потом еще n[/b]Наименование2 в одной строке. Как думаете лучше сделать? Сделать массив из Char и сравнивать посимвольно первые 6 позиций? И как обращаться к символам в RichEdit подскажите???? Например 1 символ в i строке... RichEdit1.Lines[i][1] Не выходит. Выкидывает сразу. |
|
#2
|
||||
|
||||
|
Вот пример подсветки синтаксиса делфи (то бишь, как и в ващем случае, например "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]. |
|
#3
|
|||
|
|||
|
v1s2222
Долго не было ответов и я нашел порывшись часок сам. Все равно спасибо за внимание! |