![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RichEdit и подсветка [Delphi, KOL, Windows]
Artlav © (2007-12-03 21:57:00)Пытаюсь сделать подсветку синтаксиса внутри richedit поля, проблемы две:
Как определить, что было изменение какого-то конкретного участка?
И самое главное - как запретить перерисовку в процессе форматирования?
Т.е. процедура вроде
procedure replkw(var editscr:PControl;w:string;i:integer;cl:tcolor);
var p:integer;
begin
p:=0;
p:=PosEx(w,editscr.Items[i],p);
while p<>0 do begin
editscr.SelStart:=editscr.item2Pos(i)+p-1;
editscr.SelLength:=length(w);
editscr.RE_FmtFontColor:=cl;
p:=PosEx(w,editscr.Items[i],p+1);
end;
end;
Делает своё дело, а в это время на экране скачет курсор и возникает/исчезает выделение.
PassedBy (2007-12-11 01:13:00) [1]Кста.. Дай исходничек - поковыряю на досуге...
PassedBy (2007-12-11 01:12:00) [2]Может LockWindowUpdate попробовать?
Artlav (2007-12-09 19:36:00) [3]Никто ничего не знает или это не возможно/я не там/не так спрашиваю?
Artlav (2007-12-04 00:28:00) [4]Не помогло...
Точнее, курсор и выделение скакать перестали, но теперь при копи-пасте или удалении большого куска (перепроссчёт всего содержимого) скачет экран, а иногда и при простом и при полном просто смазывает всё - http://orbides.1gb.ru/orbf/thebug.jpg
Судя по всему я где-то делаю глупую ошибку.
procedure procsynt(var editscr:PControl);
var i,n:integer;
ss,sl:integer;
begin
editscr.BeginUpdate;
ss:=editscr.SelStart;
sl:=editscr.SelLength;
editscr.SelStart:=0;
editscr.SelLength:=99999999;
editscr.RE_FmtFontColor:=clblack;
n:=editscr.Pos2item(editscr.TextSize);
for i:=0 to n-1 do if length(editscr.Items[i])<>0 then procline(editscr,i);
editscr.SelStart:=ss;
editscr.SelLength:=sl;
editscr.EndUpdate;
end;
Дмитрий К (2007-12-03 23:14:00) [5]
> как запретить перерисовку в процессе форматирования?
editscr.BeginUpdate;
//процесс форматирования
editscr.EndUpdate;