Что нового

RichEdit с помощью объекта IE

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Попытался сделать свой RichEdit с поддержкой своих тегов, вроде получилось, но как обрабатывать введённый текст в реальном времени.

На данный момент поддерживается для теста один тег, в цикл я поставил для примера функции которые обрабатывают теги и заменяют на нужные, не понятно как правильно организовать эту обработку, также в этот RichEdit можно вставить всё что есть в html, можно и картинки Gif.

Код:
Код:
Global $oIE, $__richedit_id = 0x1000, $__obj_Error = 0, $__obj_Event = ObjEvent('AutoIt.Error', '__com_getError')

$hForm = GUICreate('', 500, 400)
$Edit = __Html_CreateRichEdit('[color: #FF7AD7]#include[/color]', 20, 20, 460, 360)
GUISetState()

While 1
	$sText = $oIE.document.getElementById($Edit[1]).InnerHTML
	$sText = StringRegExpReplace($sText, '\[color:(.*)\](.*)\[\/color\]', '<a style="color: $1">$2</a>')
	$oIE.document.getElementById($Edit[1]).InnerHTML = $sText
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch
Wend

Func __Html_CreateRichEdit($sText, $iLeft, $iTop, $iWidth, $iHeight)
	Local $sHtml = ''
	$sHtml &= '<html><head><style type="text/css"> body {border: none; padding: 0px; margin: 0px;} * {margin: 0; padding: 0;}' & @CRLF
	$sHtml &= '</style></head><body scroll="no"></body></html>'
	$oIE = ObjCreate('Shell.Explorer.2')
	If (Not IsObj($oIE)) Then
		Return SetError(1, 1, 0)
	EndIf
	Local $iElement = GUICtrlCreateObj($oIE, $iLeft, $iTop, $iWidth, $iHeight)
	$oIE.Navigate('about:blank')
	$oIE.Document.Write($sHtml)
	$oIE.Document.Close()
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 2, 0)
	EndIf
	$oIE.document.body.InnerHTML =  '<div id="' & $__richedit_id & '" contenteditable="true"' & _
		              'style="position: absolute; left: 0px; top: 0px;' & _
					  'width: 100%; height: 100%; padding: 5px;' & _
					  'border: none; overflow: auto; color: black; align: left;">' & $sText & '</div>'
	If $__obj_Error Then
		$__obj_Error = 0
		Return SetError(1, 3, 0)
	EndIf
	Local $iRet[2]
	$iRet[0] = $iElement
	$iRet[1] = $__richedit_id
	Return $iRet
EndFunc

Func __com_getError()
	$__obj_Error = $__obj_Event.Number
EndFunc


Попробуйте запустить и написать что - то типо [color: #0000AA]test[/color], текст станет синим, но вот дальше начнутся баги, и стирать текст не получится.


Добавлено:
Сообщение автоматически объединено:

Вроде готово. :smile:

Тэги добавляются функцией __Html_AddTag(), в примере добавил 3 тега.

1.[color: #0000AA]test[/color]
2.test
3.test



Добавлено:
Сообщение автоматически объединено:

2й вариант, это WYSIWYG контрол на AutoIt с помощью Html ;D

В нижнем Edit введите <textarea></textarea> и в первом Edit появится ещё один Edit, чтобы в нём написать нужно сделать 2 клика по нему.
 
Верх