aleratorio
Осваивающий
- Сообщения
- 85
- Репутация
- 43
AutoIt: 3.3.6.1 (Наверное будет работать и на более ранних версиях)
Версия: 1.0
Категория: Элементы GUI
Описание: На днях понадобилось сделать так, что бы приложение выводило в окно лог работы с возможностью задания цвета в логе.
Было решено использовать RichEdit. Основным условием было - задавать цвет, размер и другие параметры текста как можно более простым способом, с использованием одной функции.
За основу была взята функция _Write_GUI_Log, из примера CreatoRа (http://autoit-script.ru/index.php/topic,339.0.html), позже измененная чуть менее, чем полностью.
В итоге получилась функция _GUICtrlRichEdit_TagWrite, которая выводит строку текста в элемент RichEdit с поддержкой тегов.
Конечно RichEdit поддерживает синтаксис RTF, но он довольно неудобен(это еще мягко сказано) для описания вручную.
Решил выложить тут, может еще кому пригодиться.
Синтаксис и поддерживаемые теги описаны в коммнетах(на русском) к функции _GUICtrlRichEdit_TagWrite.
P.S. Написание комментариев по моему было сложнее написания самой функции
Код/Пример:
Результат работы примера (скриншот):
Автор: aleratorio
Версия: 1.0
Категория: Элементы GUI
Описание: На днях понадобилось сделать так, что бы приложение выводило в окно лог работы с возможностью задания цвета в логе.
Было решено использовать RichEdit. Основным условием было - задавать цвет, размер и другие параметры текста как можно более простым способом, с использованием одной функции.
За основу была взята функция _Write_GUI_Log, из примера CreatoRа (http://autoit-script.ru/index.php/topic,339.0.html), позже измененная чуть менее, чем полностью.
В итоге получилась функция _GUICtrlRichEdit_TagWrite, которая выводит строку текста в элемент RichEdit с поддержкой тегов.
Конечно RichEdit поддерживает синтаксис RTF, но он довольно неудобен(это еще мягко сказано) для описания вручную.
Решил выложить тут, может еще кому пригодиться.
Синтаксис и поддерживаемые теги описаны в коммнетах(на русском) к функции _GUICtrlRichEdit_TagWrite.
P.S. Написание комментариев по моему было сложнее написания самой функции
Код/Пример:
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GUIRichEdit.au3>
#include <RightEditTagWrite.au3>
$hGUI = GUICreate('_GUICtrlRichEdit_TagWrite Demo', 640, 480, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS))
$hRichText = _GUICtrlRichEdit_Create($hGUI, "", 0, 0, 640, 480, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_SetReadOnly($hRichText, True)
GUISetState(@SW_SHOW, $hGUI)
_main()
Exit
Func _main()
_GUICtrlRichEdit_PauseRedraw($hRichText)
;Можно использовать одиночные теги:
$s = '[size=10]обычный текст, [b]жирный, [i]жирный и курсивный, [/b] курсивный, [/i][s][c=red]красный перечеркнутый,[/s][/c][n]новая строка, [c=0xFF0000][u]синий подчеркнутый,[/u]' _
& ' [c=green][sz=15][f=Comic Sans MS]большой, зеленый и веселый[/sz][/f][c=GRAY] серый и т.п. [n]следующий текст через две строки...[n=3]'
_GUICtrlRichEdit_TagWrite($hRichText, $s)
;Или группировать их вместе через запятую
$s = '[size=10]обычный текст, [b]жирный, [i]жирный и курсивный, [/b] курсивный, [/i,s,c=red]красный перечеркнутый,[/s,/c,n]новая строка, [c=0xFF0000,u]синий подчеркнутый,' _
& ' [/u,c=green,sz=15,f=Comic Sans MS]большой, зеленый и веселый[/sz,/f,c=GRAY] серый и т.п. [n]следующий текст через две строки...[n=3]'
_GUICtrlRichEdit_TagWrite($hRichText, $s)
;Так же можно изменить символы закрывающей и открывающей скобки и символ определяющий закрывающий тег
$s = '{size=10}обычный текст, {b}жирный, {i}жирный и курсивный, {-b} курсивный, {-i,s,c=red}красный перечеркнутый,{-s,-c,n}новая строка, {c=0xFF0000,u}синий подчеркнутый,' _
& ' {-u,c=green,sz=15,f=Comic Sans MS}большой, зеленый и веселый{-sz,-f,c=GRAY} серый и т.п. {n}следующий текст через две строки...{n=3}'
_GUICtrlRichEdit_TagWriteSetTagChars('{', '}', '-')
_GUICtrlRichEdit_TagWrite($hRichText, $s)
$s = '[size=15]Предопределенные цвета:[/n,/size,b,c=aqua]AQUA [c=black]BLACK [c=BLUE]BLUE [c=CREAM,bc=BLACK]CREAM [/bc,c=FUCHSIA]FUCHSIA [c=GRAY]GRAY [c=GREEN]GREEN ' _
& '[c=LIME]LIME [c=MAROON]MAROON [c=MEDBLUE]MEDBLUE [c=MEDGRAY]MEDGRAY[n,c=MONEYGREEN]MONEYGREEN [c=NAVY]NAVY [c=OLIVE]OLIVE [c=PURPLE]PURPLE [c=RED]RED [c=SILVER]SILVER ' _
& '[c=SKYBLUE]SKYBLUE [c=TEAL]TEAL [c=YELLOW,bc=BLACK]YELLOW [c=WHITE]WHITE'
_GUICtrlRichEdit_TagWriteSetTagChars('[', ']', '/')
_GUICtrlRichEdit_TagWrite($hRichText, $s)
_GUICtrlRichEdit_ResumeRedraw($hRichText)
while 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete()
Exit
EndSwitch
WEnd
EndFunc
Результат работы примера (скриншот):
Автор: aleratorio