关于TWebBrowser控件的焦点问题

binbin 2005-12-08 08:31:18
Delphi 5.0
使用TWebBrowser控件时发现当焦点从普通控件移动到浏览器控件时,原来的控件并不能感知焦点的失去,OnExit事件不会被触发,而且用鼠标重新点击这个失去焦点的控件时,这个控件已无法操作,只有点击了第三个控件时,OnExit事件才被触发,控件也才恢复正常.查了很多地方都没有结果,不知道大家用不用这个控件,怎么没有人提这个问题啊?
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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事件不会被触发,当这个组件还是依然可以操作的,不过加载内容了就没有这个问题了,还有,你要实现什么?变通一下可以吗?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧