Enumeration 0
#OLECMDEXECOPT_DODEFAULT
#OLECMDEXECOPT_PROMPTUSER
#OLECMDEXECOPT_DONTPROMPTUSER
#OLECMDEXECOPT_SHOWHELP
EndEnumeration
Enumeration 1
#OLECMDID_OPEN
#OLECMDID_NEW
#OLECMDID_SAVE
#OLECMDID_SAVEAS
#OLECMDID_SAVECOPYAS
#OLECMDID_PRINT
#OLECMDID_PRINTPREVIEW
#OLECMDID_PAGESETUP
#OLECMDID_SPELL
#OLECMDID_PROPERTIES
#OLECMDID_CUT
#OLECMDID_COPY
#OLECMDID_PASTE
#OLECMDID_PASTESPECIAL
#OLECMDID_UNDO
#OLECMDID_REDO
#OLECMDID_SELECTALL
#OLECMDID_CLEARSELECTION
#OLECMDID_ZOOM
#OLECMDID_GETZOOMRANGE
#OLECMDID_UPDATECOMMANDS
#OLECMDID_REFRESH
#OLECMDID_STOP
#OLECMDID_HIDETOOLBARS
#OLECMDID_SETPROGRESSMAX
#OLECMDID_SETPROGRESSPOS
#OLECMDID_SETPROGRESSTEXT
#OLECMDID_SETTITLE
#OLECMDID_SETDOWNLOADSTATE
#OLECMDID_STOPDOWNLOAD
EndEnumeration
#TPM_RETURNCMD =$100
#TPM_NONOTIFY =$80
#DOCHOSTUIFLAG_THEME = $40000
Structure DOCHOSTUIINFO
cbSize.l
dwFlags.l
dwDoubleClick.l
*pchHostCss.l
*pchHostNS.l
EndStructure
;Window
Enumeration
#Main
EndEnumeration
;Gadget
Enumeration
#Web
EndEnumeration
;Popup
Enumeration
#Popup
#PureBasic
EndEnumeration
Structure IDocHost
*IDocHostUIHandler.IDocHostUIHandler
ObjectCount.l
EndStructure
Global NewList IDocHost.IDocHost()
Procedure AddRef(*THIS.IDocHost)
*THIS\ObjectCount + 1
ProcedureReturn *THIS\ObjectCount
EndProcedure
Procedure QueryInterface(*THIS.IDocHost, *iid.GUID, *Object.LONG)
If CompareMemory (*iid, ?IID_IUnknown,
SizeOf (GUID))
Or CompareMemory (*iid, ?IID_IDocHostUIHandler,
SizeOf (GUID))
*Object\l = *THIS
AddRef(*THIS.IDocHost)
ProcedureReturn #S_OK
Else
*Object\l = 0
ProcedureReturn #E_NOINTERFACE
EndIf
EndProcedure
Procedure.l Release(*THIS.IDocHost)
*THIS\ObjectCount - 1
ProcedureReturn *THIS\ObjectCount
EndProcedure
Procedure ShowContextMenu(*THIS.IDocHost, dwID.l, *ppt.POINT, *pcmdtReserved.IUnknown, *pdispReserved.IDispatch)
Protected bstr.l,iSelection.l,pElem.IHTMLElement,parent.IHTMLElement
Select dwID
Case 0
Debug "CONTEXT_MENU_DEFAULT"
Case 1
Debug "CONTEXT_MENU_IMAGE"
Case 2
Debug "CONTEXT_MENU_CONTROL"
;Pour avoir plus de renseignement sur l'objet
If *pdispReserved\QueryInterface(?IID_IHTMLElement, @pElem.IHTMLElement)=
#S_OK
If pElem
pElem\get_tagName(@bstr)
If bstr
Debug PeekS (bstr, 200,
#PB_Unicode )
EndIf
pElem\get_outerHTML(@bstr)
If bstr
Debug PeekS (bstr, 200,
#PB_Unicode )
EndIf
pElem\get_parentElement(@parent.IHTMLElement)
parent\get_outerHTML(@bstr)
parent\Release()
If bstr
Debug PeekS (bstr, 200,
#PB_Unicode )
EndIf
pElem\Release()
Debug SysFreeString_ (@bstr)
EndIf
EndIf
iSelection =
TrackPopupMenu_ (
MenuID (
#Popup ),
#TPM_LEFTALIGN |
#TPM_RIGHTBUTTON |
#TPM_RETURNCMD ,*ppt\x,*ppt\y,0,
GadgetID (
#Web ),
#Null )
If iSelection <> 0
PostMessage_ (
WindowID (
#Main ),
#WM_COMMAND , iSelection,
#Null )
ProcedureReturn #False ;0 pour interdire le menu par défaut
EndIf
Case 3
Debug "CONTEXT_MENU_TABLE"
Case 4
Debug "CONTEXT_MENU_TEXTSELECT"
Case 5
Debug "CONTEXT_MENU_ANCHOR"
Case 6
Debug "CONTEXT_MENU_UNKNOWN"
EndSelect
ProcedureReturn #True ;1 pour autoriser le menu par défaut
EndProcedure
Procedure GetHostInfo(*THIS.IDocHost, *pInfo.DOCHOSTUIINFO)
*pInfo\dwFlags = *pInfo\dwFlags |
#DOCHOSTUIFLAG_THEME
ProcedureReturn #S_OK
EndProcedure
Procedure ShowUI(*THIS.IDocHost, dwID.l, *pActiveObject.l, *pCommandTarget.l, *pFrame.l, *pDoc.l)
ProcedureReturn #S_OK
EndProcedure
Procedure HideUI(*THIS.IDocHost)
ProcedureReturn #S_OK
EndProcedure
Procedure UpdateUI(*THIS.IDocHost)
ProcedureReturn #S_OK
EndProcedure
Procedure EnableModeless(*THIS.IDocHost, fEnable.l)
ProcedureReturn #S_OK
EndProcedure
Procedure OnDocWindowActivate(*THIS.IDocHost, fActivate.l)
ProcedureReturn #S_OK
EndProcedure
Procedure OnFrameWindowActivate(*THIS.IDocHost, fActivate.l)
ProcedureReturn #S_OK
EndProcedure
Procedure ResizeBorder(*THIS.IDocHost, *prcBorder.l, *pUIWindow.l, fFrameWindow.l)
ProcedureReturn #S_OK
EndProcedure
Procedure TranslateAccelerator(*THIS.IDocHost, *lpMsg.MSG, *pguidCmdGroup.GUID, nCmdID.l)
ProcedureReturn #S_OK
EndProcedure
Procedure GetOptionKeyPath(*THIS.IDocHost, *pchKey.l, dw.l)
ProcedureReturn #S_OK
EndProcedure
Procedure GetDropTarget(*THIS.IDocHost, *pDropTarget.l, *ppDropTarget.l)
*ppDropTarget=
#Null
ProcedureReturn #E_NOTIMPL
EndProcedure
Procedure GetExternal(*THIS.IDocHost, *ppDispatch.LONG)
*ppDispatch\l = *THIS
ProcedureReturn #S_OK
EndProcedure
Procedure TranslateUrl(*THIS.IDocHost, dwTranslate.l, *pchURLIn.l, *ppchURLOut.l)
ProcedureReturn #S_FALSE
EndProcedure
Procedure FilterDataObject(*THIS.IDocHost, *pDO.IDataObject, *ppDORet.IDataObject)
*ppDORet =
#Null
ProcedureReturn #S_FALSE
EndProcedure
If OpenWindow (
#Main ,0,0,600,300,
"WebGadget" ,
#PB_Window_SystemMenu|#PB_Window_ScreenCentered )
CreateGadgetList (
WindowID (
#Main ))
WebGadget (
#Web ,10,10,580,280,
"http://www.google.fr/" )
If CreatePopupMenu (
#Popup )
MenuItem (
#PureBasic ,
"Pure Basic" )
EndIf
AddElement (IDocHost())
IDocHost()\IDocHostUIHandler=?IDocHostUIHandler
webBrowser.IWebBrowser2 =
GetWindowLong_ (
GadgetID (
#Web ),
#GWL_USERDATA )
If webBrowser\get_Document(@pDisp.IDispatch)=
#S_OK
If pDisp\QueryInterface(?IID_ICustomDoc, @pDoc.ICustomDoc)=
#S_OK
pdoc\SetUIHandler(@IDocHost()\IDocHostUIHandler)
pDoc\Release()
EndIf
pDisp\Release()
EndIf
Repeat
event=
WaitWindowEvent ()
;ViewEvent(event2)
Select event
Case #PB_Event_Menu
Select EventMenu ()
Case #PureBasic
SetClipboardText (
"PureBasic" )
webBrowser\ExecWB(
#OLECMDID_PASTE ,
#OLECMDEXECOPT_DONTPROMPTUSER , 0, 0)
EndSelect
Case #WM_CLOSE
Quit=1
EndSelect
Until Quit = 1
EndIf
DataSection
IDocHostUIHandler:
Data.l @QueryInterface()
Data.l @AddRef()
Data.l @Release()
Data.l @ShowContextMenu()
Data.l @GetHostInfo()
Data.l @ShowUI()
Data.l @HideUI()
Data.l @UpdateUI()
Data.l @EnableModeless()
Data.l @OnDocWindowActivate()
Data.l @OnFrameWindowActivate()
Data.l @ResizeBorder()
Data.l @TranslateAccelerator()
Data.l @GetOptionKeyPath()
Data.l @GetDropTarget()
Data.l @GetExternal()
Data.l @TranslateUrl()
Data.l @FilterDataObject()
IID_IDocHostUIHandler:
Data.l $BD3F23C0
Data.w $D43E, $11CF
Data.b $89, $3B, $00, $AA, $00, $BD, $CE, $1A
IID_ICustomDoc:
Data.l $3050F3F0
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
IID_IHTMLElement:
Data.l $3050F1FF
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
IID_IUnknown:
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection