Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi: Создание простого цветного TMemo или TEdit

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9

Открыть новую тему     Написать ответ в эту тему

MikeZ

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MandrataPupa

Цитата:
Кстати, можно было и не париться уж тогда с подчёркиванием

Не, отдельное подчёркивание сделано разными стилями и служит для другого. Базовое в смысле проверки орфографии нам не подходит и сделано оно только потому, что в TFont.Style исходно присутствует.

Всего записей: 407 | Зарегистр. 01-02-2004 | Отправлено: 02:18 13-11-2010
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MikeZ
ShIvADeSt,
скажите, а вот последний ColorMemo за 10 число - должен так тормозить или я че-то не так делаю?
Думал проблема в чекворде - вообще убрал этот обработчик, думал поможет, но нет. При большом(около 1280х1024) размере Мемо - курсор еле ползает по нему, при мелком (~700х300) более-менее, но тоже не шустро. По диспетчеру видно, что отъедается 100% одного ядра...Компилировал билдером 2009.

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 04:43 19-11-2010
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
Откройте AkelPad, загрузите туда любой текстовый документ и прокрутите туда сюда пару раз - загруз будет не меньше. При этом Акель написан на своем контроле, аналогичные тормоза при прокрутке в редакторе дельфи. Последняя версия скорее всего тормозит сильнее, потому что прикручена отрисовка курсива и болда, попробуй на более старых версиях. А так тормоза - нормальное явление.
Если же тормоза при перемещении курсора в рамках одной строки (без прокрутки), то проверяйте на старых версиях - не должно тормозить.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:17 19-11-2010
MikeZ

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, кстати, проблема есть: заключается в том, что ColorMemo (очевидно, в отличии от стандартного) при каждом чихе лезет перерисовываться. Причём, весь. Надо будет смотреть, как перерисовка организована.

Всего записей: 407 | Зарегистр. 01-02-2004 | Отправлено: 14:12 19-11-2010
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Откройте AkelPad, загрузите туда любой текстовый документ и прокрутите туда сюда пару раз - загруз будет не меньше. При этом Акель написан на своем контроле, аналогичные тормоза при прокрутке в редакторе дельфи. Последняя версия скорее всего тормозит сильнее, потому что прикручена отрисовка курсива и болда, попробуй на более старых версиях. А так тормоза - нормальное явление.  
Если же тормоза при перемещении курсора в рамках одной строки (без прокрутки), то проверяйте на старых версиях - не должно тормозить.

Алекелпада у меня нет, есть бред - не тормозит, есть редактор билдера/делфи 2009 - тоже не тормозит и еще много разных редакторов с подсветкой - тоже все ок... При развертывании на весь экран, если нажать кнопку скажем вправо, то курсор не скользит по тексту вниз, а прыгает, на небольшом размере мемо курсор движется более-менее плавно, но тоже видно, что подтормаживает. Ну странно, что мощности Q6600 не хватает для отрисовки мемо. Думаю как раз MikeZ прав и как-то нерационально проиходит отрисовка...
 
попробовал это http://www.stalker4.dp.ua/files/other/ColorMemo.rar - тормозит тоже, но меньше...

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 17:34 19-11-2010 | Исправлено: pir0texnik2, 18:18 19-11-2010
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MikeZ

Цитата:
Да, кстати, проблема есть: заключается в том, что ColorMemo (очевидно, в отличии от стандартного) при каждом чихе лезет перерисовываться. Причём, весь. Надо будет смотреть, как перерисовка организована.  

Все дело в том, что при любом чихе идет апдейт всей области. См RedrawWindow с нулевыми регионами.  
Уменьшена загрузка процессора при обычном перемещении по контролу, заменить соотв процедур

Код:
 
////////////////////////////////////////////////////////////////////////////////
procedure TMemo.WMKeyDown(var Message: TWMKeyDown);
 function IsShiftDown:boolean;
 begin
     Result:=(GetKeyState(VK_LSHIFT)<0);
 end;
var
    Locked : boolean;
begin
 if NOT ((Message.CharCode in [VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN]) AND NOT IsShiftDown) OR (Self.SelLength>0) then begin
    Locked:=False;
    try
     Locked:=LockWindowUpdate(Handle);
     inherited;
     RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_NOERASE);
    finally
     if Locked then LockWindowUpdate(0);
   end;
 end
 else inherited;
end;
 

 
Также пытался сделать отрисовку только текущей строки, загрузка упала очень сильно, но были 2 артефакта, которые пока что не знаю как убить. Думаю дальше... Если все будет нормально, то данный здесь код не понадобится.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:47 20-11-2010 | Исправлено: ShIvADeSt, 07:38 20-11-2010
MikeZ

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Уменьшена загрузка процессора при обычном перемещении по контролу

Аналогично еще и WMKeyUp и WMChar - может, совсем хорошо будет?

Всего записей: 407 | Зарегистр. 01-02-2004 | Отправлено: 19:02 20-11-2010
MikeZ

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Смотри, еще мысль (по отрисовке только строки): положение каретки мы знаем, можем от неё в обе стороны сплясать и проверить не изменился ли текст справа и слева от неё + осталось ли выделение. И перерисовать строку(-и).

Всего записей: 407 | Зарегистр. 01-02-2004 | Отправлено: 21:59 20-11-2010
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MikeZ
Я могу перерисовать строку, не в этом дело В общем помимо текста есть еще пространство, которое им не заполнено (примерно по 1 пикселю влево, вправо и вверх, плюс пикселей 10 вниз - в зависимости от шрифта). Если первые 3 я смог нормально закрасить, но последний нет. Делал так - при событии WM_CHAR запоминаю строку, которую редактирую. При отрисовки линии сверяю - если отрисовываемая строка не равна редактируемой, то смысл ее рисовать- пропускаю, вместо рисования копирую рисунок старой строки. Но при этом остаются артефакты, если прокрутить в самый низ, то последняя строка дублируется. Есть идея закрашивать внизу кусок от последних 2 строк до самого низа и просто ВСЕГДА рисовать нижние строки. Будет время протестирую.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:14 21-11-2010
mtaleksandr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, форумчане, участники этого давнего топика и все прчастные к созданию и тесту модулей "ColorEdit" и "ColorMemo"
 
У вас не завалялись, случайно, нигде примеры c dpr использования unit(ов) "ColorEdit" и "ColorMemo" из данной темы?  
 
За давностью, ссылки на те примеры c dpr, которые тут показывали, как юзать данные модули уже битые, а доступны только сами unit(ы), а я как начинающий, не могу никак понять, как правильно их использовать, чтоб выводить цветной текст или подчёркнутый и другие возможности , реализованные в них.  
 
 Заранее благодарю, если у кого есть возможность выложить сюда сохранившейся пример c dpr или накидать по свободе такой примерчик использования функционала данных  unit(ов) "ColorEdit" и "ColorMemo"

Всего записей: 27 | Зарегистр. 23-10-2007 | Отправлено: 08:59 23-06-2017 | Исправлено: mtaleksandr, 09:01 23-06-2017
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mtaleksandr

Цитата:
Заранее благодарю, если у кого есть возможность выложить сюда сохранившейся пример c dpr или накидать по свободе такой примерчик использования функционала данных  unit(ов) "ColorEdit" и "ColorMemo"

В теме выложены готовые контролы VCL, их нужно установить в Дельфи (в гугле поискать как это делается), после этого бросаете на форму контрол и смотрите как есть свойства. Заносите текст, компилируете. Там все очень просто, разделители прописаны в коде контрола. Специальные слова (которые должны выделяться) задаются где то в контроле либо в событии (второе вероятнее, чтобы для каждого слова можно было прописать свой стиль из возможных)

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:53 26-06-2017 | Исправлено: ShIvADeSt, 04:45 26-06-2017
mtaleksandr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
"....готовые контролы VCL, их нужно установить в Дельфи..."
 
Благодарю, я это как-то даже не уловил/не понял, читая тему, просто пробовал подцепить юнит и всё, теперь буду пробовать

Всего записей: 27 | Зарегистр. 23-10-2007 | Отправлено: 11:13 26-06-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi: Создание простого цветного TMemo или TEdit


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru