Requires IE4 or higher.
Supports up to 3 web windows (you can increase)
------------------
Supports up to 3 web windows (you can increase)
Code:
' Used : SDK (atl) samples, [url="http://www.codeguru.com/ieprogram/cwebpage.html"]http://www.codeguru.com/ieprogram/cwebpage.html[/url] and PB implementations, posted by Jose Roca #Compile Exe #Dim All #Include "win32api.inc" #Include "ComObj.Inc" '-------------------------------------------------------- %maxWebBrowsers = 3 Type WebBrowserData hWndParent As Dword hWndIE As Dword pIOleObject As IOleObject Ptr pIConnectionPointContainer As IConnectionPointContainer Ptr pIConnectionPoint As IConnectionPoint Ptr pIOleClientSite As IOleClientSite Ptr pIWebBrowser2 As IWebBrowser2 Ptr dwCookie As Dword Msg As tagMsg szTmpHtmlFile As Asciiz * %MAX_PATH End Type Global szWebBrowserData As String '-------------------------------------------------------------------------------- Function IOleClientSite_GetVtbl(ByVal IdWB As Dword) As Dword Dim uIOleClientSiteVtbl(%maxWebBrowsers - 1) As Static IOleClientSiteVtbl Dim uIOleClientSite(%maxWebBrowsers - 1) As Static IOleClientSite If uIOleClientSite(IdWB - 1).lpVtbl = 0 Then uIOleClientSite(IdWB - 1).lpVtbl = VarPtr(uIOleClientSiteVtbl(IdWB - 1)) uIOleClientSiteVtbl(IdWB - 1).AddRef = CodePtr(IOleClientSite_AddRef) uIOleClientSiteVtbl(IdWB - 1).Release = CodePtr(IOleClientSite_Release) uIOleClientSiteVtbl(IdWB - 1).SaveObject = CodePtr(IOleClientSite_SaveObject) uIOleClientSiteVtbl(IdWB - 1).GetMoniker = CodePtr(IOleClientSite_GetMoniker) uIOleClientSiteVtbl(IdWB - 1).GetContainer = CodePtr(IOleClientSite_GetContainer) uIOleClientSiteVtbl(IdWB - 1).ShowObject = CodePtr(IOleClientSite_ShowObject) uIOleClientSiteVtbl(IdWB - 1).OnShowWindow = CodePtr(IOleClientSite_OnShowWindow) uIOleClientSiteVtbl(IdWB - 1).RequestNewObjectLayout = CodePtr(IOleClientSite_RequestNewObjectLayout) Select Case As Long IdWB Case 1 : uIOleClientSiteVtbl(IdWB - 1).QueryInterface = CodePtr(IOleClientSite_QueryInterface1) Case 2 : uIOleClientSiteVtbl(IdWB - 1).QueryInterface = CodePtr(IOleClientSite_QueryInterface2) Case 3 : uIOleClientSiteVtbl(IdWB - 1).QueryInterface = CodePtr(IOleClientSite_QueryInterface3) End Select End If Function = VarPtr(uIOleClientSite(IdWB - 1)) End Function '-------------------------------------------------------------------------------- Function IOleInPlaceSite_GetVtbl (ByVal IdWB As Dword) As Dword Dim uIOleInPlaceSiteVtbl(%maxWebBrowsers - 1) As Static IOleInPlaceSiteVtbl Dim uIOleInPlaceSite (%maxWebBrowsers - 1) As Static IOleInPlaceSite If uIOleInPlaceSite(IdWB - 1).lpVtbl = 0 Then uIOleInPlaceSite(IdWB - 1).lpVtbl = VarPtr(uIOleInPlaceSiteVtbl(IdWB - 1)) uIOleInPlaceSiteVtbl(IdWB - 1).QueryInterface = CodePtr(IOleInPlaceSite_QueryInterface) uIOleInPlaceSiteVtbl(IdWB - 1).AddRef = CodePtr(IOleInPlaceSite_AddRef) uIOleInPlaceSiteVtbl(IdWB - 1).Release = CodePtr(IOleInPlaceSite_Release) uIOleInPlaceSiteVtbl(IdWB - 1).ContextSensitiveHelp = CodePtr(IOleInPlaceSite_ContextSensitiveHelp) uIOleInPlaceSiteVtbl(IdWB - 1).CanInPlaceActivate = CodePtr(IOleInPlaceSite_CanInPlaceActivate) uIOleInPlaceSiteVtbl(IdWB - 1).OnInPlaceActivate = CodePtr(IOleInPlaceSite_OnInPlaceActivate) uIOleInPlaceSiteVtbl(IdWB - 1).OnUIActivate = CodePtr(IOleInPlaceSite_OnUIActivate) uIOleInPlaceSiteVtbl(IdWB - 1).GetWindowContext = CodePtr(IOleInPlaceSite_GetWindowContext) uIOleInPlaceSiteVtbl(IdWB - 1).Scroll = CodePtr(IOleInPlaceSite_Scroll) uIOleInPlaceSiteVtbl(IdWB - 1).OnUIDeactivate = CodePtr(IOleInPlaceSite_OnUIDeactivate) uIOleInPlaceSiteVtbl(IdWB - 1).OnInPlaceDeactivate = CodePtr(IOleInPlaceSite_OnInPlaceDeactivate) uIOleInPlaceSiteVtbl(IdWB - 1).DeactivateAndUndo = CodePtr(IOleInPlaceSite_DeactivateAndUndo) uIOleInPlaceSiteVtbl(IdWB - 1).DeactivateAndUndo = CodePtr(IOleInPlaceSite_DeactivateAndUndo) Select Case As Long IdWB Case 1 : uIOleInPlaceSiteVtbl(IdWB - 1).GetWindow = CodePtr(IOleInPlaceSite_GetWindow1) uIOleInPlaceSiteVtbl(IdWB - 1).OnPosRectChange = CodePtr(IOleInPlaceSite_OnPosRectChange1) Case 2 : uIOleInPlaceSiteVtbl(IdWB - 1).GetWindow = CodePtr(IOleInPlaceSite_GetWindow2) uIOleInPlaceSiteVtbl(IdWB - 1).OnPosRectChange = CodePtr(IOleInPlaceSite_OnPosRectChange2) Case 3 : uIOleInPlaceSiteVtbl(IdWB - 1).GetWindow = CodePtr(IOleInPlaceSite_GetWindow3) uIOleInPlaceSiteVtbl(IdWB - 1).OnPosRectChange = CodePtr(IOleInPlaceSite_OnPosRectChange3) End Select End If Function = VarPtr(uIOleInPlaceSite(IdWB - 1)) End Function '-------------------------------------------------------------------------------- Function DWebBrowserEvents2_GetVtbl (ByVal IdWB As Dword) As Dword Dim uDWebBrowserEvents2Vtbl(%maxWebBrowsers - 1) As Static DWebBrowserEvents2Vtbl Dim uDWebBrowserEvents2(%maxWebBrowsers - 1) As Static DWebBrowserEvents2 If uDWebBrowserEvents2(IdWB - 1).lpVtbl = 0 Then uDWebBrowserEvents2(IdWB - 1).lpVtbl = VarPtr(uDWebBrowserEvents2Vtbl(IdWB - 1)) uDWebBrowserEvents2Vtbl(IdWB - 1).AddRef = CodePtr(DWebBrowserEvents2_AddRef) uDWebBrowserEvents2Vtbl(IdWB - 1).Release = CodePtr(DWebBrowserEvents2_Release) uDWebBrowserEvents2Vtbl(IdWB - 1).GetTypeInfoCount = CodePtr(DWebBrowserEvents2_GetTypeInfoCount) uDWebBrowserEvents2Vtbl(IdWB - 1).GetTypeInfo = CodePtr(DWebBrowserEvents2_GetTypeInfo) uDWebBrowserEvents2Vtbl(IdWB - 1).GetIDsOfNames = CodePtr(DWebBrowserEvents2_GetIDsOfNames) Select Case As Long IdWB Case 1 : uDWebBrowserEvents2Vtbl(IdWB - 1).QueryInterface = CodePtr(DWebBrowserEvents2_QueryInterface1) uDWebBrowserEvents2Vtbl(IdWB - 1).Invoke = CodePtr(DWebBrowserEvents2_Invoke1) Case 2 : uDWebBrowserEvents2Vtbl(IdWB - 1).QueryInterface = CodePtr(DWebBrowserEvents2_QueryInterface2) uDWebBrowserEvents2Vtbl(IdWB - 1).Invoke = CodePtr(DWebBrowserEvents2_Invoke2) Case 3 : uDWebBrowserEvents2Vtbl(IdWB - 1).QueryInterface = CodePtr(DWebBrowserEvents2_QueryInterface3) uDWebBrowserEvents2Vtbl(IdWB - 1).Invoke = CodePtr(DWebBrowserEvents2_Invoke3) End Select End If Function = VarPtr(uDWebBrowserEvents2(IdWB - 1)) End Function '-------------------------------------------------------------------------------- Function IOleInPlaceSite_QueryInterface (ByVal This As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword ppVObj = 0: Function = %E_NOINTERFACE End Function Function IOleInPlaceSite_AddRef (ByVal This As Dword) As Dword Function = 1 End Function Function IOleInPlaceSite_Release (ByVal This As Dword) As Dword Function = 1 End Function Function IOleInPlaceSite_GetWindow1 (ByVal This As Dword, ByRef hwnd As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr pWebBrowserData = StrPtr(szWebBrowserData) hWnd = @pWebBrowserData[0].hWndIE End Function Function IOleInPlaceSite_GetWindow2 (ByVal This As Dword, ByRef hwnd As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr pWebBrowserData = StrPtr(szWebBrowserData) hWnd = @pWebBrowserData[1].hWndIE End Function Function IOleInPlaceSite_GetWindow3 (ByVal This As Dword, ByRef hwnd As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr pWebBrowserData = StrPtr(szWebBrowserData) hWnd = @pWebBrowserData[2].hWndIE End Function Function IOleInPlaceSite_ContextSensitiveHelp (ByVal This As Dword, ByVal fEnterMode As Long) As Dword Function = %E_NOTIMPL End Function Function IOleInPlaceSite_CanInPlaceActivate (ByVal This As Dword) As Dword Function = %S_OK End Function Function IOleInPlaceSite_OnInPlaceActivate (ByVal This As Dword) As Dword Function = %S_OK End Function Function IOleInPlaceSite_OnUIActivate (ByVal This As Dword) As Dword Function = %S_OK End Function Function IOleInPlaceSite_GetWindowContext (ByVal This As Dword, ByVal ppFrame As Dword, ppDoc As Dword, rcPosRect As RECT, rcClipRect As RECT, ByVal lpFrameInfo As Dword) As Dword Function = %E_NOTIMPL End Function Function IOleInPlaceSite_Scroll (ByVal This As Dword, ByVal scrollExtantX As Dword, ByVal scrollExtantY As Dword) As Dword Function = %E_NOTIMPL End Function Function IOleInPlaceSite_OnUIDeactivate (ByVal This As Dword, ByVal fUndoable As Long) As Dword Function = %S_OK End Function Function IOleInPlaceSite_OnInPlaceDeactivate (ByVal This As Dword) As Dword Function = %S_OK End Function Function IOleInPlaceSite_DiscardUndoState (ByVal This As Dword) As Dword Function = %E_NOTIMPL End Function Function IOleInPlaceSite_DeactivateAndUndo (ByVal This As Dword) As Dword Function = %E_NOTIMPL End Function Function IOleInPlaceSite_OnPosRectChange1 (ByVal This As Dword, ByRef rcPosRect As RECT) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim IID_IOleInPlaceObject As Local Guid Dim pIOleInPlaceObject As Local IOleInPlaceObject Ptr pWebBrowserData = StrPtr(szWebBrowserData) IID_IOleInPlaceObject = $IID_IOleInPlaceObject Call Dword @pWebBrowserData[0].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[0].pIOleObject, IID_IOleInPlaceObject, pIOleInPlaceObject) Call Dword @[email protected] Using ComFunction2 (ByVal pIOleInPlaceObject, rcPosRect, rcPosRect) Call Dword @[email protected] Using ComFunction0 (ByVal pIOleInPlaceObject) End Function Function IOleInPlaceSite_OnPosRectChange2 (ByVal This As Dword, ByRef rcPosRect As RECT) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim IID_IOleInPlaceObject As Local Guid Dim pIOleInPlaceObject As Local IOleInPlaceObject Ptr pWebBrowserData = StrPtr(szWebBrowserData) IID_IOleInPlaceObject = $IID_IOleInPlaceObject Call Dword @pWebBrowserData[1].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[1].pIOleObject, IID_IOleInPlaceObject, pIOleInPlaceObject) Call Dword @[email protected] Using ComFunction2 (ByVal pIOleInPlaceObject, rcPosRect, rcPosRect) Call Dword @[email protected] Using ComFunction0 (ByVal pIOleInPlaceObject) End Function Function IOleInPlaceSite_OnPosRectChange3 (ByVal This As Dword, ByRef rcPosRect As RECT) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim IID_IOleInPlaceObject As Local Guid Dim pIOleInPlaceObject As Local IOleInPlaceObject Ptr pWebBrowserData = StrPtr(szWebBrowserData) IID_IOleInPlaceObject = $IID_IOleInPlaceObject Call Dword @pWebBrowserData[2].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[2].pIOleObject, IID_IOleInPlaceObject, pIOleInPlaceObject) Call Dword @[email protected] Using ComFunction2 (ByVal pIOleInPlaceObject, rcPosRect, rcPosRect) Call Dword @[email protected] Using ComFunction0 (ByVal pIOleInPlaceObject) End Function '-------------------------------------------------------------------------------- Function IOleClientSite_QueryInterface1 (ByVal this As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword Select Case riid Case $IID_IOleInPlaceSite : ppvObj = IOleInPlaceSite_GetVtbl(1) : Function = %S_OK Case Else : ppVObj = 0 : Function = %E_NOINTERFACE End Select End Function Function IOleClientSite_QueryInterface2 (ByVal this As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword Select Case riid Case $IID_IOleInPlaceSite : ppvObj = IOleInPlaceSite_GetVtbl(2) : Function = %S_OK Case Else : ppVObj = 0 : Function = %E_NOINTERFACE End Select End Function Function IOleClientSite_QueryInterface3 (ByVal this As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword Select Case riid Case $IID_IOleInPlaceSite : ppvObj = IOleInPlaceSite_GetVtbl(3) : Function = %S_OK Case Else : ppVObj = 0 : Function = %E_NOINTERFACE End Select End Function Function IOleClientSite_AddRef (ByVal this As Dword) As Dword Function = 1 End Function Function IOleClientSite_Release (ByVal this As Dword) As Dword Function = 1 End Function Function IOleClientSite_SaveObject (ByVal this As Dword) As Dword Function = %E_NOTIMPL End Function Function IOleClientSite_GetMoniker (ByVal this As Dword, ByVal dwAssign As Dword, ByVal dwWhichMoniker As Dword, ByRef ppmk As Dword) As Dword Function = %E_NOTIMPL End Function Function IOleClientSite_GetContainer (ByVal this As Dword, ByRef ppContainer As Dword) As Dword ppContainer = 0: Function = %E_NOINTERFACE End Function Function IOleClientSite_ShowObject (ByVal this As Dword) As Dword Function = %NOERROR End Function Function IOleClientSite_OnShowWindow (ByVal this As Dword, ByVal fShow As Integer) As Dword Function = %E_NOTIMPL End Function Function IOleClientSite_RequestNewObjectLayout (ByVal this As Dword) As Dword Function = %E_NOTIMPL End Function '-------------------------------------------------------------------------------- Function DWebBrowserEvents2_QueryInterface1 (ByVal pUnk As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword Select Case riid Case $DIID_DWebBrowserEvents2 : ppvObj = DWebBrowserEvents2_GetVtbl(1): Function = %S_OK Case Else : Function = %E_NOTIMPL End Select End Function Function DWebBrowserEvents2_QueryInterface2 (ByVal pUnk As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword Select Case riid Case $DIID_DWebBrowserEvents2 : ppvObj = DWebBrowserEvents2_GetVtbl(2): Function = %S_OK Case Else : Function = %E_NOTIMPL End Select End Function Function DWebBrowserEvents2_QueryInterface3 (ByVal pUnk As Dword, ByRef riid As Guid, ByRef ppvObj As Dword) As Dword Select Case riid Case $DIID_DWebBrowserEvents2 : ppvObj = DWebBrowserEvents2_GetVtbl(3): Function = %S_OK Case Else : Function = %E_NOTIMPL End Select End Function Function DWebBrowserEvents2_AddRef (ByVal pUnk As Dword) As Dword Function = 1 End Function Function DWebBrowserEvents2_Release (ByVal pUnk As Dword) As Dword Function = 1 End Function Function DWebBrowserEvents2_GetTypeInfoCount (ByVal pUnk As Dword, ByRef pctInfo As Dword) As Dword Function = %E_NOTIMPL End Function Function DWebBrowserEvents2_GetTypeInfo (ByVal pUnk As Dword, ByVal iTinfo As Dword, ByVal lcid As Dword, ByRef pptinfo As Dword) As Dword Function = %E_NOTIMPL End Function Function DWebBrowserEvents2_GetIDsOfNames (ByVal pUnk As Dword, ByRef riid As Guid, ByVal rgszNames As Dword, ByVal cNames As Dword, ByVal lcid As Dword, ByRef rgdispid As Dword) As Dword Function = %E_NOTIMPL End Function %UM_DISPLAYSTRING = %WM_USER + 401 Function DWebBrowserEvents2_Invoke1 (ByVal pUnk As Dword, ByVal dispidMember As Dword, ByRef riid As Guid, _ ByVal lcid As Dword, ByVal wFlags As Word, ByRef pDispparams As DispParams, ByRef pvarResult As Variant, _ ByVal pexcepinfo As Dword, ByRef puArgErr As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim pVariant As Variant Ptr Dim pVariantApi As VariantApi Ptr Dim szUrl As Local String Dim i As Local Dword pWebBrowserData = StrPtr(szWebBrowserData) pVariant = pdispparams.VariantArgs pVariantApi = pVariant Function = %S_OK If VarPtr(pdispparams) Then Select Case As Long dispidMember Case %DISPID_BEFORENAVIGATE2 ' BeforeNavigate2 szURL = Variant$(@pVariant[5]) i = InStr(szUrl, "{") If i Then @pVariantApi.vd.@pboolVal = -1 PostMessage @pWebBrowserData[0].hWndParent, %UM_DISPLAYSTRING, Val(Mid$(szUrl, i + 1)), 1 End If End Select End If End Function Function DWebBrowserEvents2_Invoke2 (ByVal pUnk As Dword, ByVal dispidMember As Dword, ByRef riid As Guid, _ ByVal lcid As Dword, ByVal wFlags As Word, ByRef pDispparams As DispParams, ByRef pvarResult As Variant, _ ByVal pexcepinfo As Dword, ByRef puArgErr As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim pVariant As Variant Ptr Dim pVariantApi As VariantApi Ptr Dim szUrl As Local String Dim i As Local Dword pWebBrowserData = StrPtr(szWebBrowserData) pVariant = pdispparams.VariantArgs pVariantApi = pVariant Function = %S_OK If VarPtr(pdispparams) Then Select Case As Long dispidMember Case %DISPID_BEFORENAVIGATE2 ' BeforeNavigate2 szURL = Variant$(@pVariant[5]) i = InStr(szUrl, "{") If i Then @pVariantApi.vd.@pboolVal = -1 PostMessage @pWebBrowserData[1].hWndParent, %UM_DISPLAYSTRING, Val(Mid$(szUrl, i + 1)), 2 End If End Select End If End Function Function DWebBrowserEvents2_Invoke3 (ByVal pUnk As Dword, ByVal dispidMember As Dword, ByRef riid As Guid, _ ByVal lcid As Dword, ByVal wFlags As Word, ByRef pDispparams As DispParams, ByRef pvarResult As Variant, _ ByVal pexcepinfo As Dword, ByRef puArgErr As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim pVariant As Variant Ptr Dim pVariantApi As VariantApi Ptr Dim szUrl As Local String Dim i As Local Dword pWebBrowserData = StrPtr(szWebBrowserData) pVariant = pdispparams.VariantArgs pVariantApi = pVariant Function = %S_OK If VarPtr(pdispparams) Then Select Case As Long dispidMember Case %DISPID_BEFORENAVIGATE2 ' BeforeNavigate2 szURL = Variant$(@pVariant[5]) i = InStr(szUrl, "{") If i Then @pVariantApi.vd.@pboolVal = -1 PostMessage @pWebBrowserData[2].hWndParent, %UM_DISPLAYSTRING, Val(Mid$(szUrl, i + 1)), 3 End If End Select End If End Function '-------------------------------------------------------------------------------- Function DisplayHTMLPage (ByVal IdWB As Dword, szUrl As Asciiz) As Dword ' If success, returns %S_OK Dim hResult As Local Dword Dim vtUrl As Local Variant Dim vtFlags As Local Variant Dim vtTargetFrameName As Local Variant Dim vtPostData As Local Variant Dim vtHeaders As Local Variant Dim pWebBrowserData As Local WebBrowserData Ptr pWebBrowserData = StrPtr(szWebBrowserData) vtUrl = szUrl Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction5 (ByVal @pWebBrowserData[IdWB - 1].pIWebBrowser2, vtUrl, vtFlags, vtTargetFrameName, vtPostData, vtHeaders) To hResult Function = hResult End Function '-------------------------------------------------------------------------------- Function DisplayHtmlString (ByVal IdWB As Dword, szTxt As String) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim f As Local Dword pWebBrowserData = StrPtr(szWebBrowserData) f = FreeFile Open @pWebBrowserData[IdWB - 1].szTmpHtmlFile For Output As #f Len = 32768 Print #f, szTxt; Close #f DisplayHtmlPage IdWB, @pWebBrowserData[IdWB - 1].szTmpHtmlFile End Function '-------------------------------------------------------------------------------- Function ResizeBrowser (ByVal IdWB As Dword, ByVal dwWidth As Dword, dwHeight As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim hResult As Local Dword pWebBrowserData = StrPtr(szWebBrowserData) Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected]_Left Using ComFunction1 (ByVal @pWebBrowserData[IdWB - 1].pIWebBrowser2, ByVal 0) To hResult : If hResult <> %S_OK Then Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected]_Top Using ComFunction1 (ByVal @pWebBrowserData[IdWB - 1].pIWebBrowser2, ByVal 0) To hResult : If hResult <> %S_OK Then Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected]_Width Using ComFunction1 (ByVal @pWebBrowserData[IdWB - 1].pIWebBrowser2, ByVal dwWidth) To hResult : If hResult <> %S_OK Then Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected]_Height Using ComFunction1 (ByVal @pWebBrowserData[IdWB - 1].pIWebBrowser2, ByVal dwHeight) To hResult: If hResult <> %S_OK Then Exit Do Exit Do Loop Function = hResult End Function '-------------------------------------------------------------------------------- Function EmbedBrowserObject (ByVal IdWB As Dword, ByVal hDlg As Dword, ByVal IdIE As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim nCalls As Static Dword Dim CLSID_WebBrowser As Local Guid Dim IID_IOleObject As Local Guid Dim IID_IWebBrowser2 As Local Guid Dim DIID_DWebBrowserEvents2 As Local Guid Dim IID_IConnectionPointContainer As Local Guid Dim hResult As Local Dword Dim rc As Local RECT Dim Er As Local Dword Dim szPath As Asciiz * %MAX_PATH If Len(szWebBrowserData) = 0 Then szWebBrowserData = String$(%maxWebBrowsers * SizeOf(WebBrowserData), 0) pWebBrowserData = StrPtr(szWebBrowserData) CLSID_WebBrowser = $CLSID_WebBrowser IID_IOleObject = $IID_IOleObject IID_IWebBrowser2 = $IID_IWebBrowser2 DIID_DWebBrowserEvents2 = $DIID_DWebBrowserEvents2 IID_IConnectionPointContainer = $IID_IConnectionPointContainer @pWebBrowserData[IdWB - 1].hWndParent = hDlg @pWebBrowserData[IdWB - 1].hWndIE = GetDlgItem(hDlg, IdIE) GetModuleFileName GetModuleHandle(""), szPath, SizeOf(szPath) Incr nCalls: @pWebBrowserData[IdWB - 1].szTmpHtmlFile = Left$(szPath, InStr(-1, szPath, "\")) + "~" + Format$(nCalls) + ".htm" Do hResult = CoCreateInstance(CLSID_WebBrowser, ByVal 0, ByVal %CLSCTX_INPROC, IID_IOleObject, @pWebBrowserData[IdWB - 1].pIOleObject) If hResult <> %S_OK Then @pWebBrowserData[IdWB - 1].pIOleObject = 0: Er = 1: Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[IdWB - 1].pIOleObject, IID_IWebBrowser2, @pWebBrowserData[IdWB - 1].pIWebBrowser2) To hResult If hResult <> %S_OK Then @pWebBrowserData[IdWB - 1].pIWebBrowser2 = 0: Er = 1: Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[IdWB - 1].pIOleObject, IID_IConnectionPointContainer, @pWebBrowserData[IdWB - 1].pIConnectionPointContainer) To hResult If hResult <> %S_OK Then @pWebBrowserData[IdWB - 1].pIConnectionPointContainer = 0: Er = 1: Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[IdWB - 1].pIConnectionPointContainer, DIID_DWebBrowserEvents2, _ @pWebBrowserData[IdWB - 1].pIConnectionPoint) To hResult If hResult <> %S_OK Then @pWebBrowserData[IdWB - 1].pIConnectionPoint = 0: Er = 1: Exit Do Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction2 (ByVal @pWebBrowserData[IdWB - 1].pIConnectionPoint, ByVal DWebBrowserEvents2_GetVtbl(IdWB), @pWebBrowserData[IdWB - 1].dwCookie) To hResult If hResult <> %S_OK Then @pWebBrowserData[IdWB - 1].dwCookie = 0: Er = 1: Exit Do @pWebBrowserData[IdWB - 1].pIOleClientSite = IOleClientSite_GetVtbl(IdWB) Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction1 (ByVal @pWebBrowserData[IdWB - 1].pIOleObject, ByVal @pWebBrowserData[IdWB - 1].pIOleClientSite) To HResult GetClientRect @pWebBrowserData[IdWB - 1].hWndIE, rc Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction6 (ByVal @pWebBrowserData[IdWB - 1].pIOleObject, _ ByVal %OLEIVERB_INPLACEACTIVATE, @pWebBrowserData[IdWB - 1].Msg, ByVal @pWebBrowserData[IdWB - 1].pIOleClientSite, ByVal 0, ByVal @pWebBrowserData[IdWB - 1].hWndIE, rc) To hResult If hResult <> %S_OK Then Er = 1: Exit Do Exit Do Loop Function = Er End Function Function UnEmbedBrowserObject (ByVal IdWB As Dword) As Dword Dim pWebBrowserData As Local WebBrowserData Ptr Dim hResult As Local Dword pWebBrowserData = StrPtr(szWebBrowserData) If @pWebBrowserData[IdWB - 1].dwCookie Then Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction1 _ (ByVal @pWebBrowserData[IdWB - 1].pIConnectionPoint, ByVal @pWebBrowserData[IdWB - 1].dwCookie) To hResult: @pWebBrowserData[IdWB - 1].dwCookie = 0 If @pWebBrowserData[IdWB - 1].pIConnectionPoint Then Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction0 _ (ByVal @pWebBrowserData[IdWB - 1].pIConnectionPoint) To hResult : @pWebBrowserData[IdWB - 1].pIConnectionPoint = 0 If @pWebBrowserData[IdWB - 1].pIConnectionPointContainer Then Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction0 _ (ByVal @pWebBrowserData[IdWB - 1].pIConnectionPointContainer) To hResult : @pWebBrowserData[IdWB - 1].pIConnectionPointContainer = 0 If @pWebBrowserData[IdWB - 1].pIOleObject Then Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction0 _ (ByVal @pWebBrowserData[IdWB - 1].pIOleObject) To hResult : @pWebBrowserData[IdWB - 1].pIOleObject = 0 If @pWebBrowserData[IdWB - 1].pIWebBrowser2 Then Call Dword @pWebBrowserData[IdWB - 1].@[email protected] Using ComFunction0 _ (ByVal @pWebBrowserData[IdWB - 1].pIWebBrowser2) To hResult : @pWebBrowserData[IdWB - 1].pIWebBrowser2 = 0 Kill @pWebBrowserData[IdWB - 1].szTmpHtmlFile End Function '-------------------------------------------------------------------------------- Function MakeHtmlPage (ByVal PageId As Dword) As String Select Case As Long PageId Case 1 : Function = "<center><b>Popular web sites</b></center><br><br>" + $CrLf + _ "<a href=""{2}"">Power Basic</a></a>.<br>" + $CrLf + _ "<a href=""{3}"">The rest" Case 2 : Function = "<a href=""{4}"">Microsoft</a></a>.<br>" + $CrLf + _ "<a href=""{5}"">Altavista</a></a>.<br>" + $CrLf + _ "<p align=right><a href=""{6}"">Back</a></a>.</p>" End Select End Function '-------------------------------------------------------------------------------- %ID_IE1 = 101 %ID_IE2 = 102 %ID_PREVIEW = 201 %ID_PRINT = 202 %ID_SAVEAS = 203 CallBack Function DlgProc Dim dlgWidth As Local Dword Dim dlgHeight As Local Dword Dim rc As Local RECT Dim pWebBrowserData As Local WebBrowserData Ptr Select Case CbMsg Case %WM_INITDIALOG Control Add Label, CbHndl, %ID_IE1, "", 5, 5, 50, 50, %SS_SUNKEN Control Add Label, CbHndl, %ID_IE2, "", 5, 55, 50, 90, %SS_SUNKEN Control Add Button, CbHndl, %ID_PREVIEW, "Preview", 145, 30, 45, 15 Control Add Button, CbHndl, %ID_PRINT, "Print", 145, 50, 45, 15 Control Add Button, CbHndl, %ID_SAVEAS, "Save as ...", 145, 70, 45, 15 If EmbedBrowserObject (1, CbHndl, %ID_IE1) Or EmbedBrowserObject (2, CbHndl, %ID_IE2) Then _ Dialog Post CbHndl, %WM_SYSCOMMAND, %SC_CLOSE, 0: Exit Function DisplayHtmlPage 1, "http://www.powerbasic.com" DisplayHtmlString 2, MakeHtmlPage(1) Dialog Show State CbHndl, %SW_MAXIMIZE Case %WM_SIZE Dialog Get Client CbHndl To dlgWidth, dlgHeight If dlgHeight < 150 Or dlgWidth < 200 Then Exit Function Control Set Size CbHndl, %ID_IE1, dlgWidth - 60, dlgHeight - 100 Control Set Loc CbHndl, %ID_IE2, 5, dlgHeight - 95 Control Set Size CbHndl, %ID_IE2, dlgWidth - 60, 90 Control Set Loc CbHndl, %ID_PREVIEW, dlgWidth - 50, 30 Control Set Loc CbHndl, %ID_PRINT, dlgWidth - 50, 50 Control Set Loc CbHndl, %ID_SAVEAS, dlgWidth - 50, 70 GetClientRect GetDlgItem(CbHndl, %ID_IE1), rc ResizeBrowser 1, rc.nRight, rc.nBottom GetClientRect GetDlgItem(CbHndl, %ID_IE2), rc ResizeBrowser 2, rc.nRight, rc.nBottom Case %UM_DISPLAYSTRING Select Case As Long CbWParam Case 2 : DisplayHtmlPage 1, "http://www.powerbasic.com/support/forums/Ultimate.cgi" Case 3 : DisplayHtmlString 2, MakeHtmlPage(2) Case 4 : DisplayHtmlPage 1, "http://www.microsoft.com" Case 5 : DisplayHtmlPage 1, "http://www.av.com" Case 6 : DisplayHtmlString 2, MakeHtmlPage(1) End Select Case %WM_COMMAND pWebBrowserData = StrPtr(szWebBrowserData) Select Case As Long CbCtl Case %ID_PRINT Select Case As Long CbCtlMsg Case %BN_CLICKED, 1 Call Dword @pWebBrowserData[0].@pI[email protected] Using ComFunction4 (ByVal @pWebBrowserData[0].pIWebBrowser2, ByVal %OLECMDID_PRINT, ByVal 0, ByVal 0, ByVal 0) End Select Case %ID_PREVIEW Select Case As Long CbCtlMsg Case %BN_CLICKED, 1 Call Dword @pWebBrowserData[0].@[email protected] Using ComFunction4 (ByVal @pWebBrowserData[0].pIWebBrowser2, ByVal %OLECMDID_PRINTPREVIEW, ByVal 0, ByVal 0, ByVal 0) End Select Case %ID_SAVEAS Select Case As Long CbCtlMsg Case %BN_CLICKED, 1 Call Dword @pWebBrowserData[0].@[email protected] Using ComFunction4 (ByVal @pWebBrowserData[0].pIWebBrowser2, ByVal %OLECMDID_SAVEAS, ByVal 0, ByVal 0, ByVal 0) End Select End Select Case %WM_DESTROY UnEmbedBrowserObject 1 UnEmbedBrowserObject 2 End Select End Function Function PBMain Dim hDlg As Local Dword Dialog New 0, " WebBrowser Experiment ", , , 300, 200, %WS_OVERLAPPEDWINDOW Or %DS_MODALFRAME Or %WS_CLIPSIBLINGS To hDlg Dialog Show State hDlg, %SW_HIDE Dialog Show Modal hDlg Call DlgProc End Function
------------------
Comment