Delphi 5.0
使用TWebBrowser控件时发现当焦点从普通控件移动到浏览器控件时,原来的控件并不能感知焦点的失去,OnExit事件不会被触发,而且用鼠标重新点击这个失去焦点的控件时,这个控件已无法操作,只有点击了第三个控件时,OnExit事件才被触发,控件也才恢复正常.查了很多地方都没有结果,不知道大家用不用这个控件,怎么没有人提这个问题啊?

解决方案 »

  1.   

    我刚试了,在webbrowser1没有加载内容的时候是有从其他组件的焦点移动到webbrowser1时候OnExit事件不会被触发,当这个组件还是依然可以操作的,不过加载内容了就没有这个问题了,还有,你要实现什么?变通一下可以吗?
      

  2.   

    我也试了一下,发现其他的控件没有这个问题,只有dbgrid控件会有这个问题,当焦点在dbgrid中时,点击浏览器控件的滚动条,dbgrid的样子是失去焦点了,但OnExit不会触发,而且也不能再点击,就象死了一样,要点一个第三控件才能重新恢复.
      

  3.   

    搞定了从网上查了一段代码,修改了一下: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;
      

  4.   

    我该怎么给分呢?偶在BCB版的性欲已经极其低下了,难道Delphi版也是这样?:(
      

  5.   

    to binbin(破坏分子) 依照你的方法,要是有多个窗体用到WebBrowser那不是得设置好多次
    Application.OnMessage了?也还是很麻烦的,要是能在WebBrowser的事件里写代码该多好。
      

  6.   

    反正就DBGrid会有这种问题,其它的控件不会有。
    还真不知道这个控件是怎么搞的。
      

  7.   

    我从TPanel继承了一个控件,把代码封闭在这个控件里了,pnlLogo.SetFocus改成在窗口中找一个不会有焦点的panel来SetFocus,这样应该只要在主窗口中加一个控件,其他的窗口中加一个看不见的panel就解决问题.