WebGadget в режиме визуального редактора

Идею данного кода я взял у Олега Мирошниченко. В библиотеке window9 есть такой контрол как WebGadget, с помощью которого можно легко создать подобие браузера. Но как оказалось, с помощью его можно так же легко замутить что-то типа визуального редактора веб страниц.

Платформа: windows
Для примера нужна библиотека window9 

#INCLUDE "window9.bi"

Dim Shared  CGID_MSHTML_ As IID = Type(&hDE4BA900, &h59CA, &h11CF,_
         {&h95, &h92, &h44, &h45, &h53, &h54, &h00, &h00})

Dim Shared As IWebBrowser2 Ptr bra
Dim Shared CmdTarget As IOleCommandTarget Ptr
Dim Shared DocumentDispatch As IDispatch Ptr
Dim Shared Document As IHTMLDocument2 Ptr
Dim Shared As HWND hwnd
Dim As Integer event
Dim As VARIANTARG iBuf
Dim As String sWebPath = OpenFileRequester(_
        "Открыть файл веб страницы","C:\",_
        "Файлы вебстраниц (*.htm, *.html)"_
        +Chr(0)+"*.htm;*.html"+Chr(0))
If sWebPath="" Then 
    MessBox("Ошибка","Вы не указали ни одного файла, завершаем программу")
    End
Endif
hwnd=OpenWindow("WebGadget",10,10,800,600) : CenterWindow(hwnd)

bra=Cast(Any Ptr,WebGadget( 1,10,50,760,500,sWebPath,_
            WS_VSCROLL Or WS_HSCROLL,WS_EX_CLIENTEDGE))
ButtonGadget(3,10,10,50,20,"Edit")
ButtonGadget(4,80,10,50,20,"save")

If bra->lpVtbl->get_Document(bra,@DocumentDispatch) = S_OK Then
    If DocumentDispatch->lpVtbl->QueryInterface(DocumentDispatch,_
                        @IID_IHTMLDocument2, @Document) = S_OK Then
        If DocumentDispatch->lpVtbl->QueryInterface(DocumentDispatch,_
                        @IID_IOleCommandTarget, @CmdTarget) = S_OK Then
            CmdTarget->lpVtbl->Exec(CmdTarget,@CGID_MSHTML_,_
                                     2394, 2, @iBuf, NULL)
        Endif
        Document->lpVtbl->Release(Document)
    Endif
    DocumentDispatch->lpVtbl->Release(DocumentDispatch)
Endif

Do
    event=WaitEvent()
    If Event=EventClose Then
        End
    Elseif  Event=EventGadget Then
        Select Case EventNumber
            Case 3
                CmdTarget->lpVtbl->Exec(CmdTarget,@CGID_MSHTML_, 2127,0, 0, 0)
            Case 4
                CmdTarget->lpVtbl->Exec(CmdTarget,@CGID_MSHTML_, 71,0, 0, 0)
        End Select
    Endif
Loop

' 2D-Position                 IDM_2D_POSITION              (0x095A)     2394     для перетягивания объектов
' AbsolutePosition            IDM_ABSOLUTE_POSITION        (0x095D)     2397
' AutoDetect                  IDM_AUTODETECT               (0x0919)     2329
' BackColor                   IDM_BACKCOLOR                (0x0033)     51
' BackgroundImageCache        IDM_BACKGROUNDIMAGECACHE     (0x097E)     2430
' BlockDirLTR                 IDM_BLOCKDIRLTR              (0x0930)     2352
' BlockDirRTL                 IDM_BLOCKDIRRTL              (0x0931) 
' Bold                        IDM_BOLD                     (0x0034)     52       жирный текст
' BrowseMode                  IDM_BROWSEMODE               (0x084E)     2126     -------
' ClearAuthenticationCache    IDM_CLEARAUTHENTICATIONCACHE (0x3A9B)     15003
' Copy                        IDM_COPY                     (0x000F)     15
' CreateBookmark              IDM_BOOKMARK                 (0x084B)     2123
' CreateLink                  IDM_HYPERLINK                (0x084C)     2124     гиперссылка
' Cut                         IDM_CUT                      (0x0010)     16       вырезать объкт
' Delete                      IDM_DELETE                   (0x0011)     17       удалить  объкте 
' DirLTR                      IDM_DIRLTR                   (0x092E)     2350
' DirRTL                      IDM_DIRRTL                   (0x092F) 
' EditMode                    IDM_EDITMODE                 (0x084F)     2127     --------
' FontName                    IDM_FONTNAME                 (0x0012)     18
' FontSize                    IDM_FONTSIZE                 (0x0013)     19
' ForeColor                   IDM_FORECOLOR                (0x0037)     55
' FormatBlock                 IDM_BLOCKFMT                 (0x08BA)     2234
' GetBlockFormats             IDM_GETBLOCKFMTS             (0x08B9)     2233
' Indent                      IDM_INDENT                   (0x088A)     2186      Отступ от левого края
' InlineDirLTR                IDM_INLINEDIRLTR             (0x0932)     2354
' InlineDirRTL                IDM_INLINEDIRRTL             (0x0933)     2355
' InsertButton                IDM_BUTTON                   (0x0877)     2167      кнопка
' InsertFieldset              IDM_INSFIELDSET              (0x0847)     2119      предназначен для группирования элементов формы
' InsertHorizontalRule        IDM_HORIZONTALLINE           (0x0866)     2150      горизонтальная линия
' InsertIFrame                IDM_IFRAME                   (0x086E)     2158      создает плавающий фрейм, который находится внутри обычного документа
' InsertImage                 IDM_IMAGE                    (0x0878)     2168      вставить изображения
' InsertInputButton           IDM_INSINPUTBUTTON           (0x0843)     2115      радио кнопка
'                                                                       2116      кнопко сброс
' InsertInputCheckbox         IDM_CHECKBOX                 (0x0873)     2163      флажок
'                                                                       2164      кнопка радио
' InsertInputFileUpload       IDM_INSINPUTUPLOAD           (0x0846)     2118      кнопка загрузить файл
' InsertInputHidden           IDM_INSINPUTHIDDEN           (0x0908)     2312      создать скрытое поле
' InsertInputImage            IDM_INSINPUTIMAGE            (0x0842)     2114      кнопка с изображением
' InsertInputPassword         IDM_INSINPUTPASSWORD         (0x0909) 
' InsertInputRadio            IDM_RADIOBUTTON              (0x0874) 
' InsertInputReset            IDM_INSINPUTRESET            (0x0844) 
' InsertInputSubmit           IDM_INSINPUTSUBMIT           (0x0845)     2117      кнопка
' InsertInputText             IDM_TEXTBOX                  (0x0871)     2161      текстовое поле
' InsertMarquee               IDM_MARQUEE                  (0x0886)     2182      создать бегущею строку
' InsertOrderedList           IDM_ORDERLIST                (0x0888)     2184      нумерованный список
' InsertParagraph             IDM_PARAGRAPH                (0x0884)     2180      <P></P>
' InsertSelectDropdown        IDM_DROPDOWNBOX              (0x0875)     2165      раскрывающейся список
' InsertSelectListbox         IDM_LISTBOX                  (0x0876)     2166      LISTBOX
' InsertTextArea              IDM_TEXTAREA                 (0x0872)     2162      текстовое поле с переносом строки
' InsertUnorderedList         IDM_UNORDERLIST              (0x0889)     2185      не нумерованный список
' Italic                      IDM_ITALIC                   (0x0038)     56        шрифт Italic
' JustifyCenter               IDM_JUSTIFYCENTER            (0x0039)     57        текст по центру
' JustifyFull                 IDM_JUSTIFYFULL              (0x0032)     50        
' JustifyLeft                 IDM_JUSTIFYLEFT              (0x003B)     59        выровнять по левому краю
' JustifyNone                 IDM_JUSTIFYNONE              (0x005E)     94        не выравнивать
' JustifyRight                IDM_JUSTIFYRIGHT             (0x003C)     60        веровнять по правому краю
' KeepSelection               IDM_KEEPSELECTION            (0x096A)     2410
' LiveResize                  IDM_LIVERESIZE               (0x095E)     2398
' MultipleSelection           IDM_MULTIPLESELECTION        (0x0959)     2393
' Open                        IDM_OPEN                     (0x07D0)     2000
' Outdent                     IDM_OUTDENT                  (0x088B)     2187
' OverWrite                   IDM_OVERWRITE                (0x090A)     2314
' Paste                       IDM_PASTE                    (0x001A)     26        вставить из буфера обмена
' PlayImage                   IDM_DYNSRCPLAY               (0x08DF)     2271
' Print                       IDM_EXECPRINT                (0x005D)     93        принт
' Redo                        IDM_REDO                     (0x001D)     29        на шаг вперёд
' Refresh                     IDM_REFRESH                  (0x08FC)     2300      обновить браузер 
' RemoveFormat                IDM_REMOVEFORMAT             (0x08B6)     2230
' RemoveParaFormat            IDM_REMOVEPARAFORMAT         (0x08CD)     2253
' RespectVisibilityInDesign   IDM_RESPECTVISIBILITY_INDESIGN (0x0965)   2405
' SaveAs                      IDM_SAVEAS                   (0x0047)     71        сохранить
' SelectAll                   IDM_SELECTALL                (0x001F)     31        выделить всё
' SizeToControl               IDM_SIZETOCONTROL            (0x0023)     35
' SizeToControlHeight         IDM_SIZETOCONTROLHEIGHT      (0x0024)     36
' SizeToControlWidth          IDM_SIZETOCONTROLWIDTH       (0x0025)     37
' Stop                        IDM_STOP                     (0x085A)     2138
' StopImage                   IDM_DYNSRCSTOP               (0x08E0)     2272
' StrikeThrough               IDM_STRIKETHROUGH            (0x005B)     91        текст зочёркнут
' Subscript                   IDM_SUBSCRIPT                (0x08C7)     2247      текст в нижнем регистре
' Superscript                 IDM_SUPERSCRIPT              (0x08C8)     2248      текст в верхнем регистре
' TristateBold                IDM_TRISTATEBOLD             (0x005F)     95        жирный
' TristateItalic              IDM_TRISTATEITALIC           (0x0060)     96        ITALIC
' TristateUnderline           IDM_TRISTATEUNDERLINE        (0x0061)     97        текст подчёркнутый
' UIOutdent                   IDM_UI_OUTDENT               (0x0967)     2407
' UnBookmark                  IDM_UNBOOKMARK               (0x0850)     2128
' Underline                   IDM_UNDERLINE                (0x003F)     63        текст подчёркнутый
' Undo                        IDM_UNDO                     (0x002B)     43        на шаг назад
' UnloadDocument              IDM_UNLOADDOCUMENT           (0x096B)     2411
' Unlink                      IDM_UNLINK                   (0x084D)     2125
' Unselect                    IDM_CLEARSELECTION           (0x07D7)     2007      снять выделение



' 25      вставка обьектов
' 27      печать                        
' 90      выбор шрифта и размер
' 92      удалить выделенное                       
' 2003    предватительный просмотр печати
' 2004    параметры страницы
' 2135    вызов сетевого обозревателя
' 2139    вызов блакнота  с кодом

' 2143   размер шрифта в системе
' 2144   размер шрифта в системе
' 2145   размер шрифта в системе

' 2151   добавить строчку 
' 2152   с новой строки  тег <br clear=left>
' 2153   с новой строки  тег <br clear=right>
' 2154   с новой строки  тег <br clear=all> 
' 2155   добавить пробел    &nbsp'
' 2170   <DIV>&nbsp'</DIV>
' 2180   <P></P>
' 2221   сообщение о версии браузера
' 2261   добавить стр в избранное
' 2266   добавить ярлык на раб стол 
' 2280   контекстное меню
' 2312   поле
' 2313   поле
' 2351   печатать с право на лево
' 2353   печатать с право на лево
' 2357   <SPAN class=""></SPAN>
' 2371   вызов блакнота  с кодом