请问如何在 TWebBrowser 中屏蔽右键菜单?(60分)

  • 主题发起人 主题发起人 bundur
  • 开始时间 开始时间
B

bundur

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何在 TWebBrowser 中屏蔽右键菜单?
 
http://www.euromind.com/iedelphi/embeddedwb.htm
用这个版本,
在contextmenu中返回不同的返回值
 
关注此贴....
谁在整理出相关核心代码呀.对这方面了解的不够,希望向大家学习之.
 
另: 如何分析 BeforeNavigate2 事件的 PostData 中的元素?
 
我没有用过TWebBrowser,不过在TEdit中想要屏蔽右键菜单的话,只要将它的PopupMenu的属性,设成一个空的TPopupMenu的类型就行了。
 
这招对它没用
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=597528
http://www.delphibbs.com/delphibbs/dispq.asp?lid=563075
 
To: wqhatnet
非常感谢 wqhatnet 兄提供的方法,
但因为我要在 ActiveX 中使用, WM_ 的消息在 ActiveX 中不被接受,所以
该方法还是不能凑效.

欢迎大家继续提供宝贵意见!
 
在csdn回答的,copy过来给你。
要屏蔽掉右键菜单,完美的解决方法是实现IDocHostUIHandler.ShowContexMenu返回S_OK就可以了,你必须
自己实现这个接口,需要用到的接口定义如下
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;

ICustomDoc=interface(IUnknown)
['{3050f3f0-98b5-11cf-bb82-00aa00bdce0b}']
function SetUIHandler(const pUIHandler:IDocHostUIHandler):HRESULT
stdcall;
end;

ICustomDoc接口是设置IDocHostUIHandler的接口
使用如下
(webbrowser1.document as ICustomDoc).SetUIHandler(IDocHostUIHandler的实例);
 
希望 satanmonkey 兄能具体一点, 关于如何实现这个接口.
还有其中的 TDOCHOSTUIINFO 不知道是在哪个单元中.
 
TDOCHOSTUIINFO =
record
cbSize: ULONG;
dwFlags: DWORD;
dwDoubleClick: DWORD;
end


你建一个COM对象,实现IDocHostUIHandler就得了啊。
把他的实例传给SetUIHandler
大概这样
TSomeClass = class(TComObject,IDocHostUIHandler)
 
虽然没有得到满意的答案,但还是结帖吧。
以后要是谁有更好的解决方案,我可以另开帖酬谢。
 
后退
顶部