1 SHDocVw_TLB是shdocvw.dll的类型库导入单元,没有的话就改成shdocvw(delphi自带),或者在“Project”菜单下选“Import Type Library”,在弹出的对话框中再选择“Microsoft Internet Controls”,再点“Create Unit”即可。但是把第二个webbrowser改为webbrowser2.但以后其他工程要用就要改回来了.
2 安装EmbeddedWB_D2005_Update12.zip,它包含了IEConst,IEUtil等.
3 安装zoc,在demo中.
4 安装的路径,就是有dcu的路径加入delphi的环境变量 .
附Zoc代码:
unit ZoCWebBrowser;
interface
uses
Variants, IEConst, IEUtils, Registry, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, EXTCtrls, OleCtrls, SHDocVw_tlb, ActiveX, shlObj, Wininet, Urlmon, shellapi, MSHTML;type
//zoc 2003-9-15 IDocHostUIHandler TShowContextMenuEvent = function(const dwID: DWORD; const ppt: PPOINT; const pcmdtReserved: IUnknown; const pdispReserved: IDispatch): HRESULT of object; TGetHostInfoEvent = function(var pInfo: TDOCHOSTUIINFO): HRESULT of object; TShowUIEvent = function(const dwID: DWORD; const pActiveObject: IOleInPlaceActiveObject; const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame; const pDoc: IOleInPlaceUIWindow): HRESULT of object; THideUIEvent = function: HRESULT of object; TUpdateUIEvent = function: HRESULT of object; TEnableModelessEvent = function(const fEnable: BOOL): HRESULT of object; TOnDocWindowActivateEvent = function(const fActivate: BOOL): HRESULT of object; TOnFrameWindowActivateEvent = function(const fActivate: BOOL): HRESULT of object; TResizeBorderEvent = function(const prcBorder: PRECT; const pUIWindow: IOleInPlaceUIWindow; const fRameWindow: BOOL): HRESULT of object; TTranslateAcceleratorEvent = function(const lpMsg: PMSG; const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT of object; TGetOptionKeyPathEvent = function(var pchKey: POLESTR; const dw: DWORD): HRESULT of object; TGetDropTargetEvent = function(const pDropTarget: IDropTarget; out ppDropTarget: IDropTarget): HRESULT of object; TGetExternalEvent = function(out ppDispatch: IDispatch): HRESULT of object; TTranslateUrlEvent = function(const dwTranslate: DWORD; const pchURLIn: POLESTR; var ppchURLOut: POLESTR): HRESULT of object; TFilterDataObjectEvent = function(const pDO: IDataObject; out ppDORet: IDataObject): HRESULT of object; //zoc 2003-9-15 IDocHostUIHandler//zoc 2003-9-15 IDocHostUIHandler2
TGetOverrideKeyPathEvent = function(pchKey: POLESTR; dw: DWORD): HRESULT of object; //zoc 2003-9-15 IDocHostUIHandler2 //zoc 2003-9-15 IDocHostShowUI TShowMessageEvent = function(hwnd: THandle; lpstrText: POLESTR; lpstrCaption: POLESTR; dwType: longint; lpstrHelpFile: POLESTR; dwHelpContext: longint; var plResult: LRESULT): HRESULT of object; TShowHelpEvent = function(hwnd: THandle; pszHelpFile: POLESTR; uCommand: integer; dwData: longint; ptMouse: TPoint; var pDispatchObjectHit: IDispatch): HRESULT of object; //zoc 2003-9-15 IDocHostShowUITZoCWebBrowser = class(TWebBrowser2, IDocHostUIHandler, IDocHostUIHandler2,
IDocHostShowUI) private //zoc 2003-9-15 IDocHostUIHandler FOnEnableModeless: TEnableModelessEvent; FOnFilterDataObject: TFilterDataObjectEvent; FOnGetDropTarget: TGetDropTargetEvent; FOnGetExternal: TGetExternalEvent; FOnGethostinfo: TGetHostInfoEvent; FOnGetOptionKeyPath: TGetOptionKeyPathEvent; FOnHideUI: THideUIEvent; FOnOnDocWindowActivate: TOnDocWindowActivateEvent; FOnOnFrameWindowActivate: TOnFrameWindowActivateEvent; FOnResizeBorder: TResizeBorderEvent; FOnShowContextmenu: TShowContextMenuEvent; FOnShowUI: TShowUIEvent; FOnTranslateAccelerator: TTranslateAcceleratorEvent; FOnTranslateUrL: TTranslateUrlEvent; FOnUpdateUI: TUpdateUIEvent; //zoc 2003-9-15 IDocHostUIHandler//zoc 2003-9-15 IDocHostUIHandler2
FOnGetOverrideKeyPath: TGetOverrideKeypathEvent; //zoc 2003-9-15 IDocHostUIHandler2 //zoc 2003-9-15 IDocHostShowUI FOnShowMessage: TShowMessageEvent; FOnShowHelp: TShowHelpEvent; //zoc 2003-9-15 IDocHostShowUIFUserInterfaceValue: Cardinal;
FHelpFile: string; protected { Protected declarations } //zoc 2003-9-15 IDocHostUIHandler function ShowContextMenu(const dwID: DWORD; const ppt: PPOINT; const pcmdtReserved: IUnknown; const pdispReserved: IDispatch): HRESULT; stdcall; function GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT; stdcall; function ShowUI(const dwID: DWORD; const pActiveObject: IOleInPlaceActiveObject; const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame; const pDoc: IOleInPlaceUIWindow): HRESULT; stdcall; function HideUI: HRESULT; stdcall; function UpdateUI: HRESULT; stdcall; function EnableModeless(const fEnable: BOOL): HRESULT; stdcall; function OnDocWindowActivate(const fActivate: BOOL): HRESULT; stdcall; function OnFrameWindowActivate(const fActivate: BOOL): HRESULT; stdcall; function ResizeBorder(const prcBorder: PRECT; const pUIWindow: IOleInPlaceUIWindow; const FrameWindow: BOOL): HRESULT; stdcall; function TranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT; stdcall; function GetOptionKeyPath(var pchKey: POLESTR; const dw: DWORD): HRESULT; stdcall; function GetDropTarget(const pDropTarget: IDropTarget; out ppDropTarget: IDropTarget): HRESULT; stdcall; function GetExternal(out ppDispatch: IDispatch): HRESULT; stdcall; function TranslateUrl(const dwTranslate: DWORD; const pchURLIn: POLESTR; var ppchURLOut: POLESTR): HRESULT; stdcall; function FilterDataObject(const pDO: IDataObject; out ppDORet: IDataObject): HRESULT; stdcall; //zoc 2003-9-15 IDocHostUIHandler//zoc 2003-9-15 IDocHostUIHandler2
function GetOverrideKeyPath(pchKey: POLESTR; dw: DWORD): HRESULT; stdcall; //zoc 2003-9-15 IDocHostUIHandler2//zoc 2003-9-15 IDocHostShowUI
function ShowMessage(hwnd: THandle; lpstrText: POLESTR; lpstrCaption: POLESTR; dwType: longint; lpstrHelpFile: POLESTR; dwHelpContext: longint; var plResult: LRESULT): HRESULT; stdcall; function ShowHelp(hwnd: THandle; pszHelpFile: POLESTR; uCommand: integer; dwData: longint; ptMouse: TPoint; var pDispatchObjectHit: IDispatch): HRESULT; stdcall; //zoc 2003-9-15 IDocHostShowUIpublic
{ Public declarations } published { Published declarations } property HelpFile: string read FHelpFile write FHelpFile; //zoc 2003-9-15 IDocHostUIHandler property OnShowContextMenu: TShowContextMenuEvent read FOnShowContextmenu write FOnShowContextmenu; property OnGetHostInfo: TGetHostInfoEvent read FOnGethostinfo write fongethostinfo; property OnShowUI: TShowUIEvent read FOnShowUI write FOnShowUI; property OnHideUI: THideUIEvent read FOnHideUI write FOnHideUI; property OnUpdateUI: TUpdateUIEvent read FOnUpdateUI write FOnUpdateUI; property OnEnableModeless: TEnableModelessEvent read FOnEnableModeless write FOnEnableModeless; property OnOnDocWindowActivate: TOnDocWindowActivateEvent read FOnOnDocWindowActivate write FOnOnDocWindowActivate; property OnOnFrameWindowActivate: TOnFrameWindowActivateEvent read FOnOnFrameWindowActivate write FOnOnFrameWindowActivate; property OnResizeBorder: TResizeBorderEvent read FOnResizeBorder write FOnResizeBorder; property OnTranslateAccelerator: TTranslateAcceleratorEvent read FOnTranslateAccelerator write FOnTranslateAccelerator; property OnGetOptionKeyPath: TGetOptionKeyPathEvent read FOnGetOptionKeyPath write FOnGetOptionKeyPath; property OnGetDropTarget: TGetDropTargetEvent read FOnGetDropTarget write FOnGetDropTarget; property OnGetExternal: TGetExternalEvent read FOnGetExternal write FOnGetExternal; property OnTranslateUrl: TTranslateUrlEvent read FOnTranslateUrL write FOnTranslateUrL; property OnFilterDataObject: TFilterDataObjectEvent read FOnFilterDataObject write FOnFilterDataObject; //zoc 2003-9-15 IDocHostUIHandler//zoc 2003-9-15 IDocHostUIHandler2
property OnGetOverrideKeyPath: TGetOVerrideKeypathEvent read FOnGetOverrideKeyPath write FOnGetOverrideKeyPath; //zoc 2003-9-15 IDocHostUIHandler2//zoc 2003-9-15 IDocHostShowUI
property OnShowMessage: TShowMessageEvent read FOnShowMessage write FOnShowMessage; property OnShowHelp: TShowHelpEvent read FOnShowHelp write FOnShowHelp; //zoc 2003-9-15 IDocHostShowUI end;procedure Register;
implementation
var
Saved8087CW: Word;//zoc 2003-9-15 IDocHostUIHandler
function TZoCWebBrowser.ShowContextMenu(const dwID: DWORD; const ppt: PPOINT;
const pcmdtReserved: IUnknown; const pdispReserved: IDispatch): HRESULT; begin if Assigned(FOnShowContextmenu) then RESULT := FOnSHowContextmenu(dwID, ppt, pcmdtreserved, pdispreserved) else RESULT := S_FALSE; end;function TZoCWebBrowser.GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT;
begin pInfo.cbSize := SizeOf(pInfo); pInfo.dwFlags := FUserInterfaceValue; pInfo.dwDoubleClick := DOCHOSTUIDBLCLK_DEFAULT; if Assigned(FOnGetHostInfo) then Result := FOnGetHostInfo(pInfo) else Result := S_OK; end;function TZoCWebBrowser.ShowUI(const dwID: DWORD;
const pActiveObject: IOleInPlaceActiveObject; const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame; const pDoc: IOleInPlaceUIWindow): HRESULT; begin if Assigned(FOnShowUI) then Result := FOnShowUI(dwID, pActiveObject, pCommandTarget, pFrame, pDoc) else Result := S_FALSE; end;function TZoCWebBrowser.HideUI: HRESULT;
begin if Assigned(FOnHideUI) then Result := FOnHideUI else Result := S_FALSE; end;function TZoCWebBrowser.UpdateUI: HRESULT;
begin if Assigned(FOnUpdateUI) then Result := FOnUpdateUI else Result := S_FALSE; end;function TZoCWebBrowser.EnableModeless(const fEnable: BOOL): HRESULT;
begin if Assigned(FOnEnableModeless) then Result := FOnEnableModeless(fEnable) else Result := S_FALSE; end;function TZoCWebBrowser.OnDocWindowActivate(const fActivate: BOOL): HRESULT;
begin if Assigned(FOnOnDocWindowActivate) then Result := FOnOnDocWindowActivate(fActivate) else Result := S_FALSE; end;function TZoCWebBrowser.OnFrameWindowActivate(const fActivate: BOOL): HRESULT;
begin if Assigned(FOnOnFrameWindowActivate) then Result := FOnOnFrameWindowActivate(fActivate) else Result := S_FALSE; end;function TZoCWebBrowser.ResizeBorder(const prcBorder: PRECT;
const pUIWindow: IOleInPlaceUIWindow; const fRameWindow: BOOL): HRESULT; begin if Assigned(FOnResizeBorder) then Result := FOnResizeBorder(prcBorder, pUIWindow, fRameWindow) else Result := S_FALSE; end;function TZoCWebBrowser.TranslateAccelerator(const lpMsg: PMSG;
const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT; begin if Assigned(FOnTranslateAccelerator) then Result := FOnTranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID) else Result := S_FALSE; end;function TZoCWebBrowser.GetOptionKeyPath(var pchKey: POLESTR; const dw: DWORD): HRESULT;
begin if Assigned(FOnGetOptionKeyPath) then Result := FOnGetOptionKeyPath(pchKey, dw) else Result := S_FALSE; end;function TZoCWebBrowser.GetDropTarget(const pDropTarget: IDropTarget;
out ppDropTarget: IDropTarget): HRESULT; begin if Assigned(FOnGetDropTarget) then Result := FOnGetDropTarget(pDropTarget, ppDropTarget) else Result := S_OK; end;function TZoCWebBrowser.GetExternal(out ppDispatch: IDispatch): HRESULT;
begin if Assigned(FOnGetExternal) then Result := FOnGetExternal(ppDispatch) else Result := S_FALSE; end;function TZoCWebBrowser.TranslateUrl(const dwTranslate: DWORD;
const pchURLIn: POLESTR; var ppchURLOut: POLESTR): HRESULT; begin if Assigned(FOnTranslateUrl) then Result := FOnTranslateUrl(dwTranslate, pchUrlIn, ppchUrlOut) else Result := S_FALSE; end;function TZoCWebBrowser.FilterDataObject(const pDO: IDataObject;
out ppDORet: IDataObject): HRESULT; begin if Assigned(FOnFilterDataObject) then Result := FOnFilterDataObject(pDO, ppDORet) else Result := S_FALSE; end;//zoc 2003-9-15 IDocHostUIHandler
//zoc 2003-9-15 IDocHostUIHandler2
function TZoCWebBrowser.GetOverrideKeyPath(pchKey: POLESTR;
dw: DWORD): HRESULT; begin if Assigned(FOnGetOverrideKeyPath) then RESULT := FOnGetOverrideKeyPath(pchkey, dw) else Result := S_OK; end;//zoc 2003-9-15 IDocHostUIHandler2
//zoc 2003-9-15 IDocHostShowUI function TZoCWebBrowser.ShowMessage(hwnd: THandle; lpstrText: POLESTR; lpstrCaption: POLESTR; dwType: longint; lpstrHelpFile: POLESTR; dwHelpContext: longint; var plResult: LRESULT): HRESULT; begin if Assigned(FOnShowMessage) then Result := FOnShowMessage(hwnd, lpstrText, lpStrCaption, dwType, lpStrHelpFile, dwHelpContext, plResult) else Result := S_FALSE; end;function TZoCWebBrowser.ShowHelp(hwnd: THandle; pszHelpFile: POLESTR;
uCommand: integer; dwData: longint; ptMouse: TPoint; var pDispatchObjectHit: IDispatch): HRESULT; begin Result := S_OK; if Assigned(FOnShowHelp) then Result := FOnShowHelp(hwnd, pszHelpFile, uCommand, dwData, ptMouse, pDispatchObjectHit) else if FHelpFile <> '' then HtmlHelp(hwnd, Pchar(FHelpFile), ucommand, dwData) else Result := S_FALSE; end;//zoc 2003-9-15 IDocHostShowUI
procedure Register;
begin RegisterComponents('EoC', [TZoCWebBrowser]); end;initialization
Saved8087CW := Default8087CW; {$IFDEF VER120} bMsgHandler := False; {$ENDIF} OleInitialize(nil); finalization Set8087CW(Saved8087CW); try OleUninitialize; except end;end.