Главная страница
    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
1-1238692057
SergN
2009-04-02 21:07
2010.03.07
Как узнать каким приложением занят файл


15-1260504709
Дмитрий С
2009-12-11 07:11
2010.03.07
Взлетит шарик?


11-1213110210
!Pharaon!
2008-06-10 19:03
2010.03.07
Следующий элемент в List Box


1-1239268291
sniknik
2009-04-09 13:11
2010.03.07
Ошибка преобразования RTF в PlainText через TRichEdit


2-1262601063
dragon3232
2010-01-04 13:31
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский