Снегопат https://snegopat.ru/forum/ |
|
События https://snegopat.ru/forum/viewtopic.php?f=1&t=269 |
Страница 1 из 4 |
Автор: | Magister [ 01 ноя 2012, 01:30 ] | ||
Заголовок сообщения: | События | ||
Вечер добрый! В вики нашел перечень событий, которые существуют. Там же указано что остальные можно найти в скриптах. Но нужного мне события я не нашел - мне нужно оповещение об изменении позиции курсора в текстовом редакторе. Вкратце для чего нужно. Я сейчас пробую сделать альтернативу SciColorer используя SynEdit. Как я понял из описания SciColorer - он сам текст не редактирует. Я же делаю, чтобы текст редактировался непосредственно в моем редакторе, и передаю изменения в стандартный. Сейчас столкнулся с тем, что при нажатии Enter в комментарии textEditorExt добавляет комментарий в новую строку, и после этого изменяет положение курсора. Добавление комментария обрабатывается нормально, а вот изменение курсора - нет. Как бы его поймать? Может быть, вот это оно? Код: public: virtual void __thiscall core::TextManager::onTextAreaModified(bool,class core::TextPosition const &,class core::TextPosition const &,class core::TextPosition const &,class core::TextPosition const &) Приложил dll, которая получилась на данный момент. Естествено, перед подключением отключить SciColorer. upd. Обновил test.dll - получение позиции курсора по onIdle, редактирование блоков текста, улучшение подсветки, начато сворачивание кода. upd2. Обновил ещё раз test.dll - много чего сделано, уже даже текст редактировать можно довольно нормально upd3. Пофикшены баги, о которых отписывались в теме.
|
Автор: | orefkov [ 01 ноя 2012, 08:34 ] |
Заголовок сообщения: | Re: События |
На этой функции у меня как раз и стоит перехват, во время которого и вызывается событие "onChangeTextManager" Параметры - txtMgr, selectionBefore, selectionAfter txtMgr - число, адрес this перехвачиваемого объекта, соответствует свойству textMgr объекта ITextWindow selectionBefore - положение выделения до модификации, объект типа ISelection selectionAfter - положение выделения после модификации, объект типа ISelection Событие как раз и делалось под SciColorer для решения задачи отлова изменения текста извне. И SciColorer таки как-раз сам редактирует текст. Он создает свое окно поверх окна 1Сного редактора, и оперативно сливает все правки в родной редактор. |
Автор: | orefkov [ 01 ноя 2012, 08:42 ] |
Заголовок сообщения: | Re: События |
И хотелось бы узнать, в чем видится смысл разработки редактора? Какие будут плюсы по сравнению со штатным и SciColorer? Тестовую пробовал, там еще пилить и пилить - что должно в итоге получиться? Хотя альтернатива - это всегда хорошо. |
Автор: | Magister [ 01 ноя 2012, 12:43 ] |
Заголовок сообщения: | Re: События |
orefkov писал(а): На этой функции у меня как раз и стоит перехват, во время которого и вызывается событие "onChangeTextManager" Параметры - txtMgr, selectionBefore, selectionAfter txtMgr - число, адрес this перехвачиваемого объекта, соответствует свойству textMgr объекта ITextWindow selectionBefore - положение выделения до модификации, объект типа ISelection selectionAfter - положение выделения после модификации, объект типа ISelection Событие как раз и делалось под SciColorer для решения задачи отлова изменения текста извне. Собственно изменение текста я получаю именно через это событие, тут проблемы нет. А вот изменение позиции курсора из других скриптов - нет. Конкретно - из textEditorExt, при нажатии Enter в комментарии. Сам комментарий у меня в редакторе появляется, а вот позиция курсора - становится неправильной. orefkov писал(а): И SciColorer таки как-раз сам редактирует текст. Он создает свое окно поверх окна 1Сного редактора, и оперативно сливает все правки в родной редактор. Значит metaeditor ввёл меня в заблуждение: metaeditor писал(а): Итак, начнём тестирование колорера с возможностью редактирования текста. Работает оно на событии onChangeTextManager(selectionBefore, selectionAfter) которое вызывается, когда в текстовом окне изменился текст. По передаваемым параметрам вычисляется часть текста которая изменилась и обновляется соответствующая часть редактора scintilla, лежащего поверх родного редактора. Сам редактор scintilla текст не меняет, он только его отображает. Кому верить? orefkov писал(а): И хотелось бы узнать, в чем видится смысл разработки редактора? Какие будут плюсы по сравнению со штатным и SciColorer? Тестовую пробовал, там еще пилить и пилить - что должно в итоге получиться? Хотя альтернатива - это всегда хорошо. Смысл - SynEdit мне нравится больше, чем Scintilla. Из плюсов - например, вот это (пока ещё не прикрутил): или вот это (уже есть): или вотэто (тоже пока нет): |
Автор: | orefkov [ 01 ноя 2012, 12:51 ] |
Заголовок сообщения: | Re: События |
Ну, не знаю, как точно сделано в SciColorer, но я бы просто в onIdle периодически стягивал положение каретки из ITextWindow. На чем кстати написан редактор? Есть ли порт под линукс? |
Автор: | sosnae [ 01 ноя 2012, 12:55 ] |
Заголовок сообщения: | Re: События |
Можно будет выводить для каждой строчки какой-либо комментарий, например как в скрине ? |
Автор: | Magister [ 01 ноя 2012, 14:02 ] |
Заголовок сообщения: | Re: События |
orefkov писал(а): Ну, не знаю, как точно сделано в SciColorer, но я бы просто в onIdle периодически стягивал положение каретки из ITextWindow. На чем кстати написан редактор? Есть ли порт под линукс? Тоже об этом думал, но как-то это не совсем правильно. Думал, может есть событие на смену положения каретки. Тем более, в данном случае оно инициировано как раз Снегопатом. Редактор написан на Паскале, используется как редактор кода в Lazarus. Под Linux работает. Правда не знаю как там с окнами работать. Под Windows я окну формы, на которой лежит SynEdit, устанавливаю родителем TextWindow, дальше для изменения размера перехватываю WindowProc TextWindow и для отслеживания момента закрытия окна - WindowProc MDILocalFrame. Как такое провернуть под Linux - хз. |
Автор: | Magister [ 01 ноя 2012, 14:06 ] |
Заголовок сообщения: | Re: События |
sosnae писал(а): Можно будет выводить для каждой строчки какой-либо комментарий, например как в скрине ? Стандартно такого нет, но прикрутить, думаю, несложно будет. Код редактора открытый, так что сделать можно многое |
Автор: | orefkov [ 01 ноя 2012, 14:08 ] |
Заголовок сообщения: | Re: События |
Каретка - момент не принципиальный. Пока делай через onIdle - надо будет, сделаем и событие. Сейчас более важно основной функционал нарастить. |
Автор: | sosnae [ 01 ноя 2012, 14:10 ] |
Заголовок сообщения: | Re: События |
orefkov писал(а): Сейчас более важно основной функционал нарастить. +1 настройки цветов, а то уже не привычно на родной красно-сине-белой цветовой схеме сидеть. |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |