Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

RichEdit: Синхронизация и ограничения.   Найти похожие ветки 

 
Artlav ©   (2008-06-15 15:53) [0]

Пытаюсь сделать редактор кода на чистом KOL, основное поле редактора в виде RichEdit.

Проблема первая:
С боку у RichEdit поля есть панель, на которой написаны номера строк.
Нужно эти номера синхронизовать с тем, что в редакторе.

OnScroll реагирует только на ползунок, различные OnКнопки не дают полного покрытия, OnChange реагирует только на ввод.
Пробовал OnPaint - работает, но исчезает всё.

Как это сделать по-людски?

Проблему в общем можно свести к вызову стандартных обработчиков событий из заменённых по типу "es.OnPaint:=TOnPaint(MakeMethod(frm,@espaint));".
Т.е. то, что в VC++ делается по типу
void CEditView::OnPaint(HDC dc)
{
CRichEditView::OnPaint(dc);  //<---
UpdateNums();
}


Проблема вторая:
Как ограничить прокрутку RichEdit поля по строкам, т.е. чтобы в поле не было дробных строк на верхней/нижней границе? Пример - редактор Delphi/Lazarus, MSVS и многие другие кодоредакторы.


 
=BuckLr= ©   (2008-06-16 11:50) [1]

А как подсветку делаешь, если не секрет? Как обычно, или что-то оригинальное придумал?


 
Artlav ©   (2008-06-16 16:00) [2]


> А как подсветку делаешь, если не секрет? Как обычно, или что-то оригинальное придумал?

Зависит от определения "как обычно".

Общий план подсветки таков, с вызовом первой при изменении и второй при загрузке (es - RichEdit):

procedure procline(var es:PControl;i:integer);
begin
es.SelStart:=es.item2Pos(i)-1;
es.SelLength:=es.item2Pos(i+1)-es.item2Pos(i);
es.RE_FmtFontColor:=clblack;      
es.RE_FmtBold:=false;    
es.RE_FmtItalic:=false;

replcoml(es,"//",i,clgreen);
//...etc...;
end;      
//############################################################################//
procedure procall(var es:PControl);
var i,n:integer;
pt:teditpositions;
begin                    
LockWindowUpdate(es.GetWindowHandle);  
pt:=es.SavePosition;
n:=es.Pos2item(es.TextSize);
for i:=0 to n-1 do if length(es.Items[i])<>0 then procline(es,i);
es.RestorePosition(pt);  
LockWindowUpdate(0);  
end;


Непосредственно раскраска идёт по такому принципу (строковый комментарий):

procedure replcoml(var es:PControl;w:string;i:integer;cl:tcolor);
var p:integer;
begin
p:=PosEx(w,es.Items[i],p);
while p<>0 do begin
 es.SelStart:=es.item2Pos(i)+p-1;
 es.SelLength:=es.item2Pos(i+1)-es.item2Pos(i)-p;
 es.RE_FmtFontColor:=cl;      
 es.RE_FmtItalic:=true;
 p:=PosEx(w,es.Items[i],p+1);
end;
end;


По моему вопросу предложений нет?


 
=BuckLr= ©   (2008-06-17 17:53) [3]

Ну, я имел в виду, что отрисосывается всё, или только то, что видно. Но теперь-то ясно...

По вопросу лично у меня предложений нет. Одно время хотел пользоваться RE для подсветки, но по ходу дела оказалось так много глюков, что я забил на него и взял Memo


 
Artlav ©   (2008-06-17 19:21) [4]


> По вопросу лично у меня предложений нет. Одно время хотел пользоваться RE для подсветки, но по ходу дела оказалось так много глюков, что я забил на него и взял Memo

Memo=EditBox? Если да, то как же в нём делать подсветку?
И если нет и если да, можно поподробнее?


 
=BuckLr= ©   (2008-06-18 11:16) [5]

Да, эдитбокс. Подсветка есть в компоненте Кладова, поищи. Очень хороший компонент



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

Текущий архив: 2010.03.07;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.009 c
15-1261527698
KilkennyCat
2009-12-23 03:21
2010.03.07
VBA и application.processmessage


6-1210590992
little_fish
2008-05-12 15:16
2010.03.07
проблема с Web-Services(HTTPRIO)


2-1261983766
Who_is_you?
2009-12-28 10:02
2010.03.07
Как сделать проверки через каждые 20 микросекунд?


15-1261171821
Юрий
2009-12-19 00:30
2010.03.07
С днем рождения ! 19 декабря 2009 суббота


3-1235917104
Den
2009-03-01 17:18
2010.03.07
TreeView и база данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский