Автор Тема: RichEdit с помощью объекта IE  (Прочитано 2373 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Afonichev [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1535
  • Репутация: 408
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Попытался сделать свой RichEdit с поддержкой своих тегов, вроде получилось, но как обрабатывать введённый текст в реальном времени.

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

Код:
Код: AutoIt [Выделить]
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], текст станет синим, но вот дальше начнутся баги, и стирать текст не получится.


Добавлено: Май 19, 2012, 12:49:57
Вроде готово.  :)

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

(нажмите для показа/скрытия)



Добавлено: Май 19, 2012, 14:13:28
2й вариант, это WYSIWYG контрол на AutoIt с помощью Html ;D

В нижнем Edit введите <textarea></textarea> и в первом Edit появится ещё один Edit, чтобы в нём написать нужно сделать 2 клика по нему.
« Последнее редактирование: Май 19, 2012, 14:13:28 от Viktor1703, Причина: Объединение сообщений »

Русское сообщество AutoIt

RichEdit с помощью объекта IE
« Отправлен: Май 19, 2012, 12:02:29 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
6961 Просмотров
Последний ответ Декабрь 17, 2010, 10:30:19
от aleratorio
6 Ответов
5341 Просмотров
Последний ответ Июнь 09, 2012, 20:18:34
от CreatoR
0 Ответов
1984 Просмотров
Последний ответ Сентябрь 24, 2012, 15:47:55
от ags1973
10 Ответов
4611 Просмотров
Последний ответ Июнь 07, 2013, 19:01:22
от CreatoR
5 Ответов
3774 Просмотров
Последний ответ Июль 20, 2013, 18:46:55
от AngrySpoon
9 Ответов
2315 Просмотров
Последний ответ Июль 02, 2014, 13:09:19
от damien2008
0 Ответов
1234 Просмотров
Последний ответ Август 30, 2015, 08:49:40
от GUIMish
0 Ответов
613 Просмотров
Последний ответ Август 30, 2015, 09:02:04
от madmasles
1 Ответов
1565 Просмотров
Последний ответ Сентябрь 04, 2015, 09:31:51
от GUIMish
0 Ответов
675 Просмотров
Последний ответ Ноябрь 29, 2015, 15:36:14
от GUIMish