dhunter_oy

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

webbrowser响应回车键

unit Unit11;

interface

uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, OleCtrls, SHDocVw, ComCtrls, activeX;

type   TForm11 = class(TForm)     pgc1: TPageControl;     ts1: TTabSheet;     ts2: TTabSheet;     wb1: TWebBrowser;     wb2: TWebBrowser;     procedure FormCreate(Sender: TObject);     procedure pgc1Change(Sender: TObject);   private     { Private declarations }     //当前激活的WebBrowser控件     {当激活的WebBrowser控件变化时更新该字段的值, 在IEMessageHandler中使用}     FCurrBW : TWebBrowser;

    procedure IEMessageHandler(var Msg: TMsg; var Handled: Boolean);   public     { Public declarations }   end;

var   Form11: TForm11;

implementation

{$R *.dfm} procedure TForm11.IEMessageHandler(var Msg: TMsg; var Handled: Boolean); const   StdKeys = [VK_TAB, VK_RETURN]; { 标准键 }   ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { 扩展键 }   fExtended = $01000000; { 扩展键标志 } begin   Handled := False;

  if (FCurrBW = nil) then   begin     Handled := False;     Exit;   end;

  with Msg do   begin     if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and       ((wParam in StdKeys) or (GetKeyState(VK_CONTROL) < 0) or       (wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then     begin       try         with FCurrBW.Application as IOleInPlaceActiveObject do           Handled := TranslateAccelerator(Msg) = S_OK;

          if not Handled then           begin             Handled := True;             TranslateMessage(Msg);             DispatchMessage(Msg);           end;

      except       end;     end;   end;

end; procedure TForm11.pgc1Change(Sender: TObject); begin   case pgc1.ActivePageIndex of     0 : FCurrBW := wb1;     1 : FCurrBW := wb2;   end; end;

procedure TForm11.FormCreate(Sender: TObject); begin   FCurrBW := wb1;   Application.OnMessage := IEMessageHandler;   wb1.Navigate('http://bbs.csdn.net/topics/390341172?page=1#post-393434373');   wb2.Navigate('http://bbs.csdn.net/topics/390341172?page=1#post-393434373'); end;

end. ======================================================================================

Delphi WebBrowser 响应回车Enter键(兼容Silverlight)

在Form放置一个ApplicationEvents控件,  在OnMessage事件中写下面的代码:

uses   ActiveX

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;   var Handled: Boolean);

const   StdKeys = [VK_TAB, VK_RETURN, VK_DELETE, VK_BACK]; { standard   keys }   ExtKeys = [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;

 

posted on 2015-11-27 08:58  dhunter_oy  阅读(480)  评论(0)    收藏  举报