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 добавить пробел  ' ' 2170 <DIV> '</DIV> ' 2180 <P></P> ' 2221 сообщение о версии браузера ' 2261 добавить стр в избранное ' 2266 добавить ярлык на раб стол ' 2280 контекстное меню ' 2312 поле ' 2313 поле ' 2351 печатать с право на лево ' 2353 печатать с право на лево ' 2357 <SPAN class=""></SPAN> ' 2371 вызов блакнота с кодом