![]() |
Модераторы: Vitalik |
![]() ![]() ![]() |
|
Sep. |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 22.7.2004 Репутация: 6 Всего: 6 |
2Vitalik
Есть вопрос: Я добавляю программно в подсветке в стиль типа Keylist слова. Теперь мне нужно вызвать SynUni.Reset чтобы перерисовалось все с новыми ключевыми словами? Если так , то нельзя ли сделать чтобы Reset не сбрасывал выделение, а то даже если пишешь
видно моргание =( --------------------
Syn - TotalCommander lister plugin | SynTree - coders sourcebook |
|||
|
||||
Seldon |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: 2 Всего: 2 |
от моргания может избавить SynEdit.(Begin|End)Update или WM_SETREDRAW
и, как я понимаю, после обновления правил мало вызвать Reset - надо ещё сбросить хайлайтер у санэдита:
по крайней мере так сделано в дизайнере. я тут ниже темку создал с вопросами, там есть аналогичный вопрос, будем надеяцца что Виталик в воскресенье ответит, как и общеал ![]() --------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
|||
|
||||
Vitalik |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Изрядно поэкспериментировав с разными комбинациями (Reset/Refresh/Prepare/BeginUpdate/Highlighter=nil и т.п.) я пришел к выводу, что с простым SynUni.Reset() и последующим SynEdit.Refresh() все замечательно работает
![]() Ниже прикладываю простой проект-примерчик, показывающий работоспособность следующего кода:
Это (как и многое другое в том месте) делалось, наверное, "на всякий случай". Либо же действительно это со старыми версиями компонента было необходимо. Проверив сейчас эти моменты я на данный момент прихожу к выводу, что эти строки не нужны..
Прошу прощения, что не удалось ответить ни в то воскресение, ни много позже. По приезду в Харьков у меня только вчера появился интернет в общаге (там была произведена серьезная реорганизация сети). Сейчас попробую вникнуть в вопросы поднятые в той теме ![]() Присоединённый файл ( Кол-во скачиваний: 13 ) ![]() |
||||||
|
|||||||
Sep. |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 22.7.2004 Репутация: 6 Всего: 6 |
Никаких нареканий по поводу работоспособности и не было =) Вопрос был в другом: Можно ли сделать так, чтобы выделение не сбрасывалось? Потому как даже если его восстанавливать, то видно моргание. Я вообще нашел, что вместо SynUni.Reset() и SynEdit.Refresh() достаточно использовать только SynUni.Prepare(). И выделение лучше сохранять через блок, потому как SelStart и SelEnd будут некорректны в некоторых случаях при TrimTrailingSpace := enabled
--------------------
Syn - TotalCommander lister plugin | SynTree - coders sourcebook |
||||
|
|||||
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
В том то и дело, что в том примере моргания нету ![]() А вот это уже не знаю.. Если моргания и не будет, то может быть этого будет достаточно? Если нет, то не придется ли для этого ковырять SynEdit?.. |
|||
|
||||
Seldon |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: 2 Всего: 2 |
да, TSynUni.Prepare вызывает DefHighlightChange который вызывает TCustomSynEdit.HighlighterAttrChanged который вызывает SizeOrFontChanged(True) который вызывает TCustomSynEdit.Invalidate выделение сбрасываецца в результате вызова TCustomSynEdit.ScanRanges (из TCustomSynEdit.HighlighterAttrChanged) т.к. там изменяецца содержимое всех строк (не текст, а Range)
согласен у меня моргания нет. у тебя какой процессор? может я просто не замечаю моргания... но даже если оно есть, SendMessage(Synedit.Handle,WM_SETREDRAW,1,0) перед обновлением и SendMessage(Synedit.Handle,WM_SETREDRAW,0,0) после должно избавить от него --------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||
|
|||||
Sep. |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 22.7.2004 Репутация: 6 Всего: 6 |
Пасибо, WM_SETREDRAW помог. Только SendMessage надо делать в обратном порядке =) Возможно и SynEdit потом подправлю, посмотрю как лучше.
OFF: проц 1.7GHz, но тут дело наверно в том, что это обновление запускается из потока с idle приоритетом, а не из основного потока. А сама прога, это dll модуль... --------------------
Syn - TotalCommander lister plugin | SynTree - coders sourcebook |
|||
|
||||
Seldon |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: 2 Всего: 2 |
в принципе в тему: при загрузке подсветки в компонент, который уже связан с SynEdit'ом этот SynEdit не обновляецца.
1 путь: расскоментировать эту строку из TSynUniFormatNativeXml.ImportFromStream
2 путь: расскоментировать эту строку из TSynUniFormatNativeXmlAuto.ImportFromStream
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
||||
|
|||||
Sep. |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 22.7.2004 Репутация: 6 Всего: 6 |
Погоди-ка, ты про SynUni.LoadFromFile? У меня нормально все обновляется при этом. --------------------
Syn - TotalCommander lister plugin | SynTree - coders sourcebook |
|||
|
||||
Sep. |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 22.7.2004 Репутация: 6 Всего: 6 |
Пардон, беру слова назад =)
Не заметил у меня SynEdit.Repaint; все же вызывается из другого места после LoadFromFile. --------------------
Syn - TotalCommander lister plugin | SynTree - coders sourcebook |
|||
|
||||
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Это было сделано для того, что это обновление не всегда нужно. Очень часто бывает нужно просто считать подсветку (или сборник подсветок) и проанализировать информацию, содержащуюся в них (хотя бы те же расширения). Если после каждого считывания подсветки ее еще и Prepare'ить, то время загрузки подсветок будет крайне велико. Мне кажется, что лучше уж если требуется именно обновить подсветку для SynEdit, то после SynUni.LoadFromFile просто вызывать SynEdit.Repaint или что-то подобное. Что скажете? ![]() |
|||
|
||||
Seldon |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 23.12.2005 Где: Minsk Репутация: 2 Всего: 2 |
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |