程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi的TWebBrowser編程綜述(5)

Delphi的TWebBrowser編程綜述(5)

編輯:Delphi

7、點擊“提交”按鈕

如同程序裡每個窗體上有一個“缺省”按鈕一樣,Web頁面上的每個Form也有一個“缺省”按鈕——即屬性為“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.pas)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved