StalkerSoftware
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору urmigar Тот код что ты привел, этот тот же компонент на который я дал ссылку. Если только подчеркивание (см. мой второй компонент), то мерцание конечно меньше, но все равно оно заметно. ShIvADeSt Скачал, собрал (т.е. взял модуля от Highlight within TMemo плюс твой модуль в качестве Unit1.pas), посмотрел. Сначала я в него внес только одно изменение: В обработчик MouseUp в самое его начала я добавил строку Код: if SelLength = 0 then invalidate; | как советовал data man, что бы после выделения восстанавливалась раскраска. И в самом Memo я сменил шрифт с курьера на Arial 9. Есть несколько проблем: 1) Не работает выделение с помощью клавишь. Хотя с помощью мыши и контекстного меню выделение текста происходит, но если в этот момент нажать в Memo клавишу, то выделение текста пропадает. 2) Когда выделяешь текст, а потом выделение убираешь, то видно что текст во время этих операций немного смещается влево и вверх. Как я понимаю это происходит из за того, что при выделение текста работают не твои обработчики Paint, а какой то другой. Может есть какое то событие Paint, которое срабатывает именно во время операции по выделению текста ? Для того, что бы этого смещения не было, надо в обработчики WMPrint и WMPrintClient внести небольшие изменения: Заметить строку Код:на Код: и заменить строку Код:на Код: Но я сильно подозреваю, что эти числа 4 и 1 сильно зависят от фонта, его размера и возможно коэффициента размера (который ставиться в свойствах дисплея). То есть эти числа надо вычислять, только как я не знаю. 3) Если находясь в самом начале Memo, нажать Ctrl+End (т.е. переместиться в самый конец текста), то в самом низу Memo виден артефакт в виде куска строки, который исчезает после нажатия любой клавиши. 4) Находимся в самом низу текста в самом низу memo. Жму Ctrl+Home и перемещаюсь в самое начало текста и в самое начало memo. После этого я жму любую клавишу и в нижней части memo появляется еще одна строка. 5) При скролинге Memo с помощью клавиши Down (особенно если он длительный и непрерывный), видно что в самой нижней части memo дублируются строки. Небольшой вопрос: Я правильно понимаю, что обработчик WMPrintClient нужен для того, что бы происходила перерисовка не всего Memo, а только его изменившихся частей ? |