关于SendMessage(20分)

  • 主题发起人 主题发起人 bankemi
  • 开始时间 开始时间
B

bankemi

Unregistered / Unconfirmed
GUEST, unregistred user!
点击一个Button:<br>SendMessage(Button5.Handle,BM_CLICK,0,0);<br>向Button5传送一个单击事件,成功<br>但是<br>SendMessage(WebBrowser1.Handle,BM_CLICK,0,0);<br>向WebBrowser1传送一个单击事件,为什么不好使呢??<br>要怎样可以??不是.Handle吗??<br>高手救命啊!!!!
 
发送mousedown<br>发送mouseup<br>模拟一下。
 
SendMessage(WebBrowser1.Handle,BM_CLICK,0,0);<br>这个为什么不行呢???
 
6、使WebBrowser获得焦点<br><br>  TWebBrowser非常特殊,它从TWinControl继承来的SetFocus方法并不能使得它所包含的文档获得焦点,从而不能立即使用Internet Explorer本身具有得快捷键,解决方法如下:&lt;<br><br>  procedure TForm1.SetFocusToDoc;<br>  begin<br>   if WebBrowser1.Document &lt;&gt; nil then<br>    with WebBrowser1.Application as IOleobject do<br>     DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect);<br>  end;<br><br>  除此之外,我还找到一种更简单的方法,这里一并列出:<br><br>  if WebBrowser1.Document &lt;&gt; nil then<br>   IHTMLWindow2(IHTMLDocument2(WebBrowser1.Document).ParentWindow).focus<br><br>  刚找到了更简单的方法,也许是最简单的:<br><br>  if WebBrowser1.Document &lt;&gt; nil then<br>   IHTMLWindow4(WebBrowser1.Document).focus<br><br>  还有,需要判断文档是否获得焦点这样来做:<br><br>  if IHTMLWindow4(WebBrowser1.Document).hasfocus then<br><br>--------------------------------------------------------------------------------------------------------<br><br>7、点击“提交”按钮<br><br>  如同程序里每个窗体上有一个“缺省”按钮一样,Web页面上的每个Form也有一个“缺省”按钮——即属性为“Submit”的按钮,当用户按下回车键时就相当于鼠标单击了“Submit”。但是TWebBrowser似乎并不响应回车键,并且,即使把包含TWebBrowser的窗体的KeyPreview设为True,在窗体的KeyPress事件里还是不能截获用户向TWebBrowser发出的按键。<br>  我的解决办法是用ApplicatinEvents构件或者自己编写TApplication对象的OnMessage事件,在其中判断消息类型,对键盘消息做出响应。至于点击“提交”按钮,可以通过分析网页源代码的方法来实现,不过我找到了更为简单快捷的方法,有两种,第一种是我自己想出来的,另一种是别人写的代码,这里都提供给大家,以做参考。<br><br>  A、用SendKeys函数向WebBrowser发送回车键<br>    在Delphi 5光盘上的Info/Extras/SendKeys目录下有一个SndKey32.pas文件,其中包含了两个函数SendKeys和AppActivate,我们可以用SendKeys函数来向WebBrowser发送回车键,我现在用的就是这个方法,使用很简单,在WebBrowser获得焦点的情况下(不要求WebBrowser所包含的文档获得焦点),用一条语句即可:<br><br>   Sendkeys('~',true);// press RETURN key<br><br>   SendKeys函数的详细参数说明等,均包含在SndKey32.pas文件中。<br><br>  B、在OnMessage事件中将接受到的键盘消息传递给WebBrowser。<br><br>   procedure TForm1.ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean);<br>   {fixes the malfunction of some keys within webbrowser control}<br>   const<br>    StdKeys = [VK_TAB, VK_RETURN]; { standard keys }<br>    ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { extended keys }<br>    fExtended = $01000000; { extended key flag }<br>   begin<br>    Handled := False;<br>    with Msg do<br>    if ((Message &gt;= WM_KEYFIRST) and (Message &lt;= WM_KEYLAST)) and<br>     ((wParam in StdKeys) or<br>     {$IFDEF VER120}(GetKeyState(VK_CONTROL) &lt; 0) or {$ENDIF}<br>     (wParam in ExtKeys) and<br>     ((lParam and fExtended) = fExtended)) then<br>    try<br>     if IsChild(Handle, hWnd) then { handles all browser related messages }<br>     begin<br>      with {$IFDEF VER120}Application_{$ELSE}Application{$ENDIF} as<br>        IOleInPlaceActiveObject do<br>       Handled := TranslateAccelerator(Msg) = S_OK;<br>       if not Handled then<br>       begin<br>        Handled := True;<br>        TranslateMessage(Msg);<br>        DispatchMessage(Msg);<br>       end;<br>       end;<br>    except<br>    end;<br>   end; // MessageHandler<br><br>  (此方法来自EmbeddedWB.pas)<br><br>--------------------------------------------------------------------------------------------------------
 
TWebBrowser本身没有ONCLICK属性,你可以修改它的源码,加上Property Onclick;<br>使用它继承类的ONCLICK属性
 
上面这位仁兄对Delphi很了解了。在下佩服。。<br>
 
TWebBrowser本身没有ONCLICK属性,你可以修改它的源码,加上Property Onclick;<br>使用它继承类的ONCLICK属性<br><br>这个要怎样弄呢??
 
SendMessage(WebBrowser1.Handle,BM_CLICK,0,0);<br>不行,要用 <br>SendMessage(WebBrowser1.Handle,WM_KEYDOWN,13,0);<br><br>13表示回车。
 

Similar threads

S
回复
0
查看
832
SUNSTONE的Delphi笔记
S
S
回复
0
查看
791
SUNSTONE的Delphi笔记
S
D
回复
0
查看
926
DelphiTeacher的专栏
D
后退
顶部