Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
15-1261494235
Piter
2009-12-22 18:03
2010.03.07
Ошибка в книге Тейксейра и Пачеко?


15-1261231827
AlexanderMS
2009-12-19 17:10
2010.03.07
Получить IP-адрес устройства в глобальной сети


4-1229864623
Максим
2008-12-21 16:03
2010.03.07
взаимодействие с проводником windows


2-1262071082
Who_is_you?
2009-12-29 10:18
2010.03.07
Чтение и запись в LPT в режиме Bidirection Win XP, Win98?


2-1262677121
Андрей Пл
2010-01-05 10:38
2010.03.07
Остановить выполнение пророги в задонном месте до опред. события?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский