Вниз
Скачать: CL | DM;

RichEdit и подсветка   Найти похожие ветки 

← →
Artlav   (2007-12-03 21:57) [0]

Пытаюсь сделать подсветку синтаксиса внутри 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;

Делает своё дело, а в это время на экране скачет курсор и возникает/исчезает выделение.


← →
Дмитрий К ©   (2007-12-03 23:14) [1]


> как запретить перерисовку в процессе форматирования?

editscr.BeginUpdate;
//процесс форматирования
editscr.EndUpdate;


← →
Artlav   (2007-12-04 00:28) [2]

Не помогло...
Точнее, курсор и выделение скакать перестали, но теперь при копи-пасте или удалении большого куска (перепроссчёт всего содержимого) скачет экран, а иногда и при простом и при полном просто смазывает всё - 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;


← →
Artlav   (2007-12-09 19:36) [3]

Никто ничего не знает или это не возможно/я не там/не так спрашиваю?


← →
PassedBy   (2007-12-11 01:12) [4]

Может LockWindowUpdate попробовать?


← →
PassedBy   (2007-12-11 01:13) [5]

Кста.. Дай исходничек - поковыряю на досуге...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
15-1229612286
axis_of_evil
2008-12-18 17:58
2009.02.15
Silicon Graphics Octane


2-1231148439
***mikle***
2009-01-05 12:40
2009.02.15
Изменение длины динамического массива внутри процедуры.


2-1231237384
RUBEY
2009-01-06 13:23
2009.02.15
Ошибка в коде отправки почты


4-1205362998
Jolik
2008-03-13 02:03
2009.02.15
Как узнать выполняется моя функция в основной нитке...


2-1230553408
charoey_mag
2008-12-29 15:23
2009.02.15
Русские буквы в английской винде




   Наверх