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 IDocHostShowUI
TZoCWebBrowser = 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 IDocHostShowUI
FUserInterfaceValue: 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 IDocHostShowUI
public
{ 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.