关于TWebBrowser丢失焦点的问题. 如果页面中右使用javascript弹出的确认框或者警告框,点击确认按钮之后,webbrowser的焦点就丢失了,在我的程序里变成了窗口上面的地址栏获得了焦点。有没有办法让焦点不丢失或者重新回到窗口里呢?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to:zswang(伴水清清)我采用最简单的代码也是这样的,为了再次验证,我刚才新建了一个工程,form上只有一个Tedit,Tbutton,TWebbrowserprocedure 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 //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; 问题解决了,谢谢!不过还有一个额外的小问题,就是SameText(vClassName, '#32770')这里的#32770是从那里得到的呢? 方法很多,你可以用VC带的工具也可以自己写一个WindowFromPoint() 通过位置得到句柄GetClassName() 通过句柄的到类名 delphi中导出的类中.如何导出属性(property)? 关于delphi中生成Treeview一段代码,请大虾帮忙找找问题 如何在不创建窗口对象的情况下获取该窗口中的控件数? 请问如何实现在dbgrid1中选中某单元后dbgrid2立刻不选中任何单元,急!!! 新年了,给大家散点分吧,分帖二 spcomm控件的导入问题 定制hint time事件,线程,sleep区别?限制 请问怎样禁止Combobox的右键 怎样可以实现两个按扭同步? StringGrid控件如何连接按钮控件? 有关access的查询的问题,请教一下
为了再次验证,我刚才新建了一个工程,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
{ 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;
不过还有一个额外的小问题,就是SameText(vClassName, '#32770')
这里的#32770是从那里得到的呢?
也可以自己写一个
WindowFromPoint() 通过位置得到句柄
GetClassName() 通过句柄的到类名