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 |
|