• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

关于TWebBrowser控件的焦点问题

binbin 2005-12-08 08:31:18
Delphi 5.0
使用TWebBrowser控件时发现当焦点从普通控件移动到浏览器控件时,原来的控件并不能感知焦点的失去,OnExit事件不会被触发,而且用鼠标重新点击这个失去焦点的控件时,这个控件已无法操作,只有点击了第三个控件时,OnExit事件才被触发,控件也才恢复正常.查了很多地方都没有结果,不知道大家用不用这个控件,怎么没有人提这个问题啊?
...全文
118 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
DoorKey 2005-12-10
反正就DBGrid会有这种问题,其它的控件不会有。
还真不知道这个控件是怎么搞的。
回复
DoorKey 2005-12-10
to binbin(破坏分子) 依照你的方法,要是有多个窗体用到WebBrowser那不是得设置好多次
Application.OnMessage了?也还是很麻烦的,要是能在WebBrowser的事件里写代码该多好。
回复
binbin 2005-12-10
我也试了一下,发现其他的控件没有这个问题,只有dbgrid控件会有这个问题,当焦点在dbgrid中时,点击浏览器控件的滚动条,dbgrid的样子是失去焦点了,但OnExit不会触发,而且也不能再点击,就象死了一样,要点一个第三控件才能重新恢复.
回复
binbin 2005-12-10
我该怎么给分呢?偶在BCB版的性欲已经极其低下了,难道Delphi版也是这样?:(
回复
binbin 2005-12-10
搞定了

从网上查了一段代码,修改了一下:

procedure TfrmMain.mymessage(var msg:tmsg;var handled:boolean);//ÆÁ±ÎwebbroserÓÒ¼ü
var
thename:array [0..255] of char;
begin
getclassname(msg.hwnd,thename,255);
if thename='Internet Explorer_Server' then
begin
if (msg.message=WM_RBUTTONDOWN) or (msg.message=WM_RBUTTONDBLCLK) then
Handled:=true
else if (msg.message=WM_LBUTTONDOWN) or (msg.message=WM_LBUTTONDBLCLK) then
pnlLogo.SetFocus;//随便加一个Panel,显式设置其焦点,变相通知了DBGrid失去焦点
end;
end;



在Form的OnCreate事件中加上
Application.OnMessage:=mymessage;

回复
binbin 2005-12-10
我从TPanel继承了一个控件,把代码封闭在这个控件里了,pnlLogo.SetFocus改成在窗口中找一个不会有焦点的panel来SetFocus,这样应该只要在主窗口中加一个控件,其他的窗口中加一个看不见的panel就解决问题.
回复
2312 2005-12-09
我刚试了,在webbrowser1没有加载内容的时候是有从其他组件的焦点移动到webbrowser1时候OnExit事件不会被触发,当这个组件还是依然可以操作的,不过加载内容了就没有这个问题了,还有,你要实现什么?变通一下可以吗?
回复
发帖
Delphi
创建于2007-08-02

4871

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2005-12-08 08:31
社区公告
暂无公告