Re[5]: ITextFont::SetForeColor дергает полосу прокрутки
От: pilgrim_ Россия  
Дата: 17.09.20 16:05
Оценка: 4 (1)
Здравствуйте, Went, Вы писали:

W>Здравствуйте, pilgrim_, Вы писали:

_>>Если все еще актуально, дай знать, откопаю старый проект, где-то через неделю, сходу не вспомню, больше 10 лет прошло, но рич-едит насиловался по полной ,возможно и обновление скрола подавлялось принудительно.
W>Честно сказать, актуально. Если не сложно, буду очень благодарен.

Извиняюсь за задержку, откопал таки проект, с трудом вспомнил что там да как, короче: при изменении атрибутов текста (а именно BackColor), в том числе массовые (один и более фрагментов текста, включая невидимые), в том числе с большой частотой (по таймеру, частое моргание цвета/плавная смена) помимо freez'a у TextDocument, также подавлялось событие EN_CHANGE (EM_GETEVENTMASK/EM_SETEVENTMASK + ENM_CHANGE), затем все это восстанавливалось обратно. т.е.:

..
textDOcument.Freeze();

//disable EN_CHANGE
int evtMask = (int)SendMessage(richHandle, EM_GETEVENTMASK, 0, 0);
SendMessage(richHandle, EM_SETEVENTMASK, 0,  evtMask & ~ENM_CHANGE)

//update text attributes
..

//restore events-enable EN_CHANGE
SendMessage(richHandle, EM_SETEVENTMASK, 0,  evtMask)

textDOcument.Unfreeze();
Re[6]: ITextFont::SetForeColor дергает полосу прокрутки
От: Went  
Дата: 18.09.20 07:42
Оценка:
Здравствуйте, pilgrim_, Вы писали:
_>Извиняюсь за задержку, откопал таки проект, с трудом вспомнил что там да как, короче: при изменении атрибутов текста (а именно BackColor), в том числе массовые (один и более фрагментов текста, включая невидимые), в том числе с большой частотой (по таймеру, частое моргание цвета/плавная смена) помимо freez'a у TextDocument, также подавлялось событие EN_CHANGE (EM_GETEVENTMASK/EM_SETEVENTMASK + ENM_CHANGE), затем все это восстанавливалось обратно. т.е.:
Увы, не помогло. В приципе, на момент парса у меня и так отключалась реакция на изменение текста (только на клиентской стороне), но можно было бы допустить какие-то особенности внутренней реализации РичЭдита. Пока что могу сказать только одно — "мерцание прокрутки" происходит тогда, когда я меняю текст (ну, вписываю букву с клавиатуры) очень скоро после того, как была расцветка какого-то фрагмента... Может, что-то не успело "валиднуться" или еще что-то. Может какая-то "внутренняя" каретка была сейчас где-то внизу, за видимой границей документа, где делала расцветку, и моя редактура текста приводит к какому-то непредвиденному "скачку", что отображается на полосе прокрутки...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.