Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2008, 12:15   #1
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
Лампочка Нормальная подсветка синтаксиса.

Сразу для модеров и всяких умников: темы я смотрел на форуме и это самое большое что я нашол
Цитата:
http://www.programmersforum.ru/showthread.php?t=16814
const
word: array[1..18] of string[9] = ('if','then','else','begin','end',' for','to',
'do','while','repeat','until','case ','of','type','var','const','proced ure',
'function');
var
k,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.Color:=clBl ue;
until k < 0;
RichEdit1.SelAttributes.Color:=clBl ack;
end;
end;
Далее для тех же умников: да я такой, и хочу изобритать велик с квадратными колесами, поэтому на компонента типа SynEdit'а не пишите ссылки.
Теперь перейду к сути темы. Мне надо сделать приемлимо норамльную подсветку синтаксиса в компоненте RichEdit. Я подредактил код, но все равно выглядит глупо
Код:
procedure TForm1.RichEdit1Change(Sender: TObject);
const
  word: array[1..2] of string[9] = ('if','then');
var
  i,c:Cardinal;
  k: integer;
begin
c:=RichEdit1.SelStart;
RichEdit1.ReadOnly:=true;
  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.Color:=clBlue;
        Application.ProcessMessages;
      until k < 0;
      RichEdit1.SelAttributes.Color:=clBlack;
    end;
RichEdit1.SelStart:=c;
RichEdit1.ReadOnly:=false;
end;
Первое что косячено это то когда написал например then и начинаешь его удалять, то the все еще светится синим.
Вотрое это моргание. Помогите сделать нормальный код.
Да и забыл сказать самое главное, отмена перестает работать.

Последний раз редактировалось Simply-Art; 01.11.2008 в 12:18.
Simply-Art вне форума Ответить с цитированием
Старый 01.11.2008, 19:46   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

1. Ваша процедура годится для первоначальной подсветки ВСЕГО текста (после загрузки текста в RichEdit) с таким изменением:
k:=RichEdit1.FindText(word[i],k+length(word[i]),
length(RichEdit1.Text) {-k-length(word[i])} ,[stWholeWord]);
(конечно, procedure TForm1.RichEdit1Change(Sender: TObject) на это время нужно отключить)
2. В procedure TForm1.RichEdit1Change(Sender: TObject); нужно просматривать ТОЛЬКО КУСОК текста перед и после курсора, равный длине слова из словаря.

Последний раз редактировалось mihali4; 01.11.2008 в 19:49.
mihali4 вне форума Ответить с цитированием
Старый 07.12.2008, 18:58   #3
KiDoki
Форумчанин
 
Регистрация: 06.10.2008
Сообщений: 102
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
2. В procedure TForm1.RichEdit1Change(Sender: TObject); нужно просматривать ТОЛЬКО КУСОК текста перед и после курсора, равный длине слова из словаря.
Нет представления как это можно сделать, подскажите пожалуйста.
KiDoki вне форума Ответить с цитированием
Старый 08.12.2008, 11:52   #4
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

Смотри здесь: http://prdownloads.sourceforge.net/p...x.zip?download. Когда реализовывал аналогичную возможность брал многое из данного компонента.
NieL вне форума Ответить с цитированием
Старый 08.12.2008, 17:23   #5
KiDoki
Форумчанин
 
Регистрация: 06.10.2008
Сообщений: 102
По умолчанию

Цитата:
Сообщение от NieL Посмотреть сообщение
Смотри здесь: http://prdownloads.sourceforge.net/p...x.zip?download. Когда реализовывал аналогичную возможность брал многое из данного компонента.
Спасибо =)
KiDoki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка синтаксиса => Патрон Общие вопросы Delphi 21 03.01.2016 11:48
Новая подсветка синтаксиса Alar О форуме и сайтах клуба 25 06.10.2008 11:15
Подсветка синтаксиса Simply-Art Общие вопросы Delphi 2 29.05.2007 16:22
Компонент для подсветки синтаксиса das-xp Компоненты Delphi 1 19.05.2007 21:03