我原来窗体中内置的webbrowser,操作其中的网页的时候,网页不相应回车事件
比如,访问mail.163.com,输入密码后回车,并不会进入邮箱,后来在网上找到解决方案
就是添加一个ApplicationEvents,
添加代码
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
const
StdKeys = [VK_TAB, VK_RETURN]; { standard keys }
ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { extended keys }
fExtended = $01000000; { extended key flag }
begin
Handled := False;
with Msg do
if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and
((wParam in StdKeys) or {$IFDEF VER120}(GetKeyState(VK_CONTROL) < 0) or {$ENDIF}
(wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then
try
if IsChild(WebBrowser1.Handle, hWnd) then
{ handles all browser related messages }
begin
with WebBrowser1.Application as IOleInPlaceActiveObject do
Handled := TranslateAccelerator(Msg) = S_OK;
if not Handled then
begin
Handled := True;
TranslateMessage(Msg);
DispatchMessage(Msg);
end; end;
except end;
end; // IEMessageHandler
结果这样网页可以解决响应回车的问题。
新的问题来了
当一个程序中,有两个form,form1 和form2,两个窗体都放置一个webbrowser,也都放置一个ApplicationEvents,添加一样的代码,form1为主窗体,
结果form1 中TAB键,和回车能有正常的效果
form2 中 回车也能有正常的效果,但是按TAB键,每次焦点不是移到下个控件,而是移到下下个控件
本例子程序下载地址 http://web.ppcol.com/test.rar
(如果打不开上面的地址,我发邮件给大家,请留邮件)
请各位帮我啊
比如,访问mail.163.com,输入密码后回车,并不会进入邮箱,后来在网上找到解决方案
就是添加一个ApplicationEvents,
添加代码
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
const
StdKeys = [VK_TAB, VK_RETURN]; { standard keys }
ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { extended keys }
fExtended = $01000000; { extended key flag }
begin
Handled := False;
with Msg do
if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and
((wParam in StdKeys) or {$IFDEF VER120}(GetKeyState(VK_CONTROL) < 0) or {$ENDIF}
(wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then
try
if IsChild(WebBrowser1.Handle, hWnd) then
{ handles all browser related messages }
begin
with WebBrowser1.Application as IOleInPlaceActiveObject do
Handled := TranslateAccelerator(Msg) = S_OK;
if not Handled then
begin
Handled := True;
TranslateMessage(Msg);
DispatchMessage(Msg);
end; end;
except end;
end; // IEMessageHandler
结果这样网页可以解决响应回车的问题。
新的问题来了
当一个程序中,有两个form,form1 和form2,两个窗体都放置一个webbrowser,也都放置一个ApplicationEvents,添加一样的代码,form1为主窗体,
结果form1 中TAB键,和回车能有正常的效果
form2 中 回车也能有正常的效果,但是按TAB键,每次焦点不是移到下个控件,而是移到下下个控件
本例子程序下载地址 http://web.ppcol.com/test.rar
(如果打不开上面的地址,我发邮件给大家,请留邮件)
请各位帮我啊
解决方案 »
- 关于dbgrid显示数据问题请教
- 求针对stringgrid单元格数据内容进行检索算法实现方法
- 如何得到DOS窗口的dos prompt?
- 在delphi里怎样实现.dbf和oracle数据库之间导入和导出
- winexec('rundll32.exe rnaui.dll,RnaDial 163',SW_SHOWNORMAL);
- delphi 下怎样调用mssql2000的 存储过程
- 哪有access数据库转换为sql server的转换工具?
- 如何用delphi实现图像网络传输与存储?请高手介绍方法,包括用什么库,通过TCP/IP怎么办?
- 不知道有人问过没有,关于Unicode。
- 怎么发组合键消息
- ListBox只能由上往下逐行显示数据,有没有由左往右显示数据的控件?
- [天下事]30岁前如何达到年薪10万(转载)
public
{ Public declarations }
procedure MsgHandle(var Msg :TMsg; var Handled :Boolean);
end;var
Form1: TForm1;
FOleInPlaceActiveObject :IOleInPlaceActiveObject;implementation{$R *.DFM}procedure TForm1.MsgHandle(var Msg :TMsg; var Handled :Boolean);
var
iOIPAO :IOleInPlaceActiveObject;
Dispatch :IDispatch;
begin
if WebBrowser1 =nil then
begin
Handled :=False;
Exit;
end;
Handled :=(IsDialogMessage(WebBrowser1.Handle, Msg) =True);
if (Handled) and (not WebBrowser1.Busy) then
begin
if FOleInPlaceActiveObject =nil then
begin
Dispatch :=WebBrowser1.Application;
if Dispatch <>nil then
begin
Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
if iOIPAO <>nil then
FOleInPlaceActiveObject :=iOIPAO;
end;
end;
end; if FOleInPlaceActiveObject <>nil then
if ((Msg.message =WM_KEYDOWN) or (Msg.Message =WM_KEYUP)) and ((Msg.wParam =VK_BACK) or (Msg.wParam =VK_LEFT) or (Msg.wParam =VK_RIGHT)) then else
FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage :=MsgHandle;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
FOleInPlaceActiveObject :=nil;
end;
http://delphi.ktop.com.tw/topic.asp?TOPIC_ID=73263
http://delphi.ktop.com.tw/topic.asp?topic_id=52347