|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как реализовать подсветку кода? |
|
Как реализовать подсветку кода?
|
Старожил Сообщения: 165 |
Профиль | Отправить PM | Цитировать
Здравствуйте. В поле edit находиться текст с bb тегами. Нужно подсветить определённые теги определённым стилем (например, тег [IMG][/IMG] сдалать зелёным, а тег [b][/b] сделать жирным). Вопрос: как это реализовать. Подскажите пожалуйста. Заранее спасибо.
|
|
Отправлено: 18:11, 25-08-2012 |
Старожил Сообщения: 165
|
Профиль | Отправить PM | Цитировать Some data with [img]http://google.ru/asd.png[/img] tags, [b]bold[/b], and [color]color[/color]. http://autoitscript.com |
Отправлено: 23:55, 15-09-2012 | #31 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Pavluha:
Я думал что подсветку ссылки можно будет делать через тег HYPERLINK (см. комментированную строчку в цикле перебора тегов), но у меня это не получилось. |
|
------- Отправлено: 00:41, 16-09-2012 | #32 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Есть два варианта.
Либо определять текст только между тегами, либо вне тегов (как и сделано выше). Конечно можно попытаться извернуться и построить рег. выражение чтобы определял в обеих случаях, но у меня это пока не получилось. Вот тот же пример но со вторым вариантом: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIRichEdit.au3> Global $sStream_File = @TempDir & '\au3_rtf.tmp' $hGUI = GUICreate('_GUICtrlRichEdit_SetFormat Demo', 300, 200) $hRichEdit = _GUICtrlRichEdit_Create($hGUI, 'Some data with [img]http://google.ru/asd.png[/img] tags, [b]bold[/b], and [color]color[/color].', _ 20, 20, 260, 160, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL)) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;_GUICtrlRichEdit_AutoDetectURL($hRichEdit, True) _GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_LINK) _GUICtrlRichEdit_StreamToFile($hRichEdit, $sStream_File) GUISetState(@SW_SHOW, $hGUI) While 1 _GUICtrlRichEdit_SetFormat() Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _GUICtrlRichEdit_Destroy($hRichEdit) FileDelete($sStream_File) Exit EndSwitch WEnd Func _GUICtrlRichEdit_SetFormat() If Not _GUICtrlRichEdit_IsModified($hRichEdit) Then Return EndIf Local $aPos, $sRead, $sColorTbl _GUICtrlRichEdit_StreamToFile($hRichEdit, $sStream_File) $aPos = _GUICtrlRichEdit_GetSel($hRichEdit) $sRead = FileRead($sStream_File) $sColorTbl = '\red255\green0\blue0;\red0\green150\blue0;\red0\green0\blue255;\red255\green255\blue0' ;red(cf1;green(cf2);blue(cf3);yellow(cf4) Dim $aTags[3][3] = [['b', '\b', '\cf0'], ['img', '', '\cf2 \highlight4'], ['color', '', '\cf1']] For $i = 0 To UBound($aTags) - 1 $sRead = StringRegExpReplace($sRead, '\[(.+?)\](http://.*?)\[/\1\]', '[\1]{\\field{\\*\\fldinst{HYPERLINK "\2"}}{\\fldrslt{\\cf3 \\ul \2}}}[/\1]') ;Попытка добавить определение ссылок вне тега (вызывает проблемы при добавлении символа пробела или " после или до ссылки) ;$sRead = StringRegExpReplace($sRead, '([^" ])(http://.*)([^"}]*)', '\1{\\field{\\*\\fldinst{HYPERLINK "\2"}}{\\fldrslt{\\cf3 \\ul \2}}}\3') $sRead = StringRegExpReplace($sRead, '(\[' & $aTags[$i][0] & '\].*?\[/' & $aTags[$i][0] & '\])', '{' & StringReplace($aTags[$i][1] & $aTags[$i][2], '\', '\\') & ' \1}') Next $sRead = '{\rtf1 {\colortbl ;' & $sColorTbl & ';}' & StringReplace(StringStripCR($sRead), @LF, @LF & '\par ') & '}' $hFile = FileOpen($sStream_File, 2) FileWrite($hFile, $sRead) FileClose($hFile) _GUICtrlRichEdit_StreamFromFile($hRichEdit, $sStream_File) _GUICtrlRichEdit_SetSel($hRichEdit, $aPos[0], $aPos[1]) _GUICtrlRichEdit_SetModified($hRichEdit, False) EndFunc Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam) #forceref $hWnd, $iMsg, $iWparam Local $hWndFrom, $iCode, $tNMHDR, $tEnLink, $cpMin, $cpMax, $tMsgFilter $tNMHDR = DllStructCreate($tagNMHDR, $iLparam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hRichEdit Select Case $iCode = $EN_LINK $tMsgFilter = DllStructCreate($tagMSGFILTER, $iLparam) If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then $tEnLink = DllStructCreate($tagENLINK, $iLparam) $cpMin = DllStructGetData($tEnLink, "cpMin") $cpMax = DllStructGetData($tEnLink, "cpMax") ShellExecute(_GUICtrlRichEdit_GetTextInRange($hRichEdit, $cpMin, $cpMax)) EndIf EndSelect EndSwitch Return $GUI_RUNDEFMSG EndFunc |
------- Отправлено: 01:14, 16-09-2012 | #33 |
Старожил Сообщения: 165
|
Профиль | Отправить PM | Цитировать Creat0R, тогда хотя бы сделайте так, чтобы подсвечивались ссылки только в двух тегах: в [img]http://link[/img] и [url]http://link[/url], а также [url=http://link]some text[/url]
|
Отправлено: 17:37, 16-09-2012 | #34 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 19:00, 16-09-2012 | #35 |
Старожил Сообщения: 165
|
Профиль | Отправить PM | Цитировать Creat0R, можно ещё вопрос (на этот раз серьёзный): у меня пропадают некоторые русские буквы в вашем коде (только что заметил, что во всех кодах они пропадают). это из-за функции _GUICtrlRichEdit_StreamToFile($hRichEdit, $sStream_File) . я поменял эту строчку на $sRead = _GUICtrlRichEdit_GetText ($hRichEdit) и закомметировал $sRead = FileRead($sStream_File), всё стало норм, правда знаки переноса строки пропадают. Как сделать так, чтобы ничего не пропадало?
|
Отправлено: 10:56, 19-09-2012 | #36 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Pavluha:
... __GUICtrlRichEdit_StreamToFile($hRichEdit, $sStream_File) ... Func __GUICtrlRichEdit_StreamToFile($hWnd, $sFilespec, $fIncludeCOM = True, $iOpts = 0, $iCodePage = 0) If Not _WinAPI_IsClassName($hWnd, $_GRE_sRTFClassName) Then Return SetError(101, 0, False) Local $iWparam If StringRight($sFilespec, 4) = ".rtf" Then $iWparam = _Iif($fIncludeCOM, $SF_RTF, $SF_RTFNOOBJS) Else $iWparam = _Iif($fIncludeCOM, $SF_TEXTIZED, $SF_TEXT) If BitAND($iOpts, $SFF_PLAINRTF) Then Return SetError(1041, 0, False) EndIf ; only opts are $SFF_PLAINRTF and $SF_UNICODE If BitAND($iOpts, BitNOT(BitOR($SFF_PLAINRTF, $SF_UNICODE))) Then Return SetError(1042, 0, False) If BitAND($iOpts, $SF_UNICODE) Then If Not BitAND($iWparam, $SF_TEXT) Then Return SetError(1043, 0, False) EndIf If _GUICtrlRichEdit_IsTextSelected($hWnd) Then $iWparam = BitOR($iWparam, $SFF_SELECTION) $iWparam = BitOR($iWparam, $iOpts) If $iCodePage <> 0 Then $iWparam = BitOR($iWparam, $SF_USECODEPAGE, BitShift($iCodePage, -16)) EndIf Local $tEditStream = DllStructCreate($tagEDITSTREAM) DllStructSetData($tEditStream, "pfnCallback", DllCallbackGetPtr($_GRC_StreamToFileCallback)) Local $hFile = FileOpen($sFilespec, 2+128) ; overwrite If $hFile - 1 Then Return SetError(102, 0, False) DllStructSetData($tEditStream, "dwCookie", $hFile) ; -> Send handle to CallbackFunc _SendMessage($hWnd, $EM_STREAMOUT, $iWparam, $tEditStream, 0, "wparam", "struct*") FileClose($hFile) Local $iError = DllStructGetData($tEditStream, "dwError") If $iError <> 0 Then SetError(700, $iError, False) Return True EndFunc Цитата Pavluha:
|
||
------- Отправлено: 11:59, 19-09-2012 | #37 |
Старожил Сообщения: 165
|
Профиль | Отправить PM | Цитировать Creat0R, вопрос: а какая из данных функций работает быстрее?
|
Отправлено: 20:42, 20-09-2012 | #38 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Pavluha:
|
|
------- Отправлено: 00:57, 21-09-2012 | #39 |
Старожил Сообщения: 254
|
Профиль | Отправить PM | Цитировать Pavluha, посмотри это http://www.autoit.de/index.php?page=...threadID=25947
|
Отправлено: 10:55, 21-09-2012 | #40 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|