请问高手,我的Twebbrowser中不能接受Enter,何解?(100分)

  • 主题发起人 主题发起人 apower
  • 开始时间 开始时间
A

apower

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,另外delphi自带的例子中也是不能接受回车的???
 
waif (2000-11-8 15:54:27)
在DELPHI里有个例子webbrows.dpr可以浏览网页,但可惜不能用Tab和Enter进行操作
连复制粘贴都不可以,请问有什么简单代码能使它象IE一样都能实现?

CathyEagle (2000-11-8 17:07:33)
http://eagleboost.myrice.com/issues/Materials/Articles/TWebBrowser.htm
我的主页。
或者Search一下WebBrowser

hhzh426 (2000-11-8 22:41:42)
initialization
OleInitialize(nil);

finalization
OleUninitialize;
将以上代码放在mainform的最后一个end之前就行了。

waif (2000-11-9 9:13:50)
请问OleInitialize和OleUninitialize是在哪里定义呀?

hhzh426 (2000-11-9 12:09:23)
activex单元中。
----------------------------------
试试吧。
 
用“webbrowser 回车”在离线数据库里搜一下,有n多答案:

netnice (2002-3-30 16:38:00)
这是我从未名码头找到的

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
看到

CathyEagle (2002-3-30 17:14:00)
呵呵呵……我的文章。
哎,主页好久没更新了。
sndkey.pas在d5光盘的info/extra目录下。

netnice (2002-3-30 17:46:00)
去找找
太好了,竟然遇到作者了。看来问题差不多了。

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

CathyEagle (2002-4-1 8:47:00)
Application.OnMessage.

不过,这种方法并不专业。

qdyoung (2002-6-14 12:14:00)
见大富翁FAQ 之 TWebBrowser
http://www.8421.org/article.php?id=178
 
可能是WebBrowser没有考虑到的地方
你可以用TEmbededWeb来代替它! 强烈推荐
或者你可以看看EmbededWeb的源码,就知道怎么解决这个问题了。
http://www.euromind.com/iedelphi/embeddedwb.htm
 
使WebBrowser获得焦点

  TWebBrowser非常特殊,它从TWinControl继承来的SetFocus方法并不能使得它所包含的文档获得焦点,从而不能立即使用Internet Explorer本身具有得快捷键,解决方法如下:<

  procedure TForm1.SetFocusToDoc;
  begin
   if WebBrowser1.Document <> nil then
    with WebBrowser1.Application as IOleobject do
     DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect);
  end;

  除此之外,我还找到一种更简单的方法,这里一并列出:

  if WebBrowser1.Document <> nil then
   IHTMLWindow2(IHTMLDocument2(WebBrowser1.Document).ParentWindow).focus

  刚找到了更简单的方法,也许是最简单的:

  if WebBrowser1.Document <> nil then
   IHTMLWindow4(WebBrowser1.Document).focus

  还有,需要判断文档是否获得焦点这样来做:

  if IHTMLWindow4(WebBrowser1.Document).hasfocus then
 
后退
顶部