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

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

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

Аватара для Pavluha

Старожил


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


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

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


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

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

 

Аватара для Pavluha

Старожил


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

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


Код: Выделить весь код
Some data with [img]http://google.ru/asd.png[/img] tags, [b]bold[/b], and [color]color[/color].

http://autoitscript.com
http://google.ru/asd.png не подсвечивается

Отправлено: 23:55, 15-09-2012 | #31



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

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


Аватара для Creat0R

Must AutoIt


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

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


Цитата Pavluha:
http://google.ru/asd.png не подсвечивается »
Потому что ссылка определяется по началу слова (с http://), если поставить пробел до и после ссылки, то будет подсвечивать.

Я думал что подсветку ссылки можно будет делать через тег HYPERLINK (см. комментированную строчку в цикле перебора тегов), но у меня это не получилось.

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

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

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:41, 16-09-2012 | #32


Аватара для Creat0R

Must AutoIt


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

Профиль | Сайт | Отправить 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

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

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

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


Отправлено: 01:14, 16-09-2012 | #33


Аватара для Pavluha

Старожил


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

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


Creat0R, тогда хотя бы сделайте так, чтобы подсвечивались ссылки только в двух тегах: в [img]http://link[/img] и [url]http://link[/url], а также [url=http://link]some text[/url]

Отправлено: 17:37, 16-09-2012 | #34


Аватара для Creat0R

Must AutoIt


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

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


Код: Выделить весь код
$sRead = StringRegExpReplace($sRead, '(\[img\]|\[url=|\[url\])(http://.*?)(\[/img\]|\].*?\[/url\]|\[/url\])', '\1{\\field{\\*\\fldinst{HYPERLINK "\2"}}{\\fldrslt{\\cf3 \\ul \2}}}\3')

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

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

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:00, 16-09-2012 | #35


Аватара для Pavluha

Старожил


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

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


Creat0R, можно ещё вопрос (на этот раз серьёзный): у меня пропадают некоторые русские буквы в вашем коде (только что заметил, что во всех кодах они пропадают). это из-за функции _GUICtrlRichEdit_StreamToFile($hRichEdit, $sStream_File) . я поменял эту строчку на $sRead = _GUICtrlRichEdit_GetText ($hRichEdit) и закомметировал $sRead = FileRead($sStream_File), всё стало норм, правда знаки переноса строки пропадают. Как сделать так, чтобы ничего не пропадало?

Отправлено: 10:56, 19-09-2012 | #36


Аватара для Creat0R

Must AutoIt


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

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


Цитата Pavluha:
пропадают некоторые русские буквы в вашем коде (только что заметил, что во всех кодах они пропадают). это из-за функции _GUICtrlRichEdit_StreamToFile($hRichEdit, $sStream_File) »
Да, нужно её поправить, в ней файл пишется в обычной кодировке:

Код: Выделить весь код
...

__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:
всё стало норм, правда знаки переноса строки пропадают. Как сделать так, чтобы ничего не пропадало? »
Добавить параметр $fCrToCrLf:
Код: Выделить весь код
$sRead = _GUICtrlRichEdit_GetText($hRichEdit, True)

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

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

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


Отправлено: 11:59, 19-09-2012 | #37


Аватара для Pavluha

Старожил


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

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


Creat0R, вопрос: а какая из данных функций работает быстрее?

Отправлено: 20:42, 20-09-2012 | #38


Аватара для Creat0R

Must AutoIt


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

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


Цитата Pavluha:
какая из данных функций работает быстрее? »
Вопрос не что быстрее, а что надёжнее, думаю первое (через Stream).

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

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

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:57, 21-09-2012 | #39


Аватара для AZJIO

Старожил


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

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


Pavluha, посмотри это http://www.autoit.de/index.php?page=...threadID=25947

Отправлено: 10:55, 21-09-2012 | #40



Компьютерный форум 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




 
Переход