Подсветка синтаксиса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Подсветка синтаксиса

Сообщение Twister » 01.08.2005 (Пн) 7:41

Вот в чем проблема:

Делаю в своей проге редактор скриптов (язык скриптов - не VB) Для подсветки синтаксиса языка использую RichTextBox. Алгоритм разработал, готорый за один пробег по Rich-у все подсвечивает, но так как смена цветов осуществляется через SelStart, SelLength (т.е. кусок текста сначала выделяется, а потом уже меняются его атрибуты), то все это делается УЖАСНО МЕДЛЕННО !!!

Вот и хотел спросить у ОТЦОВ, нет ли способа ускорить данный процесс? Может как-то выводить весь отформатированный текст уже после перебора, чтоб каждый раз время на прорисовку не тратилось? Или еще что нибудь?

з.ы. Знаю есть такой контрол Scintilia, как раз для подсветки синтаксиса, но его предлагать не надо, т.к. хочется все прочувствовать и сделать самому... :idea:
А я все практикую лечение травами...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.08.2005 (Пн) 8:28

Ускорить (и значительно) можно, работая через API.
Lasciate ogni speranza, voi ch'entrate.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 8:31

Что именно ты предлагаешь мне делать через API?
А я все практикую лечение травами...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 01.08.2005 (Пн) 8:56

Twister писал(а):Что именно ты предлагаешь мне делать через API?

Всё. Читай про WM_SETSEL и т.п. Посылай эти сообщения окну RTB.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 9:02

Понятно, почитаю...

А есть еще способы ускорить?
А я все практикую лечение травами...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.08.2005 (Пн) 9:44

Можно прочесывать весь документ только при открытии, к тому же поставив rtb.Visible = False. В режиме редактирования проверять только текущую строку.
Еще можно использовать дополнительный rtb невидимый постоянно, все манипуляции проводить в нем, а результаты копировать в видимый с помощью SelRTF.
Ну а если еще и апи присандалить - вообще летать будет. :)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 9:49

Можно прочесывать весь документ только при открытии, к тому же поставив rtb.Visible = False. В режиме редактирования проверять только текущую строку.


Я таки делаю, visible толку не дает... В режиме редактирования у меня проверяется не вся строка, а только редактируемое слово (это для ускорения)

Блин, обшарил и гугл и msdn.microsoft.com и свои АПИ-вьюверы - не могу найти значение константы WM_SETSEL... Вот же придурок! Мож кто скинет?
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 9:51

Еще можно использовать дополнительный rtb невидимый постоянно, все манипуляции проводить в нем, а результаты копировать в видимый с помощью SelRTF.

Не вижу в этом смысла: какая разница с каким RTF работать - все равно медленно...
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 10:30

Вообщем константу WM_SETSEL я не нашел, воспользовался (спасибо Antonariy) EM_SETSEL - сработало, но прироста в скорости нет, работает так же как и прежде.

Люди, есть еще варианты?

з.ы. А Visible свою роль-то играет...
А я все практикую лечение травами...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.08.2005 (Пн) 11:00

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 11:20

Пасиб, GSerg.

Буду разбираться и переносить на Делфи. А точно
Код: Выделить всё
SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, QuickCharFormat)
даст преимущество над обычным способом SelAttributes?
А я все практикую лечение травами...

Extremist
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 83
Зарегистрирован: 20.10.2004 (Ср) 1:50

Сообщение Extremist » 02.08.2005 (Вт) 15:11

посмотри это
Вложения
Color.rar
(3.3 Кб) Скачиваний: 55

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 02.08.2005 (Вт) 15:31

2 Extremist

Спасибо.

Насколько я понял в этом примере просто выложен алгоритм пробега по RTB и подсветка слов? Я ж говорю, у меня алгоритм пробегает по тексту всего один раз.

Вся заваруха из-за того, что приходилось выделять кучу отдельных символов, на что и тратилось время. Сейчас я убрал это, выделение блоков перевел на АПИ, и все работает довольно неплохо, но конечно не сравнить с редактором Delphi или VB. Вот и хотел узнать, есть ли способ побыстрее...

з.ы. Зачем две копии-то? :wink:
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 63

    TopList