|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
RichEdit и форматирование текста
Никак не могу выделить нужный текст.
Я делаю что то типо отладчика. Заношу ключевые слова (кодовые) в массив 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
Долго не было ответов и я нашел порывшись часок сам. Все равно спасибо за внимание! |