您的位置:首页 > 编程语言 > Delphi

Delphi中TWebBrowser的使用,实现IDocHostUIHandler接口

2013-10-24 15:46 423 查看
Delphi中TWebBrowser控件增强版,增加控制浏览器的滚动条,右键菜单,3D边框属性,可以通过设置属性隐藏TWebBrowser的滚动条,右键菜单,3D边框,使之不可见。控件代码如下:

unit WebBrowserWithUI;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

OleCtrls, SHDocVw, COmObj, ActiveX;

type

TEnhancedWebBrowserUI = class(TPersistent)

private

FlatScrollBar: boolean;

IE3DBorder: boolean;

RightClickMenu: boolean;

ScrollBar: boolean;

public

constructor Create;

published

property EnableScrollBars: boolean read ScrollBar write ScrollBar;

property EnableFlatScrollBars: boolean read FlatScrollBar write

FlatScrollBar;

property EnableContextMenu: boolean read RightClickMenu write

RightClickMenu;

property Enable3DBorder: boolean read IE3DBorder write IE3DBorder;

end;

pDocHostUIInfo = ^TDocHostUIInfo;

TDocHostUIInfo = packed record

cbSize: ULONG;

dwFlags: DWORD;

dwDoubleClick: DWORD;

pchHostCss: polestr;

pchHostNS: polestr;

end;

IDocHostUIHandler = interface(IUnknown)

['{bd3f23c0-d43e-11cf-893b-00aa00bdce1a}']

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;

end;

TWebBrowserWithUI = class(TWebBrowser, IDocHostUIHandler)

private

{ Private declarations }

UIProperties: TEnhancedWebBrowserUI;

protected

{ Protected declarations }

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

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;

published

{ Published declarations }

property UISettings: TEnhancedWebBrowserUI read UIProperties write

UIProperties;

end;

const

DOCHOSTUIFLAG_DIALOG = $00000001;

DOCHOSTUIFLAG_DISABLE_HELP_MENU = $00000002;

DOCHOSTUIFLAG_NO3DBORDER = $00000004;

DOCHOSTUIFLAG_SCROLL_NO = $00000008;

DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = $00000010;

DOCHOSTUIFLAG_OPENNEWWIN = $00000020;

DOCHOSTUIFLAG_DISABLE_OFFSCREEN = $00000040;

DOCHOSTUIFLAG_FLAT_SCROLLBAR = $00000080;

DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = $00000100;

DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = $00000200;

DOCHOSTUIFLAG_OVERRIDEBEHAVIOURFACTORY = $00000400;

DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = $00000800;

DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = $00001000;

DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = $00002000;

DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = $00004000;

IID_IDocHostUIHandler: TGUID = '{bd3f23c0-d43e-11CF-893b-00aa00bdce1a}';

procedure Register;

implementation

procedure Register;

begin

RegisterComponents('Samples', [TWebBrowserWithUI]);

end;

{ TEnhancedWebBrowserUI }

constructor TEnhancedWebBrowserUI.Create;

begin

ScrollBar := False;

FlatScrollBar := False;

IE3DBorder := False;

RightClickMenu := False;

end;

{ TWebBrowserWithUI }

constructor TWebBrowserWithUI.Create(AOwner: TComponent);

begin

inherited;

UIProperties := TEnhancedWebBrowserUI.Create;

end;

destructor TWebBrowserWithUI.Destroy;

begin

UIProperties.Free;

inherited;

end;

function TWebBrowserWithUI.EnableModeless(const fEnable: BOOL): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.FilterDataObject(const pDO: IDataObject;

out ppDORet: IDataObject): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.GetDropTarget(const pDropTarget: IDropTarget;

out ppDropTarget: IDropTarget): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.GetExternal(out ppDispatch: IDispatch): HRESULT;

begin

result := S_OK;

end;

function TWebBrowserWithUI.GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT;

begin

pInfo.cbSize := SizeOf(pInfo);

pInfo.dwFlags := 0;

if not UIProperties.EnableScrollBars then

pInfo.dwFlags := pInfo.dwFlags or DOCHOSTUIFLAG_SCROLL_NO;

if UIProperties.EnableFlatScrollBars then

pInfo.dwFlags := pInfo.dwFlags or DOCHOSTUIFLAG_FLAT_SCROLLBAR;

if not UIProperties.Enable3DBorder then

pInfo.dwFlags := pInfo.dwFlags or DOCHOSTUIFLAG_NO3DBORDER;

result := S_OK;

end;

function TWebBrowserWithUI.GetOptionKeyPath(var pchKey: POLESTR;

const dw: DWORD): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.HideUI: HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.OnDocWindowActivate(

const fActivate: BOOL): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.OnFrameWindowActivate(

const fActivate: BOOL): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.ResizeBorder(const prcBorder: PRECT;

const pUIWindow: IOleInPlaceUIWindow; const fRameWindow: BOOL): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.ShowContextMenu(const dwID: DWORD;

const ppt: PPOINT; const pcmdtReserved: IUnknown;

const pdispReserved: IDispatch): HRESULT;

begin

if UIProperties.EnableContextMenu then

result := S_FALSE

else

result := S_OK;

end;

function TWebBrowserWithUI.ShowUI(const dwID: DWORD;

const pActiveObject: IOleInPlaceActiveObject;

const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame;

const pDoc: IOleInPlaceUIWindow): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.TranslateAccelerator(const lpMsg: PMSG;

const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.TranslateUrl(const dwTranslate: DWORD;

const pchURLIn: POLESTR; var ppchURLOut: POLESTR): HRESULT;

begin

result := S_FALSE;

end;

function TWebBrowserWithUI.UpdateUI: HRESULT;

begin

result := S_FALSE;

end;

end.


将该代码保存为WebBrowserWithUI.pas,在delphi中通过unit安装该控件,在控件属性中新增uisetting属性,控制TWebBrowser的滚动条,右键菜单,3D边框是否可见。

建一个包,加入这个单元,安装就可以了。

转自:http://hi.baidu.com/bycong/blog/item/35d70bec611ce03362d09f49.html

另外也可以参考http://blog.sina.com.cn/s/blog_4b3c1f950102dtqx.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: