如果页面中右使用javascript弹出的确认框或者警告框,点击确认按钮之后,
webbrowser的焦点就丢失了,在我的程序里变成了窗口上面的地址栏获得了焦点。
有没有办法让焦点不丢失或者重新回到窗口里呢?
谢谢!

解决方案 »

  1.   

    to:zswang(伴水清清)我采用最简单的代码也是这样的,
    为了再次验证,我刚才新建了一个工程,form上只有一个Tedit,Tbutton,TWebbrowser
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Edit1.Text := 'http://reg4.163.com 
     WebBrowser1.Navigate(Edit1.Text);
    end;应为在访问的页面上有登录判断,如果没有输入用户名,则会跳出一个警告框
    如果点击确定,则Webbrowser上的焦点就没有了,这是如果滚动鼠标滚轮,浏览器上的滚定条
    不会随着滚动了,必须在点击一个浏览器,滚轮才能用。而且我已经发现焦点是回答前一个焦点控件上,就是如果前一个焦点控件是Edit1,焦点就回到Edit1,
    如果前一个焦点是Button1,则Button1接着获得焦点。
    改用TEmbededWB替换TWebBrowser我也测试过了,效果是一样的。我的系统是Delphi7+IE6
      

  2.   

    //Delphi6+IE6测试通过~~  private
        { Private declarations }
        procedure WMACTIVATE(var Msg: TWMActivate); message WM_ACTIVATE;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text := 'http://reg4.163.com';
      WebBrowser1.Navigate(Edit1.Text);
      WebBrowser1.RegisterAsBrowser := True;
    end;procedure TForm1.WMACTIVATE(var Msg: TWMActivate);
    var
      vClassName: array[0..255] of Char;
    begin
      inherited;
      case Msg.Active of
        WA_ACTIVE:
        begin
          GetClassName(Msg.ActiveWindow, vClassName, SizeOf(vClassName));
          if SameText(vClassName, '#32770') then
          begin
            WebBrowser1.SetFocus;
            WebBrowser1.OleObject.Document.focus;
          end;
        end;
      end;
    end;
      

  3.   

    问题解决了,谢谢!
    不过还有一个额外的小问题,就是SameText(vClassName, '#32770')
    这里的#32770是从那里得到的呢?
      

  4.   

    方法很多,你可以用VC带的工具
    也可以自己写一个
    WindowFromPoint() 通过位置得到句柄
    GetClassName() 通过句柄的到类名