EmbeddedWB浏览器控件响应回车不正常啊?为什么啊/请各位帮忙看看。(100分)

  • 主题发起人 主题发起人 netnice
  • 开始时间 开始时间
N

netnice

Unregistered / Unconfirmed
GUEST, unregistred user!
这是我从未名码头找到的

7、点击“提交”按钮

  如同程序里每个窗体上有一个“缺省”按钮一样,每个Web页面也有一个“缺省”按钮——即属性为“Submit”的按钮,当用户按下回车键时就相当于鼠标单击了“Submit”。但是TWebBrowser是不相应回车键的,并且,即使把包含TWebBrowser的窗体的KeyPreview设为True,在窗体的KeyPress事件等里面还是不能截获用户向TWebBrowser发出的按钮消息。
  解决的方法是用ApplicatinEvents构件或者自己编写TApplication对象的OnMessage事件,在其中判断消息类型,对键盘消息做出响应。至于点击“提交”按钮,可以通过分析网页源代码的方法来实现,不过我找到了更为简单快捷的方法,有两种,第一种是我自己想出来的,另一种是别人写的代码,这里都提供给大家,以做参考。

  A、用SendKeys函数向WebBrowser发送回车键
    在Delphi 5光盘上的Info/Extras/SendKeys目录下有一个SndKey32.pas文件,其中包含了两个函数SendKeys和AppActivate,我们可以用SendKeys函数来向WebBrowser发送回车键,我现在用的就是这个方法,使用很简单,在WebBrowser获得焦点的情况下(不要求WebBrowser所包含的文档获得焦点),用一条语句即可:

   Sendkeys('~',true);// press RETURN key

   SendKeys函数的详细参数说明等,均包含在SndKey32.pas文件中。

  B、在OnMessage事件中将接受到的键盘消息传递给WebBrowser

   procedure TForm1.ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean);
   { fixes the malfunction of some keys within webbrowser control }
   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(Handle, hWnd) then { handles all browser related messages }
     begin
      with {$IFDEF VER120}Application_{$ELSE}Application{$ENDIF} as
        IOleInPlaceActiveObject do
       Handled := TranslateAccelerator(Msg) = S_OK;
       if not Handled then
       begin
        Handled := True;
        TranslateMessage(Msg);
        DispatchMessage(Msg);
       end;
       end;
    except
    end;
   end; // MessageHandler

可是没实验出来啊。
我用的是EmbeddedWB浏览器控件。我在程序设计时加入的浏览器可以响应回车,
而我用程序动态生成的这个控件就不能响应回车了?
这是为什么啊?
上面的第一中方法怎么用啊?我没有sndkey.pas文件。

[:(!],气死我了。请高手帮忙!!
谢谢。up给分。

我写的是 csdn论坛助手 。各位可以在
http://www.csdn.net/Expert/topicview.asp?id=573623
看到
 
呵呵呵……我的文章。
哎,主页好久没更新了。
sndkey.pas在d5光盘的info/extra目录下。
 
去找找
太好了,竟然遇到作者了。看来问题差不多了。

问一下
在哪个事件里调用那个sendkey呢?能不能详细点啊?
 
Application.OnMessage.

不过,这种方法并不专业。
 
见大富翁FAQ 之 TWebBrowser
http://www.8421.org/article.php?id=178
 
请问如何让TWebBrowser在程序运行时获得焦点呢? 谢谢~ [:)]
 
还是看我的主页
http://eagleboost.myrice.com/issues/Materials/Articles/TWebBrowser.htm#SetFocusToDoc
 

Similar threads

I
回复
0
查看
600
import
I
I
回复
0
查看
613
import
I
D
回复
0
查看
738
DelphiTeacher的专栏
D
后退
顶部