How to set font to menu?

Just starting out? Need help? Post your questions and find answers here.
IdeasVacuum
Always Here
Always Here
Posts: 6426
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: How to set font to menu?

Post by IdeasVacuum »

Via Freak's Html Interface code.
See this post: viewtopic.php?f=13&t=29393&start=15

Code: Select all

Procedure.i WebGadget_Document(iGadget.i, *IID)
;#---------------------------------------------
Protected iDocument.i = 0
Protected Browser.IWebBrowser2
Protected DocumentDispatch.IDispatch

                  Browser = GetWindowLongPtr_(GadgetID(iGadget), #GWL_USERDATA)
               If Browser

                               If Browser\get_Document(@DocumentDispatch) = #S_OK And DocumentDispatch

                                         DocumentDispatch\QueryInterface(*IID, @iDocument)
                                         DocumentDispatch\Release()
                               EndIf
               EndIf

               ProcedureReturn iDocument
EndProcedure

Procedure.i IDocHostUIHandlerImpl_QueryInterface(*that.IDocHostUIHandlerImpl, riid.i, ppObj.i)
;#--------------------------------------------------------------------------------------------
Protected hresult.i = #E_NOINTERFACE
Protected TmpUnkown.IUnknown = *that

               If ppObj <> #Null And riid <> #Null

                         PokeI(ppobj, 0)

                         If CompareMemory(riid, ?IID_IUnkown, SizeOf(IID))

                                 PokeI(ppobj, *that)
                                 TmpUnkown\AddRef()
                                 hresult = #S_OK

                         ElseIf CompareMemory(riid, ?IID_IDocHostUIHandler, SizeOf(IID))

                                 PokeI(ppobj, *that)
                                 TmpUnkown\AddRef()
                                 hresult = #S_OK
                         EndIf
               EndIf

               ProcedureReturn hresult
EndProcedure

Procedure.i IDocHostUIHandlerImpl_AddRef(*that.IDocHostUIHandlerImpl)
;#-------------------------------------------------------------------
                               *that\RefCount = *that\RefCount + 1
               ProcedureReturn *that\RefCount
EndProcedure

Procedure.i IDocHostUIHandlerImpl_Release(*that.IDocHostUIHandlerImpl)
;#--------------------------------------------------------------------
Protected iRefCount.i
                       *that\RefCount = *that\RefCount - 1
                            iRefCount = *that\RefCount

               If iRefCount = 0

                         If *that\External <> #Null

                                   *that\External\Release()
                         EndIf

                         FreeMemory(*that)
               EndIf

               ProcedureReturn iRefCount
EndProcedure

Procedure.i IDocHostUIHandlerImpl_ShowContextMenu(*that.IDocHostUIHandlerImpl, dwID, ppt, pcmdTarget, pdispReserved)
;#------------------------------------------------------------------------------------------------------------------

               ProcedureReturn #S_FALSE
EndProcedure

Procedure.i IDocHostUIHandlerImpl_GetHostInfo(*that.IDocHostUIHandlerImpl, *pInfo.DOCHOSTUIINFO)
;#----------------------------------------------------------------------------------------------

               *pInfo\cbSize        = 20
               *pInfo\dwDoubleClick = #DOCHOSTUIDBLCLK_DEFAULT
               *pInfo\dwFlags       = #DOCHOSTUIFLAG_DIV_BLOCKDEFAULT + #DOCHOSTUIFLAG_OPENNEWWIN
               *pInfo\pchHostCss    = #Null
               *pInfo\pchHostNS     = #Null

               ProcedureReturn #S_OK
EndProcedure

Procedure.i IDocHostUIHandlerImpl_ShowUI(*that.IDocHostUIHandlerImpl, dwID, pActiveObject, pCommandTarget, pFrame, pDoc)
;#----------------------------------------------------------------------------------------------------------------------

               ProcedureReturn #S_FALSE
EndProcedure

Procedure.i IDocHostUIHandlerImpl_HideUI(*that.IDocHostUIHandlerImpl)
;#-------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_UpdateUI(*that.IDocHostUIHandlerImpl)
;#---------------------------------------------------------------------
  ProcedureReturn #S_OK
EndProcedure

Procedure.i IDocHostUIHandlerImpl_EnableModeless(*that.IDocHostUIHandlerImpl, fEnable)
;#------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_OnDocWindowActivate(*that.IDocHostUIHandlerImpl, fActivate)
;#-------------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_OnFrameWindowActivate(*that.IDocHostUIHandlerImpl, fActivate)
;#---------------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_ResizeBorder(*that.IDocHostUIHandlerImpl, prcBorder, pUIWindow, fFrameWindow)
;#-------------------------------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_TranslateAccelerator(*that.IDocHostUIHandlerImpl, lpMsg, pguidCmdGroup, nCmdID)
;#---------------------------------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_GetOptionKeyPath(*that.IDocHostUIHandlerImpl, pchKey, dw)
;#-----------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_GetDropTarget(*that.IDocHostUIHandlerImpl, pDropTarget, ppDropTarget)
;#-----------------------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i IDocHostUIHandlerImpl_GetExternal(*that.IDocHostUIHandlerImpl, ppDispatch.i)
;#--------------------------------------------------------------------------------------

               If ppDispatch <> #Null

                         PokeI(ppDispatch, *that\External)

                         If *that\External <> #Null

                                   *that\External\AddRef()
                                   ProcedureReturn #S_OK
                         EndIf
               EndIf

               ProcedureReturn #S_FALSE
EndProcedure

Procedure.i IDocHostUIHandlerImpl_TranslateUrl(*that.IDocHostUIHandlerImpl, dwTranslate, pchURLIn, ppchURLOut)
;#------------------------------------------------------------------------------------------------------------

               ProcedureReturn #S_FALSE
EndProcedure

Procedure.i IDocHostUIHandlerImpl_FilterDataObject(*that.IDocHostUIHandlerImpl, pDO, ppDORet)
;#-------------------------------------------------------------------------------------------

               ProcedureReturn #S_FALSE
EndProcedure

Procedure CreateDocHostUIHandler(External.IDispatch)
;#--------------------------------------------------
Protected *that.IDocHostUIHandlerImpl = AllocateMemory(SizeOf(IDocHostUIHandlerImpl))

               If #Null <> *that

                         *that\VTable = ?IDocHostUIHandlerImplFunctionTable
                         *that\RefCount = 1

                         If External <> #Null

                                   External\AddRef()
                         EndIf

                         *that\External = External
               EndIf

               ProcedureReturn *that
EndProcedure

Procedure.i ExternalIDispatchImpl_QueryInterface(*that.ExternalIDispatchImpl, riid.i, ppObj.i)
;#--------------------------------------------------------------------------------------------
Protected hresult.i = #E_NOINTERFACE
Protected TmpUnkown.IUnknown = *that

               If ppObj <> #Null And riid <> #Null

                         PokeI(ppobj, 0)

                         If CompareMemory(riid, ?IID_IUnkown, SizeOf(IID))

                                 PokeI(ppobj, *that)
                                 TmpUnkown\AddRef()
                                 hresult = #S_OK

                         ElseIf CompareMemory(riid, ?IID_IDispatch, SizeOf(IID))

                                 PokeI(ppobj, *that)
                                 TmpUnkown\AddRef()
                                 hresult = #S_OK
                         EndIf
               EndIf

               ProcedureReturn hresult
EndProcedure

Procedure.i ExternalIDispatchImpl_AddRef(*that.ExternalIDispatchImpl)
;#-------------------------------------------------------------------
                               *that\RefCount = *that\RefCount + 1
               ProcedureReturn *that\RefCount
EndProcedure

Procedure.i ExternalIDispatchImpl_Release(*that.ExternalIDispatchImpl)
;#--------------------------------------------------------------------
Protected iRefCount.i
                          *that\RefCount = *that\RefCount - 1
                               iRefCount = *that\RefCount
                            If iRefCount = 0

                                   FreeMemory(*that)
                            EndIf

               ProcedureReturn iRefCount
EndProcedure

Procedure.i ExternalIDispatchImpl_GetTypeInfoCount(*that.ExternalIDispatchImpl, *pcntInfo.INTEGER)
;#------------------------------------------------------------------------------------------------
               *pcntInfo\i = 0
               ProcedureReturn #S_OK
EndProcedure

Procedure.i ExternalIDispatchImpl_GetTypeInfo(*that.ExternalIDispatchImpl, itinfo, lcid, pptinfo)
;#-----------------------------------------------------------------------------------------------

               ProcedureReturn #E_NOTIMPL
EndProcedure

Procedure.i ExternalIDispatchImpl_GetIDsOfNames(*that.ExternalIDispatchImpl, riid, iPpNames.i, iCntNames.i, lcid, rgdispid.i)
;#---------------------------------------------------------------------------------------------------------------------------
Protected hResult.i = #S_OK
Protected iIndex.i
Protected sName.s

               For iIndex = 0 To iCntNames - 1

                            sName = UCase(PeekS(PeekI(iPpNames + (iIndex * SizeOf(INTEGER))), -1, #PB_Unicode))
                         If sName = "RAISEEVENT"

                                 PokeI(rgdispid + (iIndex * SizeOf(INTEGER)), #DISPID_RAISEEVENT)
                         Else
                                 PokeI(rgdispid + (iIndex * SizeOf(INTEGER)), #DISPID_UNKNOWN)

                                 hResult = #DISP_E_UNKNOWNNAME
                         EndIf

               Next iIndex

               ProcedureReturn hResult
EndProcedure

Procedure.i ExternalIDispatchImpl_Invoke(*that.ExternalIDispatchImpl, iDispid.i, riid, lcid, flags.w, *dispparams.DISPPARAMS, *result.VARIANT, *pexecpinfo, *puArgErr.Long)
;#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Protected   hresult.i = #S_OK
Protected   Dim sArgument.s(1)
Protected.VARIANT TmpArg
Protected iIndex.i

               If iDispid <> #DISPID_RAISEEVENT

                         ProcedureReturn #DISP_E_MEMBERNOTFOUND
               EndIf

               If 0 = #DISPATCH_METHOD & flags

                         ProcedureReturn #DISP_E_MEMBERNOTFOUND
               EndIf

               If *dispparams\cNamedArgs > 0

                         ProcedureReturn #DISP_E_NONAMEDARGS
               EndIf

               If *dispparams\cArgs <> 2

                         ProcedureReturn #DISP_E_BADPARAMCOUNT
               EndIf

               For iIndex = 0 To 1

                         VariantInit_(@TmpArg)

                         If VariantChangeType_(@TmpArg, *dispparams\rgvarg + ((1 - iIndex) * SizeOf(VARIANT)), 0, #VT_BSTR) <> #S_OK

                                   hresult = #DISP_E_TYPEMISMATCH
                                   Break
                         EndIf

                         sArgument(iIndex) = PeekS(TmpArg\bstrVal, -1, #PB_Unicode)
                         VariantClear_(@TmpArg)

               Next iIndex

               If hresult <> #S_OK

                         ProcedureReturn hresult
               EndIf

               If *that\CallbackFunction <> #Null

                         CallFunctionFast(*that\CallbackFunction, @sArgument(0), @sArgument(1))
               EndIf

               If *result <> #Null

                         VariantInit_(*result)
                         *result\vt = #VT_EMPTY
               EndIf

               ProcedureReturn #S_OK
EndProcedure

Procedure CreateExternalDispatch(*CallbackFunction)
;#-------------------------------------------------
Protected *that.ExternalIDispatchImpl = AllocateMemory(SizeOf(ExternalIDispatchImpl))

               If *that <> #Null
                 *that\VTable = ?ExternalIDispatchImplFunctionTable
                 *that\RefCount = 1
                 *that\CallbackFunction = *CallbackFunction
               EndIf
               ProcedureReturn *that
EndProcedure

Procedure GetIWebBrowser2(iGadget.i)
;#----------------------------------
Protected Browser.IWebBrowser2 =  GetWindowLongPtr_(GadgetID(iGadget), #GWL_USERDATA)

               If Browser <> #Null

                         Browser\AddRef()
               EndIf

               ProcedureReturn Browser
EndProcedure

Procedure GetIHTMLDocument2(iGadget.i)
;#------------------------------------
Protected Result.IHTMLDocument2 = #Null
Protected Browser.IWebBrowser2 = GetIWebBrowser2(iGadget)
Protected DocumentDispatch.IDispatch
Protected TmpDocument.IHTMLDocument2

               If Browser <> #Null

                         If Browser\get_Document(@DocumentDispatch) = #S_OK

                                   If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @TmpDocument) = #S_OK

                                             Result = TmpDocument
                                   EndIf

                                   DocumentDispatch\Release()
                         EndIf

                         Browser\Release()
               EndIf

               ProcedureReturn Result
EndProcedure

Procedure SetIDocHostUIHandler(iGadget.i, UIHandler.IDocHostUIHandler)
;#--------------------------------------------------------------------
Protected iResult.i = #False
Protected Document.IHTMLDocument2 = GetIHTMLDocument2(iGadget)
Protected CustomDoc.ICustomDoc

               If Document <> #Null

                         If Document\QueryInterface(?IID_ICustomDoc, @CustomDoc) = #S_OK

                                   CustomDoc\SetUIHandler(UIHandler)
                                   CustomDoc\Release()
                                   iResult = #True
                         EndIf

                         Document\Release()
               EndIf

               ProcedureReturn iResult
EndProcedure

Procedure ScriptRaiseEventCallback(sEventType.s, sEventParam.s)
;#-------------------------------------------------------------
               Select sEventParam

               EndSelect
EndProcedure

Procedure.s ExecuteJavaScript(iGadget.i, sFunction.s, sArgs.s, sSeparator.s)
;#--------------------------------------------------------------------------
Protected iResult.i, iTotal.i, iCnt.i
Protected sResult.s, sMsg.s
Protected *dispID, *bstr_command, *Arguments
Protected Browser.IWebBrowser2
Protected DocumentDispatch.IDispatch, ScriptDispatch.IDispatch
Protected Document.IHTMLDocument
Protected *Arg.VARIANT, varResult.VARIANT
Protected params.DISPPARAMS

               sResult = "ERROR"

                  Browser = GetWindowLongPtr_(GadgetID(iGadget), #GWL_USERDATA)
               If Browser\get_Document(@DocumentDispatch) = #S_OK

                         If DocumentDispatch\QueryInterface(?IID_IHTMLDocument, @Document) = #S_OK

                                   If Document\get_Script(@ScriptDispatch) = #S_OK

                                             *bstr_command = SysAllocString_(sFunction)
                                             iResult = ScriptDispatch\GetIDsOfNames(?IID_NULL, @*bstr_command, 1, 0, @*dispID)

                                             If iResult = #S_OK

                                                        ; parse the arguments
                                                        ;
                                                        If Trim(sArgs) = ""

                                                                      iTotal = 0
                                                                  *Arguments = 0
                                                        Else
                                                                      iTotal = CountString(sArgs, sSeparator)+1
                                                                  *Arguments = AllocateMemory(SizeOf(VARIANT)*iTotal)
                                                                        *Arg = *Arguments

                                                                  For iCnt = 1 To iTotal

                                                                                     *Arg\vt = #VT_BSTR
                                                                                *Arg\bstrVal = SysAllocString_(Trim(StringField(sArgs, iCnt, sSeparator)))
                                                                                *Arg + SizeOf(VARIANT)
                                                                  Next iCnt
                                                        EndIf

                                                        params\cArgs = iTotal
                                                        params\cNamedArgs = 0
                                                        params\rgvarg = *Arguments

                                                           iResult = ScriptDispatch\Invoke(*dispID, ?IID_NULL, 0, #DISPATCH_METHOD, @params, @varResult, 0, 0)
                                                        If iResult = #S_OK

                                                                  sResult = StringFromVARIANT(@varResult)
                                                        Else
                                                                     sMsg = Space(3000)
                                                                  FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, iResult, 0, @sMsg, 3000, 0)
                                                                  sResult = "ERROR: Invoke() " + sMsg
                                                        EndIf

                                                        If *Arguments

                                                                  *Arg.VARIANT = *Arguments

                                                                  For iCnt = 1 To iTotal

                                                                            SysFreeString_(*Arg\bstrVal)
                                                                            *Arg + SizeOf(VARIANT)
                                                                  Next iCnt

                                                                  FreeMemory(*Arguments)
                                                        EndIf

                                             Else
                                                           sMsg = Space(3000)
                                                        FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, iResult, 0, @sMsg, 3000, 0)
                                                        sResult = "ERROR: GetIDsOfNames() "+sMsg

                                             EndIf

                                             SysFreeString_(*bstr_command)
                                             ScriptDispatch\Release()
                                   EndIf

                                   Document\Release()
                         EndIf

                         DocumentDispatch\Release()
               EndIf

               ProcedureReturn sResult
EndProcedure

Procedure.s GetJSVariable(iGadget.i, sName.s)
;#-------------------------------------------
Protected iDispid.i, iResult.i
Protected sResult.s, sMsg.s
Protected *bstr_name
Protected Browser.IWebBrowser2
Protected DocumentDispatch.IDispatch, ScriptDispatch.IDispatch
Protected Document.IHTMLDocument
Protected params.DISPPARAMS
Protected varResult.VARIANT

               sResult = "ERROR"

                  Browser = GetWindowLongPtr_(GadgetID(iGadget), #GWL_USERDATA)
               If Browser\get_Document(@DocumentDispatch) = #S_OK

                         If DocumentDispatch\QueryInterface(?IID_IHTMLDocument, @Document) = #S_OK

                                   If Document\get_Script(@ScriptDispatch) = #S_OK

                                     *bstr_name = SysAllocString_(sName)
                                        iResult = ScriptDispatch\GetIDsOfNames(?IID_NULL, @*bstr_name, 1, 0, @iDispid)

                                             If iResult = #S_OK

                                                        params\cArgs = 0
                                                        params\cNamedArgs = 0

                                                           iResult = ScriptDispatch\Invoke(iDispid, ?IID_NULL, 0, #DISPATCH_PROPERTYGET, @params, @varResult, 0, 0)
                                                        If iResult = #S_OK

                                                                  sResult = StringFromVARIANT(@varResult)
                                                        Else
                                                                     sMsg = Space(3000)
                                                                  FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, iResult, 0, @sMsg, 3000, 0)
                                                                  sResult = "ERROR: Invoke() "+sMsg
                                                        EndIf

                                             Else
                                                           sMsg = Space(3000)
                                                        FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, iResult, 0, @sMsg, 3000, 0)
                                                        sResult = "ERROR: GetIDsOfNames() "+sMsg

                                             EndIf

                                             SysFreeString_(*bstr_name)
                                             ScriptDispatch\Release()
                                   EndIf

                                   Document\Release()
                         EndIf

                         DocumentDispatch\Release()
               EndIf

               ProcedureReturn sResult
EndProcedure

Procedure SetJSVariable(iGadget, sName.s, sVal.s)
;#-----------------------------------------------
Protected.i iSuccess, iDispid, iResult, iDispidNamed
Protected *bstr_name
Protected Browser.IWebBrowser2
Protected DocumentDispatch.IDispatch, ScriptDispatch.IDispatch
Protected Document.IHTMLDocument
Protected varValue.VARIANT
Protected params.DISPPARAMS

                  Browser = GetWindowLongPtr_(GadgetID(iGadget), #GWL_USERDATA)
               If Browser\get_Document(@DocumentDispatch) = #S_OK

                         If DocumentDispatch\QueryInterface(?IID_IHTMLDocument, @Document) = #S_OK

                                   If Document\get_Script(@ScriptDispatch) = #S_OK

                                             *bstr_name = SysAllocString_(sName)
                                                iResult = ScriptDispatch\GetIDsOfNames(?IID_NULL, @*bstr_name, 1, 0, @iDispid)
                                             If iResult = #S_OK

                                                         varValue\vt = #VT_BSTR
                                                    varValue\bstrVal = SysAllocString_(sVal)

                                                                iDispidNamed = -3 ; #DISPID_PROPERTYPUT
                                                                params\cArgs = 1
                                                           params\cNamedArgs = 1
                                                               params\rgvarg = @varValue
                                                    params\rgdispidNamedArgs = @iDispidNamed

                                                       iResult = ScriptDispatch\Invoke(iDispid, ?IID_NULL, 0, #DISPATCH_PROPERTYPUT, @params, 0, 0, 0)
                                                    If iResult = #S_OK

                                                             iSuccess = 1
                                                    EndIf

                                                    SysFreeString_(varValue\bstrVal)

                                             EndIf
                                             SysFreeString_(*bstr_name)

                                             ScriptDispatch\Release()
                                   EndIf

                                   Document\Release()
                         EndIf

                         DocumentDispatch\Release()
               EndIf

               ProcedureReturn iSuccess
EndProcedure

Procedure.i WebGadget_GetHTMLDocument2(iGadget.i)
;#-----------------------------------------------
Protected oBrowser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(iGadget), #GWL_USERDATA)
Protected oDocumentDispatch.IDispatch
Protected oHTMLDocument.IHTMLDocument2
Protected iBusy

               Repeat
                         While WindowEvent(): Delay(0): Wend
                         oBrowser\get_Busy(@iBusy): Delay(10)

               Until iBusy = #VARIANT_FALSE

               If oBrowser

                         If oBrowser\get_document(@oDocumentDispatch) = #S_OK

                                   If oDocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @oHTMLDocument) = #S_OK

                                             oDocumentDispatch\Release()
                                   EndIf
                         EndIf
               EndIf

               ProcedureReturn oHTMLDocument
EndProcedure

Procedure.i WebGadget_GetHTMLDocumentParent(iGadget.i)
;#----------------------------------------------------
Protected oHTMLDocument.IHTMLDocument2 = WebGadget_GetHTMLDocument2 (iGadget)
Protected oWindow.IHTMLWindow2

               If oHTMLDocument

                         oHTMLDocument\get_parentWindow(@oWindow)
               EndIf

               oHTMLDocument\Release()

               ProcedureReturn oWindow
EndProcedure

Procedure.s StringFromVARIANT(*var.VARIANT)
;#-----------------------------------------
 Protected sResult.s

               If VariantChangeType_(*var, *var, $2, #VT_BSTR) = #S_OK

                         sResult = PeekS(*var\bstrVal, PeekL(*var\bstrVal - 4))
                         SysFreeString_(*var\bstrVal)
               Else
                         sResult = "ERROR : Cannot convert VARIANT to String!"
               EndIf

               ProcedureReturn sResult
EndProcedure

Procedure WebGadget_SetFocus(iGadget.i)
;#-------------------------------------
Protected oWindow.IHTMLWindow2 = WebGadget_GetHTMLDocumentParent (iGadget)

               If oWindow

                         oWindow\focus()
                         oWindow\Release()
               EndIf
EndProcedure

Procedure WebGadget_ExecScript (iGadget.i, sScriptCode.s, sScriptLanguage.s = "JavaScript")
;#-----------------------------------------------------------------------------------------
Protected oWindow.IHTMLWindow2 = WebGadget_GetHTMLDocumentParent(iGadget)
Protected tVariant.VARIANT

               If oWindow

                         oWindow\execScript (sScriptCode, sScriptLanguage, @tVariant)
                         oWindow\Release()
               EndIf
EndProcedure

Procedure WebGadget_SetFocusByName(iGadget.i, sFieldName.s)
;#----------------------------------------------------------
Protected sScript.s

               Delay(500)
               sScript = "var elements = document.getElementsByName('" + sFieldName + "');"
               sScript + "for (var i = 0; i < elements.length; ++i)"
               sScript + "{"
               sScript + "if (elements[i].tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "elements[i].focus();"
               sScript + "break;"
               sScript + "}"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure WebGadget_SetFocusByClassName(iGadget.i, sFieldName.s)
;#--------------------------------------------------------------
Protected sScript.s

               Delay(500)
               sScript = "var elements = document.getElementsByClassName('" + sFieldName + "');"
               sScript + "for (var i = 0; i < elements.length; ++i)"
               sScript + "{"
               sScript + "if (elements[i].tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "elements[i].focus();"
               sScript + "break;"
               sScript + "}"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure WebGadget_SetFocusByID (iGadget.i, sFieldName.s)
;#--------------------------------------------------------
Protected sScript.s

               Delay(500)

               sScript = "var elements = document.getElementById('"+ sFieldName + "');"
               sScript + "if (elements.tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "elements.focus();"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure WebGadget_SetTextByID(iGadget.i, sFieldName.s, sText.s)
;#---------------------------------------------------------------
Protected sScript.s

               Delay(500)

               sScript = "var elements = document.getElementById('" + sFieldName + "');"
               sScript + "if (elements.tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "elements.focus();"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure WebGadget_SetTextByName(iGadget.i, sFieldName.s, sText.s)
;#-----------------------------------------------------------------
Protected sScript.s

               Delay(500)

               sScript = "var elements = document.getElementsByName('" + sFieldName + "');"
               sScript + "for (var i = 0; i < elements.length; ++i)"
               sScript + "{"
               sScript + "if (elements[i].tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "elements[i].focus();"
               sScript + "break;"
               sScript + "}"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure WebGadget_SetTextByClassName(iGadget.i, sFieldName.s, sText.s)
;#----------------------------------------------------------------------
Protected sScript.s

               Delay(500)
               sScript = "var elements = document.getElementsByClassName('" + sFieldName + "');"
               sScript + "for (var i = 0; i < elements.length; ++i)"
               sScript + "{"
               sScript + "if (elements[i].tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "elements[i].focus();"
               sScript + "break;"
               sScript + "}"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure Check_SetFocusByName(iGadget.i, sFieldName.s, sVal.s)
;#-------------------------------------------------------------
Protected sScript.s

               Delay(500)
               sScript = "var elements = document.getElementsByName('"+ sFieldName + "');"
               sScript + "for (var i = 0; i < elements.length; ++i)"
               sScript + "{"
               sScript + "if (elements[i].tagName.toLowerCase() == 'input')"
               sScript + "{"
               sScript + "if {elements[i].value() == '" + sVal + "');"
               sScript + "document.title = 'YES';"
               sScript + "break;"
               sScript + "}"
               sScript + "}"
               sScript + "}"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

Procedure WebGadget_SelectLink(iGadget.i, iIndex.i)
;#-------------------------------------------------
Protected sScript.s

               sScript = "var elements = document.all.tags('a')(" + Str(iIndex) + ");"
               sScript + "elements.focus();"

               WebGadget_ExecScript(iGadget, sScript)
EndProcedure

ProcedureDLL SetProxy1(sProxy.s, lPort.i, lFlags.i = #INTERNET_OPEN_TYPE_PROXY)
;#-----------------------------------------------------------------------------
;Set proxy for the current session
;Return 1 if success or 0 if fail

Protected ProxyServer.s = sProxy + ":" + Str(lPort)
Protected PIInfo.INTERNET_PROXY_INFO1

               PIInfo\dwAccessType = lFlags
               PIInfo\lpszProxy = @ProxyServer
               PIInfo\lpszProxyBypass = @""

               If UrlMkSetSessionOption_(#INTERNET_OPTION_PROXY, @PIInfo, SizeOf(INTERNET_PROXY_INFO1), 0) = #S_OK

                       ProcedureReturn #True
               Else
                       ProcedureReturn #False
               EndIf
EndProcedure

Procedure.s WebGadget_Selection(iGadget.i)
;#----------------------------------------
Protected  sUnicodeText.s
Protected       sResult.s
Protected      Document.IHTMLDocument2 = WebGadget_Document(iGadget,?IID_IHTMLDocument2)
Protected     Selection.IHTMLSelectionObject
Protected     TextRange.IDispatch
Protected     bstr_type.i, pUnicodeText.i, dispid_text.i
Protected        params.DISPPARAMS
Protected     varResult.VARIANT

               If Document

                         If Document\get_selection(@Selection) = #S_OK
                         
                                   If Selection\get_type(@bstr_type) = #S_OK And bstr_type
                         
                                        If LCase(PeekS(bstr_type,-1,#PB_Unicode))="text"
                         
                                             If Selection\createRange(@TextRange) = #S_OK And TextRange
                         
                                                       sUnicodeText = Space(10) : PokeS(@sUnicodeText,"text",-1,#PB_Unicode) : pUnicodeText = @sUnicodeText
                         
                                                       If TextRange\GetIDsOfNames(?IID_NULL,@pUnicodeText,1,#LOCALE_SYSTEM_DEFAULT,@dispid_text) = #S_OK
                         
                                                              params\cArgs = 0 : params\cNamedArgs = 0
                         
                                                              If TextRange\Invoke(dispid_text,?IID_NULL,#LOCALE_SYSTEM_DEFAULT,#DISPATCH_PROPERTYGET,@params,@varResult.VARIANT,0,0)=#S_OK
                         
                                                                      If varResult\vt = #VT_BSTR
                         
                                                                                sResult = PeekS(varResult\bstrVal, -1, #PB_Unicode)
                                                                      Else
                                                                                VariantChangeType_(@varResult,@varResult,0,#VT_BSTR)
                                                                      EndIf

                                                                      VariantClear_(@varResult)
                                                             EndIf
                         
                                                       EndIf
                         
                                                       TextRange\Release()
                                             EndIf
                         
                                        EndIf
                         
                                        SysFreeString_(bstr_type)
                         
                                   EndIf
                         
                                   Selection\Release()
                         EndIf
                         
                         Document\Release()
               EndIf

               ProcedureReturn sResult
EndProcedure

Procedure.s WebGadget_CopyText(iGadget.i)
;#---------------------------------------
Protected    sReturn.s
Protected ibstr_text.i
Protected       Body.IHTMLElement
Protected   Document.IHTMLDocument2 = WebGadget_Document(iGadget, ?IID_IHTMLDocument2)

               If Document

                         If Document\get_body(@Body) = #S_OK

                                   If Body\get_innerText(@ibstr_text) = #S_OK And ibstr_text

                                             sReturn = PeekS(ibstr_text,-1, #PB_Unicode) : SysFreeString_(ibstr_text)
                                   EndIf

                                   Body\Release()
                         EndIf

                         Document\Release()
               EndIf

               ProcedureReturn sReturn
EndProcedure

Procedure WaitForWebGadget(iGadget.i, sTo.s)
;#------------------------------------------
Protected  Browser.IWebBrowser2 = GetWindowLongPtr_(GadgetID(iGadget),#GWL_USERDATA)
Protected    iBusy.i = 0, iTime.i = 0
Protected iTimeOut.i = #False
Protected    sLang.s = PfGetLangName(sTo)

               Repeat
                         While WindowEvent() : Wend : Browser\get_Busy(@iBusy)

                         If(iBusy <> 0) : Delay(250) : EndIf
 
                             iTime = iTime + 250
                         If (iTime > 5000) : iTimeOut = #True : PfGoogleTransFail(sLang) : EndIf

               Until ( (iBusy = #VARIANT_FALSE) Or (iTimeOut = #True) )
EndProcedure



DataSection
IID_IHTMLDocument: ; {626FC520-A41E-11CF-A731-00A0C9082637}
  Data.l $626FC520
  Data.w $A41E, $11CF
  Data.b $A7, $31, $00, $A0, $C9, $08, $26, $37

IID_NULL: ; {00000000-0000-0000-0000-000000000000}
  Data.l $00000000
  Data.w $0000, $0000
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection

DataSection
IID_IUnkown: ; 00000000-0000-0000-C000-000000000046
  Data.l $00000000
  Data.w $0000, $0000
  Data.b $C0, $00, $00, $00, $00, $00, $00, $46

IID_IDispatch: ; 00020400-0000-0000-C000-000000000046
  Data.l $00020400
  Data.w $0000, $0000
  Data.b $C0, $00, $00, $00, $00, $00, $00, $46

IID_IHTMLDocument2: ; 332C4425-26CB-11D0-B483-00C04FD90119
  Data.l $332C4425
  Data.w $26CB, $11D0
  Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19

IID_ICustomDoc: ; 3050F3F0-98B5-11CF-BB82-00AA00BDCE0B
  Data.l $3050F3F0
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B

IID_IDocHostUIHandler: ; BD3F23C0-D43E-11CF-893B-00AA00BDCE1A
  Data.l $BD3F23C0
  Data.w $D43E, $11CF
  Data.b $89, $3B, $00, $AA, $00, $BD, $CE, $1A
EndDataSection

DataSection
IDocHostUIHandlerImplFunctionTable:
  Data.i @IDocHostUIHandlerImpl_QueryInterface()
  Data.i @IDocHostUIHandlerImpl_AddRef()
  Data.i @IDocHostUIHandlerImpl_Release()
  Data.i @IDocHostUIHandlerImpl_ShowContextMenu()
  Data.i @IDocHostUIHandlerImpl_GetHostInfo()
  Data.i @IDocHostUIHandlerImpl_ShowUI()
  Data.i @IDocHostUIHandlerImpl_HideUI()
  Data.i @IDocHostUIHandlerImpl_UpdateUI()
  Data.i @IDocHostUIHandlerImpl_EnableModeless()
  Data.i @IDocHostUIHandlerImpl_OnDocWindowActivate()
  Data.i @IDocHostUIHandlerImpl_OnFrameWindowActivate()
  Data.i @IDocHostUIHandlerImpl_ResizeBorder()
  Data.i @IDocHostUIHandlerImpl_TranslateAccelerator()
  Data.i @IDocHostUIHandlerImpl_GetOptionKeyPath()
  Data.i @IDocHostUIHandlerImpl_GetDropTarget()
  Data.i @IDocHostUIHandlerImpl_GetExternal()
  Data.i @IDocHostUIHandlerImpl_TranslateUrl()
  Data.i @IDocHostUIHandlerImpl_FilterDataObject()
EndDataSection

DataSection
ExternalIDispatchImplFunctionTable:
  Data.i @ExternalIDispatchImpl_QueryInterface()
  Data.i @ExternalIDispatchImpl_AddRef()
  Data.i @ExternalIDispatchImpl_Release()
  Data.i @ExternalIDispatchImpl_GetTypeInfoCount()
  Data.i @ExternalIDispatchImpl_GetTypeInfo()
  Data.i @ExternalIDispatchImpl_GetIDsOfNames()
  Data.i @ExternalIDispatchImpl_Invoke()
EndDataSection
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
Post Reply