Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Попытался сделать свой RichEdit с поддержкой своих тегов, вроде получилось, но как обрабатывать введённый текст в реальном времени.
На данный момент поддерживается для теста один тег, в цикл я поставил для примера функции которые обрабатывают теги и заменяют на нужные, не понятно как правильно организовать эту обработку, также в этот RichEdit можно вставить всё что есть в html, можно и картинки Gif.
Код:
Попробуйте запустить и написать что - то типо [color: #0000AA]test[/color], текст станет синим, но вот дальше начнутся баги, и стирать текст не получится.
Добавлено:
Вроде готово.
Тэги добавляются функцией __Html_AddTag(), в примере добавил 3 тега.
Добавлено:
2й вариант, это WYSIWYG контрол на AutoIt с помощью Html ;D
В нижнем Edit введите <textarea></textarea> и в первом Edit появится ещё один Edit, чтобы в нём написать нужно сделать 2 клика по нему.
На данный момент поддерживается для теста один тег, в цикл я поставил для примера функции которые обрабатывают теги и заменяют на нужные, не понятно как правильно организовать эту обработку, также в этот 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], текст станет синим, но вот дальше начнутся баги, и стирать текст не получится.
Добавлено:
Сообщение автоматически объединено:
Вроде готово.
Тэги добавляются функцией __Html_AddTag(), в примере добавил 3 тега.
1.[color: #0000AA]test[/color]
2.test
3.test
2.test
3.test
Добавлено:
Сообщение автоматически объединено:
2й вариант, это WYSIWYG контрол на AutoIt с помощью Html ;D
В нижнем Edit введите <textarea></textarea> и в первом Edit появится ещё один Edit, чтобы в нём написать нужно сделать 2 клика по нему.