Как реализовать подсветку кода?

Аватара пользователя
Creat0R

Re: Как реализовать подсветку кода?

Сообщение Creat0R »

Цитата Pavluha:



когда текста слишком много, а ты допечатываешь, то текст сам по себе прокручивается от начала до конца
Как реализовать подсветку кода?




У меня не прокручивается.




Цитата Pavluha:



это из-за функции _GUICtrlRichEdit_SetSel
Как реализовать подсветку кода?




Она восстанавливает исходную позицию курсора.
Аватара пользователя
Pavluha

Re: Как реализовать подсветку кода?

Сообщение Pavluha »

Creat0R,
http://autoit-script.ru/autoit3_docs...dit_setsel.htm





Цитата:



Устанавливает выделение текста в указанных позициях начала и конца
Аватара пользователя
Pavluha

Re: Как реализовать подсветку кода?

Сообщение Pavluha »

Цитата Creat0R:



У меня не прокручивается.
Как реализовать подсветку кода?




возьмите строк так 1000 или больше, и поглядите.
Аватара пользователя
Creat0R

Re: Как реализовать подсветку кода?

Сообщение Creat0R »

Цитата Pavluha:



Устанавливает выделение текста в указанных позициях начала и конца
Как реализовать подсветку кода?




Мне не нужна цитата из справки, я и так в неё заглядываю прежде чем использовать функцию Изображение

Я написал про восстановление т.к в коде у меня сначала получается текущая позиция выделения, а потом происходит восстановление.
Аватара пользователя
Pavluha

Re: Как реализовать подсветку кода?

Сообщение Pavluha »

Creat0R, тогда есть другие варианты раскрасить текст, при этом не выделяя его?
Аватара пользователя
AZJIO

Re: Как реализовать подсветку кода?

Сообщение AZJIO »

Скачай
сборник скриптов
, сделай поиск файла RESH_Mod_Example.au3. Это упрощённый аналог RESHv2.2 от Beege. Я хотел выяснить как делается подсветка и упростил скрипт до минимума. Смысл такой: функции _GUICtrlRichEdit_Stream... работают с данными как бы в сыром режиме. Это как HTML, который мы видим как текст, на самом деле в это текстовый файл, где слова обрамлены тегами. Аналогично и здесь, в "шапке" файла заданы стили, далее по тексту идут теги. Задача обрамить текст тегами и вставить в RichEdit. Условия обрамления это уже другой вопрос, но факт тот, что обрабатывать текст перед вставкой получается гораздо быстрее, чем вызывать специальные функции, которые будут выделять текст и ещё сопровождаться мельканием тексты при вызове.
Аватара пользователя
Pavluha

Re: Как реализовать подсветку кода?

Сообщение Pavluha »

AZJIO, буду значит учить разметку RTF. Твоя идея выглядит очень хорошо, если к этому добавить ещё автообновление раскраски каждые, например, 100 мс.
Аватара пользователя
Pavluha

Re: Как реализовать подсветку кода?

Сообщение Pavluha »

Ещё небольшой вопрос: как сделать так, чтобы слева показывало номера строк, как в редакторе notepad++
Аватара пользователя
Creat0R

Re: Как реализовать подсветку кода?

Сообщение Creat0R »

Цитата AZJIO:



факт тот, что обрабатывать текст перед вставкой получается гораздо быстрее
Как реализовать подсветку кода?




Но его придётся обрабатывать в файле я так понял?

Я не нашёл как без записи в файл изменять Stream...




Цитата Pavluha:



как сделать так, чтобы слева показывало номера строк, как в редакторе notepad++
Как реализовать подсветку кода?




Если как в редакторах, то это совсем не тривиальная задача.

Но есть _GUICtrlRichEdit_SetParaNumbering, которая добавит нумерацию строк внутри элемента.
Аватара пользователя
AZJIO

Re: Как реализовать подсветку кода?

Сообщение AZJIO »

Цитата Creat0R:



Я не нашёл как без записи в файл изменять Stream...
Как реализовать подсветку кода?




_GUICtrlRichEdit_StreamToVar, _GUICtrlRichEdit_StreamFromVar. А вообще глядя на пример о котором я писал выше, так в нём _GUICtrlRichEdit_SetText вставляет форматированный текст. Хотя так не должно быть, потому что теги должны вставляется как есть. Я, конечно, могу потестить, но мне это не надо...




Цитата Pavluha:



Твоя идея выглядит очень хорошо, если к этому добавить ещё автообновление раскраски каждые, например, 100 мс.
Как реализовать подсветку кода?




Не уверен что это хорошая идея. Тестируйте, пробуйте варинаты с добавлением текста (не перезапись всего) и изменение флага модификации _GUICtrlRichEdit_IsModified, который позволит определить изменение текста, а не изменять когда это не требуется.
Ответить

Вернуться в «AutoIt»