Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как реализовать подсветку кода?

Ответить
Настройки темы
Как реализовать подсветку кода?

Аватара для Pavluha

Старожил


Сообщения: 165
Благодарности: 7


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Pavluha
Дата: 25-08-2012
Здравствуйте. В поле edit находиться текст с bb тегами. Нужно подсветить определённые теги определённым стилем (например, тег [IMG][/IMG] сдалать зелёным, а тег [b][/b] сделать жирным). Вопрос: как это реализовать. Подскажите пожалуйста. Заранее спасибо.

Отправлено: 18:11, 25-08-2012

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Нужно использовать RichEdit.
Вывод текста в элемент RichEdit с поддержкой тегов

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:38, 25-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Pavluha

Старожил


Сообщения: 165
Благодарности: 7

Профиль | Отправить PM | Цитировать


Creat0R, а можно сделать так, чтобы в примере, на который вы дали ссылку, теги не убирались.

И ещё: можно ли сделать так, чтобы пользователь мог редактировать код, и если пользователь вставил новый тег, то сразу автоматом приписывался нужный стиль, и наоборот, если пользователь убрал тег, то и стиль убирался.

Отправлено: 20:54, 25-08-2012 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Pavluha,
Всё возможно.
См. описание к функциям _GUICtrlRichEdit_* в справке.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 00:33, 26-08-2012 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Как то так:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIRichEdit.au3>

$sEditText = ''

$hGUI = GUICreate("Test Script", 300, 200)

$hRichEdit = _GUICtrlRichEdit_Create($hGUI, 'Some data with tags  [img][/img], [b][/b], and more.', 20, 20, 260, 160, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))

GUISetState(@SW_SHOW, $hGUI)

AdlibRegister('_SetEdit', 100)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            _GUICtrlRichEdit_Destroy($hRichEdit)
            Exit
    EndSwitch
WEnd

Func _SetEdit()
    $aPos = _GUICtrlRichEdit_GetSel($hRichEdit)
    $sData = _GUICtrlRichEdit_GetText($hRichEdit)

    If $sEditText <> $sData Then
        $sEditText = $sData
    Else
        Return
    EndIf

    _GUICtrlRichEdit_SetReadOnly($hRichEdit, True)

    Dim $aTags[2][3] = [['[b][/b]', 'bo', 0x000000], ['[img][/img]', '', 0x0FFF00]]

    For $i = 0 To UBound($aTags)-1
        StringReplace($sData, $aTags[$i][0], '')
        $iC = @extended

        For $j = 1 To $iC
            $iPos = StringInStr($sData, $aTags[$i][0], 2, $j)
            _GUICtrlRichEdit_SetSel($hRichEdit, $iPos-1, $iPos + StringLen($aTags[$i][0])-1)

            If $iPos Then
                If $aTags[$i][1] <> '' Then
                    _GUICtrlRichEdit_SetCharAttributes($hRichEdit, '+' & $aTags[$i][1])
                EndIf

                _GUICtrlRichEdit_SetCharColor($hRichEdit, $aTags[$i][2])
            EndIf
        Next

        _GUICtrlRichEdit_SetSel($hRichEdit, $aPos[0], $aPos[1])
        _GUICtrlRichEdit_SetCharAttributes($hRichEdit, '-' & $aTags[$i][1])
        ;_GUICtrlRichEdit_SetCharColor($hRichEdit, Default)
    Next

    _GUICtrlRichEdit_SetReadOnly($hRichEdit, False)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 02:00, 26-08-2012 | #5


Аватара для Pavluha

Старожил


Сообщения: 165
Благодарности: 7

Профиль | Отправить PM | Цитировать


Creat0R, спасибо ещё раз, правда в вашем коде есть ошибочка ([b]some text[/b] не выделяет), но я это исправлю сам.

Отправлено: 11:42, 26-08-2012 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Pavluha:
в вашем коде есть ошибочка (some text не выделяет) »
Это не ошибка, я не рассчитывал на это.
В первом сообщении указано «тег сдаелать зелёным, а тег сделать жирным», с этого я понял что теги идут вместе, не обрамляя текст.

Исправить можно так:
Код: Выделить весь код
    ...
    Dim $aTags[4][3] = [['[b]', 'bo', 0x000000], ['[/b]', 'bo', 0x000000], ['[img]', '', 0x0FFF00], ['[/img]', '', 0x0FFF00]]
    ...
хотя содержимое между тегами не будет подсвечиваться.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 12:23, 26-08-2012 | #7


Аватара для Pavluha

Старожил


Сообщения: 165
Благодарности: 7

Профиль | Отправить PM | Цитировать


Creat0R, я заметил, что если текста в поле очень много, то создаётся ненужная прокрутка текста (попробуйте написать текста столько, что он уже не вместиться весь и появиться прокрутка). Как это исправить.

И ещё. Если очень быстро печатать, то часть символов каким-то странным образом оказывается с правой стороны от курсора ввода. Поставил задержку 500 мс, и всё нормализовалось, правда не так быстро подсвечивается код.

Последний раз редактировалось Pavluha, 26-08-2012 в 13:26.


Отправлено: 12:42, 26-08-2012 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Pavluha:
Как это исправить »
Убрать $WS_VSCROLL из стилей элемента.

Цитата:
Если очень быстро печатать, то часть символов каким-то странным образом оказывается с правой стороны от курсора ввода
Да есть такое, есть ещё несколько глюков, нужно дорабатывать пример.
Я делал это на скорую руку, тестировать особо времени не было.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:37, 26-08-2012 | #9


Аватара для Pavluha

Старожил


Сообщения: 165
Благодарности: 7

Профиль | Отправить PM | Цитировать


Creat0R, вы не так поняли (или это я не так сказал). Сама полоска прокрутки нужна. Просто когда текста слишком много, а ты допечатываешь, то текст сам по себе прокручивается от начала до конца. Скорее всего, это из-за функции _GUICtrlRichEdit_SetSel

Последний раз редактировалось Pavluha, 26-08-2012 в 14:15.


Отправлено: 13:58, 26-08-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как реализовать подсветку кода?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - [решено] Excel - отключить подсветку гиперссылок в ячейках ipvinner Microsoft Office (Word, Excel, Outlook и т.д.) 16 22-05-2018 14:59
Интерфейс - [решено] Как в windows 7 отключить подсветку иконок рабочего стола при наведении мышкой. Activated Оформление Windows 11/ 10 / 8 / 7 / Vista 4 04-01-2013 13:05
Win32 API - Поменять подсветку окна 21h Программирование и базы данных 5 08-12-2010 22:41




 
Переход