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

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


Цитата AZJIO:
_GUICtrlRichEdit_StreamToVar, _GUICtrlRichEdit_StreamFromVar »
Это не отвечает на вопрос как менять 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


Последний раз редактировалось Creat0R, 31-08-2012 в 02:08.


Отправлено: 23:55, 30-08-2012 | #21



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

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


Аватара для 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]image[/img] tags, [b]bold[/b], and [color]color[/color].', 20, 20, 260, 160, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_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' ;red(cf1;green(cf2);blue(cf3)
	Dim $aTags[3][3] = [['b', '\b', '\cf0'], ['img', '', '\cf2'], ['color', '', '\cf1']]
	
	For $i = 0 To UBound($aTags) - 1
		$sRead = StringRegExpReplace($sRead, '(\[' & $aTags[$i][0] & '\].*?\[/' & $aTags[$i][0] & '\])', '{\' & $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

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

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

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:56, 31-08-2012 | #22


Аватара для Pavluha

Старожил


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

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


ещё вопросик: а как изменить фон определённых слов?

Отправлено: 13:37, 01-09-2012 | #23


Аватара для Creat0R

Must AutoIt


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

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


Цитата Pavluha:
как изменить фон определённых слов? »
По идее нужно использовать \cbN как параметр рядом с cfN, но оно почему то не работает...

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

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

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


Отправлено: 03:32, 03-09-2012 | #24


Аватара для Pavluha

Старожил


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

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


Creat0R, вот-вот. я сделал документ в ворде с фоном, сохранил в формате ртф, работает, даже в вордпэде правильно показывает. открываю я исходный код, а там....... короче я не разобрался. но фон ооочень нужен. без него нормальную подсветку не сделаешь.

Отправлено: 22:33, 05-09-2012 | #25


Аватара для Pavluha

Старожил


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

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


Ура!!! Нашёл!!!

Код: Выделить весь код
{\rtf1
{\colortbl ;\red255\green255\blue0;}
some 
{\highlight1 yellow }
text
}

Последний раз редактировалось Pavluha, 12-09-2012 в 18:51.

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

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


Аватара для Pavluha

Старожил


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

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


Ещё вопрос (не обязательно, но всё же): нужно сделать так, чтобы подсвечивались url и при нажатии на них (например, ctrl + нажатие или, например, двойной клик по ссылке) открывалась страница с этим url. _GUICtrlRichEdit_AutoDetectURL ($hRichEdit, True) только подсвечивает.

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


Отправлено: 21:06, 13-09-2012 | #27


Аватара для Creat0R

Must AutoIt


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

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


Цитата Pavluha:
_GUICtrlRichEdit_AutoDetectURL ($hRichEdit, True) только подсвечивает. »
Нужно ещё отлавливать событие:

Код: Выделить весь код
#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]image[/img] tags, [b]bold[/b], and [color]color[/color].' & @LF & @LF & 'http://autoitscript.com', _
	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, '(\[' & $aTags[$i][0] & '\].*?\[/' & $aTags[$i][0] & '\])', '{' & StringReplace($aTags[$i][1] & $aTags[$i][2], '\', '\\') & ' \1}')
		;$sRead = StringRegExpReplace($sRead, '\[url=(.*?)\](.*?)\[/url\]', '{\\field{\\*\\fldinst{HYPERLINK "\1"}}{\\fldrslt{\\cf3 \\ul \2}}}')
	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


Отправлено: 23:05, 13-09-2012 | #28


Аватара для Pavluha

Старожил


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

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


Creat0R, если ссылка находится в каком-либо теге, то она не подсвечивается, а ведь должна.

Отправлено: 19:47, 14-09-2012 | #29


Аватара для Creat0R

Must AutoIt


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

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


Цитата Pavluha:
если ссылка находится в каком-либо теге, то она не подсвечивается »
Пример текста можно?

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

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

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


Отправлено: 05:48, 15-09-2012 | #30



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




 
Переход