Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebBrowser: Создание в качестве контрола без VCL 
:(
    Опции темы
JSman
Дата 16.11.2007, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



Здравствуйте! Все-таки решил обратиться на родной форум. Сам решения не смог найти.. 
Очень не хочу использовать VCL и KOL по своей идеологии... 

Задача звучит просто: Программа должна создать окно, в нем браузер (как контрол) .  Но на практике что-то не везет..
Вот, что я сделал..
Код


function CoInitialize(pvReserved: Pointer): HResult; stdcall; external
  'ole32.dll' name 'CoInitialize';

procedure CoUninitialize; stdcall; external 'ole32.dll' name 'CoUninitialize';

function CoCreateInstance(const clsid: TGUID; unkOuter: IUnknown;
  dwClsContext: Longint; const iid: TGUID; out pv): HResult; stdcall; external
  'ole32.dll' name 'CoCreateInstance';


const 
  CLSCTX_INPROC_SERVER = 1;
  CLSCTX_INPROC_HANDLER = 2;
  CLSCTX_LOCAL_SERVER = 4;
  CLSCTX_REMOTE_SERVER = 16;
  CLSCTX_NO_CODE_DOWNLOAD = 400;
  CLSCTX_NO_FAILURE_LOG = 4000;
  CLSCTX_SERVER = (CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER or  CLSCTX_REMOTE_SERVER) ;
  CLSCTX_ALL  = CLSCTX_INPROC_HANDLER or CLSCTX_SERVER;


procedure myWB;
  var
        CLSID: TGUID;
        WB:IWebBrowser2;
        url, null:OleVariant;
begin


 null:=0;
 url:='about:blank';

    Coinitialize(nil);

  if (CoCreateInstance(IEID, nil, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, WB)<> 0)
then
  begin
    CoUninitialize;
    exit;
  end;

  WB.Left :=0;
  WB.Height:=100;
  WB.Top :=0;
  WB.Width:=100;
  WB.Visible:=true;
  WB.Navigate2(url, null, null, null, null);

 end;


далее думаю применить SetParent и SetWindowPos...
PM ICQ   Вверх
JSman
Дата 18.11.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



Наконец-то нашел способ создания контролов. через ole. сделал по инструкциям и не пошло...

думаю, что наиболее простым способом будет сделать перевод из кода асма в дельфи. большую часть кодазанимает описание интерфейсов. может быть кто-нибудь сможет помочь?

Код

; 
; KaKeeware is proud to present the smallest Web Browser in the world 
; Author: Adam Blaszczyk (c) 2004
; WWW:    http://www.kakeeware.com     
; e-mail: adam[]kakeeware[]com
;
; Feel free to use this source code in your applications, but remember
; that credits are always welcomed :-)                            
;
; This source code is based on the program that I wrote for my book 
; about Win32ASM that was published by Helion in 2004:
; http://helion.pl/ksiazki/asmwin.htm
;
.586                        
.MODEL FLAT,STDCALL

 OLEIVERB_INPLACEACTIVATE    =-5
 
 INCLUDE windows.inc

 INV  equ INVOKE
 OFS  equ OFFSET
 BPTR equ BYTE PTR
 WPTR equ WORD PTR
 DPTR equ DWORD PTR

 MOM  MACRO t:REQ, s:REQ
    push   s
    pop    t
 ENDM

 MOP   MACRO t:REQ, c:REQ
    mov  eax,t
    MOM  [eax],c
 ENDM

 XID MACRO gn,gv
  ;.data
  gn label dword
   xx SUBSTR <gv>,2,8
   dd @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,11,4
   dw @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,16,4
   dw @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,21,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,23,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,26,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,28,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,30,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,32,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,34,2
   db @CatStr(<0>,%xx,<h>)
   xx SUBSTR <gv>,36,2
   db @CatStr(<0>,%xx,<h>)
 ENDM

 INCLUDEX  MACRO plik:REQ
     include    plik.inc
     includelib plik.lib
 ENDM

 INCX MACRO mods:VARARG
   FOR c,<mods>
    INCLUDEX c
   ENDM
 ENDM

 INCX    kernel32,user32,ole32

 UNI MACRO un,nv
   un label dword
   FORC c,<nv>
    dw '&c'
   ENDM
    dw NULL
 ENDM               

 COM MACRO ppv,me,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab,ac,ad,ae,af
    x EQU @InStr(1, <me>, <::>)
    rin SUBSTR <me>,1,x-1
    rme SUBSTR <me>,x+2
    rxx CATSTR rin,<Vtbl>,<.>,rme

     FOR ar, <af,ae,ad,ac,ab,aa,a9,a8,a7,a6,a5,a4,a3,a2,a1,a0>
      IFNB <ar>
       IF @InStr(1,<ar>,<ADDR>) eq 0
         push ar
       ELSE
         txme SUBSTR <ar>,5
         lea eax,txme
         push eax
       ENDIF
      ENDIF
     ENDM
     mov  eax,DPTR [ppv]   
     mov  eax,[eax]        
     mov  eax,[eax.rxx]    
     push ppv              
     call eax              
 ENDM           
 
 OLEINPLACEFRAMEINFO struct
   cb            dd ?
   fMDIApp       dd ?
   hwndFrame     dd ?
   haccel        dd ?
   cAccelEntries dd ?
 OLEINPLACEFRAMEINFO ends

 INTERFACE_DEF_LONG_START MACRO iface
   iface&Vtbl STRUC
   QueryInterface         dd ?
   AddRef                 dd ?
   Release                dd ?
 ENDM

 INTERFACE_DEF_LONG_MET MACRO me:VARARG
   FOR ar, <me>
    IFNB <ar>
      ar dd ?
    ENDIF
   ENDM
 ENDM
 
 INTERFACE_DEF_LONG_END MACRO iface
   iface&Vtbl ENDS

   iface STRUC
     lpVtbl dd ?
   iface ENDS

 ENDM

 INTERFACE_DEF_LONG_START IDispatch
  INTERFACE_DEF_LONG_MET,\
   GetTypeInfoCount,\
   GetTypeInfo,\
   GetIDsOfNames,\
   IDispatch_Invoke
 INTERFACE_DEF_LONG_END IDispatch 

 INTERFACE_DEF_LONG_START IWebBrowser2
 INTERFACE_DEF_LONG_MET,\
   GetTypeInfoCount,\
   GetTypeInfo,\
   GetIDsOfNames,\
   xInvoke,\
   GoBack,\
   GoForward,\
   GoHome,\
   GoSearch,\
   Navigate,\
   Refresh,\
   Refresh2,\
   Stop
 INTERFACE_DEF_LONG_MET,\
   get_Application,\
   get_Parent,\
   get_Container,\
   get_Document,\
   get_TopLevelContainer,\
   get_Type,\
   get_Left,\
   put_Left,\
   get_Top,\
   put_Top,\
   get_Width,\
   put_Width,\
   get_Height,\
   put_Height,\
   get_LocationName
 INTERFACE_DEF_LONG_MET,\
   get_LocationURL,\
   get_Busy,\
   Quit,\
   ClientToWindow,\
   PutProperty,\
   GetProperty,\
   get_Name,\
   get_HWND,\
   get_FullName,\
   get_Path,\
   get_Visible,\
   put_Visible,\
   get_StatusBar,\
   put_StatusBar,\
   get_StatusText,\
   put_StatusText,\
   get_ToolBar
 INTERFACE_DEF_LONG_MET,\
   put_ToolBar,\
   get_MenuBar,\
   put_MenuBar,\
   get_FullScreen,\
   put_FullScreen,\
   Navigate2,\
   QueryStatusWB,\
   ExecWB,\
   ShowBrowserBar,\
   get_ReadyState,\
   get_Offline,\
   put_Offline,\
   get_Silent,\
   put_Silent,\
   get_RegisterAsBrowser,\
   put_RegisterAsBrowser
 INTERFACE_DEF_LONG_MET,\
   get_RegisterAsDropTarget,\
   put_RegisterAsDropTarget,\
   get_TheaterMode,\
   put_TheaterMode,\
   get_AddressBar,\
   put_AddressBar,\
   get_Resizable,\
   put_Resizable
 INTERFACE_DEF_LONG_END IWebBrowser2

 INTERFACE_DEF_LONG_START IOleObject
 INTERFACE_DEF_LONG_MET,\
   SetClientSite,\
   GetClientSite,\
   SetHostNames,\
   Close,\
   SetMoniker,\
   GetMoniker,\
   InitFromData,\
   GetClipboardData,\
   DoVerb,\
   EnumVerbs,\
   Update,\
   IsUpToDate,\
   GetUserClassID,\
   GetUserType,\
   SetExtent,\
   GetExtent,\
   Advise,\
   Unadvise,\
   EnumAdvise,\
   GetMiscStatus,\
   SetColorScheme
 INTERFACE_DEF_LONG_END IOleObject

 INTERFACE_DEF_LONG_START IOleInPlaceObject
 INTERFACE_DEF_LONG_MET,\
    GetWindow,\
    ContextSensitiveHelp,\
    InPlaceDeactivate,\
    UIDeactivate,\
    SetObjectRects,\
    ReactivateAndUndo
 INTERFACE_DEF_LONG_END IOleInPlaceObject

 INTERFACE_DEF_LONG_START IHTMLDocument2
 INTERFACE_DEF_LONG_MET,\
   GetTypeInfoCount,\
   GetTypeInfo,\
   GetIDsOfNames,\
   IHTMLDocument2_Invoke,\
   get_Script,\
   get_all,\
   get_body,\
   get_activeElement,\
   get_images
 INTERFACE_DEF_LONG_MET,\
   get_applets,\
   get_links,\
   get_forms,\
   get_anchors,\
   put_title,\
   get_title,\
   get_scripts,\
   put_designMode,\
   get_designMode
 INTERFACE_DEF_LONG_MET,\
   get_selection,\
   get_readyState,\
   get_frames,\
   get_embeds,\
   get_plugins,\
   put_alinkColor,\
   get_alinkColor,\
   put_bgColor,\
   get_bgColor
 INTERFACE_DEF_LONG_MET,\
   put_fgColor,\
   get_fgColor,\
   put_linkColor,\
   get_linkColor,\
   put_vlinkColor,\
   get_vlinkColor,\
   get_referrer,\
   get_location,\
   get_lastModified
 INTERFACE_DEF_LONG_MET,\
   put_URL,\
   get_URL,\
   put_domain,\
   get_domain,\
   put_cookie,\
   get_cookie,\
   put_expando,\
   get_expando,\
   put_charset
 INTERFACE_DEF_LONG_MET,\
   get_charset,\
   put_defaultCharset,\
   get_defaultCharset,\
   get_mimeType,\
   get_fileSize,\
   get_fileCreatedDate,\
   get_fileModifiedDate,\
   get_fileUpdatedDate,\
   get_security
 INTERFACE_DEF_LONG_MET,\
   get_protocol,\
   get_nameProp,\
   write,\
   writeln,\
   open,\
   close,\
   clear,\
   queryCommandSupported,\
   queryCommandEnabled
 INTERFACE_DEF_LONG_MET,\
   queryCommandState,\
   queryCommandIndeterm,\
   queryCommandText,\
   queryCommandValue,\
   execCommand,\
   execCommandShowHelp,\
   createElement,\
   put_onhelp,\
   get_onhelp
 INTERFACE_DEF_LONG_MET,\
   put_onclick,\
   get_onclick,\
   put_ondblclick,\
   get_ondblclick,\
   put_onkeyup,\
   get_onkeyup,\
   put_onkeydown,\
   get_onkeydown,\
   put_onkeypress
 INTERFACE_DEF_LONG_MET,\
   get_onkeypress,\
   put_onmouseup,\
   get_onmouseup,\
   put_onmousedown,\
   get_onmousedown,\
   put_onmousemove,\
   get_onmousemove,\
   put_onmouseout,\
   get_onmouseout
 INTERFACE_DEF_LONG_MET,\
   put_onmouseover,\
   get_onmouseover,\
   put_onreadystatechange,\
   get_onreadystatechange,\
   put_onafterupdate,\
   get_onafterupdate,\
   put_onrowexit,\
   get_onrowexit,\
   put_onrowenter
 INTERFACE_DEF_LONG_MET,\
   get_onrowenter,\
   put_ondragstart,\
   get_ondragstart,\
   put_onselectstart,\
   get_onselectstart,\
   elementFromPoint,\
   get_parentWindow,\
   get_styleSheets,\
   put_onbeforeupdate
 INTERFACE_DEF_LONG_MET,\
   get_onbeforeupdate,\
   put_onerrorupdate,\
   get_onerrorupdate,\
   toString,\
   createStyleSheet
 INTERFACE_DEF_LONG_END IHTMLDocument2
 
 WM_GO = WM_USER+666
 ID_DLG_MAIN   = 100
 ID_EDIT       = 1000 
 CIEB_CREATE    = 00000001h
 CIEB_RESIZE    = 00000002h
 CIEB_NAVIGATE  = 00000003h
 CIEB_WAITREADY = 00000004h
 CIEB_DESTROY   = 000000FFh
 
;;; .data?
.data?
 hInstance dd ?
 mainHWND  dd ?
 hEdit     dd ?
 msg       MSG<>
 oldAddbarEditWndProc dd ?
 oleExists dd ?
 rcOLE RECT <?>
 ppw    IWebBrowser2       <?>
 ppo    IOleObject         <?>
 ppoipo IOleInPlaceObject  <?>
 szBuf  db 1024 dup(?)
 uszBuf dw 1024 dup(?)

;;; .data
.data
 szAppTitle db "KaKeeware Browser",NULL
 szWWW      db 'http://www.kakeeware.com',NULL
IF BROWSER eq 0
 XID CLSID_WebBrowser       ,'8856F961-340A-11D0-A96B-00C04FD705A2'
ELSE
 XID CLSID_WebBrowser       ,'1339B54C-3453-11D2-93B9-000000000000'
ENDIF 
 
 XID IID_IWebBrowser2       ,'D30C1661-CDAF-11D0-8A3E-00C04FC9E26E'
 XID IID_IOleObject         ,'00000112-0000-0000-C000-000000000046'
 XID IID_IOleInPlaceObject  ,'00000113-0000-0000-C000-000000000046'
 XID IID_IOleInPlaceSite    ,'00000119-0000-0000-C000-000000000046'
 XID IID_IHTMLDocument2     ,'332C4425-26CB-11D0-B483-00C04FD90119'
 UNI navABOUTBLANKURL,<about:blank>
  mIOleClientSite label dword 
   dd OFS mIOleClientSite_QueryInterface
   dd OFS _AddRef
   dd OFS _Release
   dd OFS mIOleClientSite_SaveObject
   dd OFS mIOleClientSite_GetMoniker
   dd OFS mIOleClientSite_GetContainer
   dd OFS mIOleClientSite_ShowObject
   dd OFS mIOleClientSite_OnShowWindow
   dd OFS mIOleClientSite_RequestNewObjectLayout
 pmIOleClientSite    dd OFS mIOleClientSite
  mIOleInPlaceSite label DWORD ; IOleInPlaceSite
   dd OFS mIOleInPlaceSite_QueryInterface
   dd OFS _AddRef
   dd OFS _Release
   dd OFS mIOleInPlaceSite_GetWindow
   dd OFS mIOleInPlaceSite_ContextSensitiveHelp
   dd OFS mIOleInPlaceSite_CanInPlaceActivate
   dd OFS mIOleInPlaceSite_OnInPlaceActivate
   dd OFS mIOleInPlaceSite_OnUIActivate
   dd OFS mIOleInPlaceSite_GetWindowContext
   dd OFS mIOleInPlaceSite_Scroll
   dd OFS mIOleInPlaceSite_OnUIDeactivate
   dd OFS mIOleInPlaceSite_OnInPlaceDeactivate
   dd OFS mIOleInPlaceSite_DiscardUndoState
   dd OFS mIOleInPlaceSite_DeactivateAndUndo
   dd OFS mIOleInPlaceSite_OnPosRectChange
 pmIOleInPlaceSite   dd OFS mIOleInPlaceSite

;;; .code
.code
;-- IOleClientSite
;  _AddRef proc t:DWORD
  _AddRef:
    xor eax,eax
    inc eax
    ret 4

; _Release proc t:DWORD
  _Release:
    xor eax,eax
    ret 4

  mIOleClientSite_QueryInterface proc uses esi edi ecx t,riid,ppvObject:DWORD
    mov   esi,riid
    mov   edi,OFS IID_IOleInPlaceSite
    cld
    mov   ecx,4
    repz  cmpsb
    jnz @f
    MOP ppvObject,OFS pmIOleInPlaceSite
    mov eax,S_OK
    ret

 @@:
    MOP ppvObject,NULL
    mov eax,E_NOINTERFACE
    ret

  mIOleClientSite_QueryInterface  endp

;  mIOleClientSite_GetMoniker  proc t,dwAssign,dwWhichMoniker,ppmk:DWORD
  mIOleClientSite_GetMoniker:
    mov eax,E_NOTIMPL
    ret 16

  mIOleClientSite_GetContainer proc t,ppContainer:DWORD
    MOP ppContainer,NULL
    mov eax,E_NOINTERFACE
    ret
 mIOleClientSite_GetContainer endp

;  mIOleClientSite_OnShowWindow proc t,fShow:DWORD
  mIOleClientSite_OnShowWindow:
;  mIOleInPlaceSite_ContextSensitiveHelp proc t,fEnterMode:DWORD
  mIOleInPlaceSite_ContextSensitiveHelp:
;  mIOleInPlaceSite_Scroll proc t,scrollExtant:DWORD
  mIOleInPlaceSite_Scroll:
;  mIOleInPlaceSite_OnUIDeactivate proc t,fUndoable:DWORD
  mIOleInPlaceSite_OnUIDeactivate:
;  mIOleInPlaceSite_OnPosRectChange proc t,lprcPosRect:DWORD
  mIOleInPlaceSite_OnPosRectChange:
    mov eax,S_OK
    ret 8

;  mIOleInPlaceSite_OnInPlaceDeactivate proc t:DWORD
  mIOleInPlaceSite_OnInPlaceDeactivate: 
;  mIOleInPlaceSite_DiscardUndoState proc t:DWORD
  mIOleInPlaceSite_DiscardUndoState:
;  mIOleInPlaceSite_DeactivateAndUndo proc t:DWORD
  mIOleInPlaceSite_DeactivateAndUndo:
;  mIOleClientSite_SaveObject  proc t:DWORD
  mIOleClientSite_SaveObject:
;  mIOleClientSite_ShowObject  proc t:DWORD
  mIOleClientSite_ShowObject:
;  mIOleInPlaceSite_CanInPlaceActivate proc t:DWORD
  mIOleInPlaceSite_CanInPlaceActivate:
;  mIOleInPlaceSite_OnUIActivate proc t:DWORD
  mIOleInPlaceSite_OnUIActivate:
;  mIOleInPlaceSite_OnInPlaceActivate proc t:DWORD
  mIOleInPlaceSite_OnInPlaceActivate:
    mov eax,S_OK
    ret 4

;  mIOleClientSite_RequestNewObjectLayout proc t:DWORD
  mIOleClientSite_RequestNewObjectLayout:
    mov eax,E_NOTIMPL
    ret 4
;-- IOleInPlaceSite

  mIOleInPlaceSite_QueryInterface proc t,riid,ppvObject:DWORD
    MOP ppvObject,NULL
    mov eax,E_NOINTERFACE
    ret
  mIOleInPlaceSite_QueryInterface endp

  mIOleInPlaceSite_GetWindow proc t,phwnd:DWORD
    MOP phwnd,mainHWND
    mov eax,S_OK
    ret
  mIOleInPlaceSite_GetWindow endp


  mIOleInPlaceSite_GetWindowContext proc t,ppFrame,ppDoc,\
                                    lprcPosRect,lprcClipRect,\
                                    lpFrameInfo:DWORD
    MOP ppFrame,NULL
    MOP ppDoc,NULL

    INV  GetClientRect,mainHWND,OFS rcOLE
    add  rcOLE.top,28
    add  rcOLE.left,2
    sub  rcOLE.bottom,2
    sub  rcOLE.right,2
    mov  eax,lprcPosRect
    MOM  [eax.RECT.left],rcOLE.left
    MOM  [eax.RECT.top],rcOLE.top
    MOM  [eax.RECT.right],rcOLE.right
    MOM  [eax.RECT.bottom],rcOLE.bottom
    mov  eax,lprcClipRect
    MOM  [eax.RECT.left],rcOLE.left
    MOM  [eax.RECT.top],rcOLE.top
    MOM  [eax.RECT.right],rcOLE.right
    MOM  [eax.RECT.bottom],rcOLE.bottom

    mov  eax,lpFrameInfo
    mov [eax.OLEINPLACEFRAMEINFO.fMDIApp],FALSE
    MOM [eax.OLEINPLACEFRAMEINFO.hwndFrame],mainHWND
    mov [eax.OLEINPLACEFRAMEINFO.haccel],NULL
    mov [eax.OLEINPLACEFRAMEINFO.cAccelEntries],0

    mov eax,S_OK
    ret
  mIOleInPlaceSite_GetWindowContext endp

   CreateOLEControl_WebBrowser2 proc bWhat,xParam:DWORD
    LOCAL waitingReadyCnt,lpVarVar,lpSafeArray,bstrStr,ourStr,pDoc,pHTML2:DWORD
    mov eax,bWhat
    .IF oleExists==FALSE && eax!=CIEB_CREATE
      ret
    .ENDIF
    .IF eax==CIEB_CREATE

      INV CoCreateInstance,OFS CLSID_WebBrowser,NULL,\
          CLSCTX_INPROC,OFS IID_IWebBrowser2,ADDR ppw
      .IF eax==S_OK

        COM  ppw,IWebBrowser2::QueryInterface,\
             OFS IID_IOleObject,OFS ppo

        .IF eax==S_OK
          INV  OleSetContainedObject,DPTR [ppw],TRUE
          COM  ppo,IOleObject::SetClientSite,OFS pmIOleClientSite
          COM  ppo,IOleObject::DoVerb,OLEIVERB_INPLACEACTIVATE,\
               NULL,OFS pmIOleClientSite,NULL,mainHWND,OFS rcOLE
           
           xor eax,eax
           inc eax
           mov oleExists,eax
           INV CreateOLEControl_WebBrowser2,CIEB_NAVIGATE,OFS navABOUTBLANKURL

         .endif
        COM ppo,IOleObject::Release
       .endif

    .ELSEIF eax==CIEB_NAVIGATE
      INV  CreateOLEControl_WebBrowser2,CIEB_WAITREADY,0
      xor  eax,eax
      COM  ppw,IWebBrowser2::Navigate,xParam,eax,eax,eax,eax
      INV  CreateOLEControl_WebBrowser2,CIEB_WAITREADY,0

    .ELSEIF eax==CIEB_WAITREADY
      xor eax,eax
      mov waitingReadyCnt,eax
      mov pDoc,eax
      COM ppw,IWebBrowser2::get_Document,ADDR pDoc
     .if (pDoc!=0) && (eax==S_OK)
          mov pHTML2,0
          COM  pDoc,IDispatch::QueryInterface,\
              OFS IID_IHTMLDocument2,ADDR pHTML2
        .IF (pHTML2!=0)&&(eax==S_OK)
         CreateOLEControl_WebBrowser2_WaitForReady:
          COM ppw,IWebBrowser2::get_ReadyState,ADDR bstrStr
          cmp DPTR bstrStr,2
          jae CreateOLEControl_WebBrowser2_ready
          cmp waitingReadyCnt,100 ;sec.
          jae CreateOLEControl_WebBrowser2_ready
          inc waitingReadyCnt

         PumpMsgs:
          INV PeekMessage,ADDR msg,NULL,0,0,PM_REMOVE
          .IF eax>0
             INV TranslateMessage,ADDR msg
             INV DispatchMessage,ADDR msg
             jmp PumpMsgs
      .ENDIF

          INV Sleep,10
          jmp CreateOLEControl_WebBrowser2_WaitForReady

        CreateOLEControl_WebBrowser2_ready:

          COM pHTML2,IHTMLDocument2::Release
        .ENDIF ; INV IWebBrowser2_GetIHTMLDocument2

        COM  pDoc,IDispatch::Release
      .ENDIF ; INV IWebBrowser2_GetDocument

    .ELSEIF eax==CIEB_RESIZE

      INV CreateOLEControl_WebBrowser2,CIEB_WAITREADY,0
      COM  ppw,IWebBrowser2::QueryInterface,\
           OFS IID_IOleInPlaceObject,OFS ppoipo
      .IF eax==S_OK
        COM  ppoipo,IOleInPlaceObject::SetObjectRects,OFS rcOLE,OFS rcOLE
        COM  ppoipo,IOleInPlaceObject::Release
      .ENDIF

    .ELSEIF eax==CIEB_DESTROY
       .IF ppw!=0 && ppo!=0
         mov  oleExists,FALSE
         COM  ppw,IWebBrowser2::Stop
         COM  ppo,IOleObject::Close,FALSE
         COM  ppo,IOleObject::Release
         COM  ppw,IWebBrowser2::Release
       .ENDIF
     .ENDIF
     ret
   CreateOLEControl_WebBrowser2 endp
 
 addbarEditWndProc proc hEdt,uMsg,wPa,lPa:DWORD
    
    .IF uMsg==WM_GETDLGCODE
       mov eax,DLGC_WANTALLKEYS
       ret
    .ELSEIF uMsg==WM_KEYDOWN
       mov eax,wPa
      .if al==VK_RETURN
         INV PostMessage,mainHWND,WM_GO,0,0
         xor eax,eax
         ret
      .endif
    .ELSEIF uMsg==WM_CHAR
       mov eax,wPa
       .if al==VK_RETURN
           xor eax,eax
           ret
       .endif
    .ENDIF
          
    INV CallWindowProc,oldAddbarEditWndProc,hEdt,uMsg,wPa,lPa
    ret
 addbarEditWndProc endp
   
 DlgProc proc hDlg,uMsg,wParam,lParam:DWORD
   mov eax,uMsg
   .IF  eax==WM_CLOSE
     INV ShowWindow,hDlg,SW_HIDE
     INV CreateOLEControl_WebBrowser2,CIEB_DESTROY,0
     INV OleUninitialize       
     INV EndDialog,hDlg,0

   .ELSEIF eax==WM_SIZE
      INV  GetClientRect,hDlg,OFS rcOLE
      mov  edx,rcOLE.top
      add  rcOLE.top,2
      add  rcOLE.left,2
      sub  rcOLE.bottom,2 
      sub  rcOLE.right,4
      mov  edx,rcOLE.top
      add  edx,20
      INV  MoveWindow,hEdit,rcOLE.left,rcOLE.top,rcOLE.right,edx,TRUE
      add  rcOLE.top,26
      add  rcOLE.right,2
      INV CreateOLEControl_WebBrowser2,CIEB_RESIZE,0
   
   .ELSEIF eax==WM_GO
      INV GetDlgItemText,hDlg,ID_EDIT,OFS szBuf,SIZEOF szBuf
      INV MultiByteToWideChar,CP_ACP,MB_PRECOMPOSED,OFS szBuf,-1,OFS uszBuf,SIZEOF szBuf
      INV SetFocus,hEdit
      INV CreateOLEControl_WebBrowser2,CIEB_NAVIGATE,OFS uszBuf

   .ELSEIF eax==WM_INITDIALOG 
     INV SendMessage,hDlg,WM_SETTEXT,0,OFS szAppTitle
     INV GetDlgItem,hDlg,ID_EDIT
     mov hEdit,eax
     INV SendMessage,hEdit,WM_SETTEXT,0,OFS szWWW
     INV SetWindowLong,hEdit,GWL_WNDPROC,OFS addbarEditWndProc
     mov oldAddbarEditWndProc,eax
     INV OleInitialize,NULL
     MOM mainHWND,hDlg
     INV CreateOLEControl_WebBrowser2,CIEB_CREATE,0

   .ELSEIF eax==WM_COMMAND
     cmp wParam,IDOK
     jnz @f
     INV SendMessage,hDlg,WM_CLOSE,0,0
     @@:

   .ENDIF
   xor eax,eax
   ret
 DlgProc endp

 Start:
     INV GetModuleHandle,NULL
     mov hInstance,eax
     INV DialogBoxParam,hInstance,ID_DLG_MAIN,0,ADDR DlgProc,0
     INV ExitProcess,0
 END Start



PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.