http://wystec.blog.163.com/blog/static/2961444720088143752123/

Delphi控制WebBrowser可以响应回车键  

2008-09-01 16:37:52|  分类: Delphi|举报|字号 订阅

 
 

 

unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ActiveX, OleCtrls, StdCtrls, SHDocVw;

type
   TForm1 = class(TForm)
     WebBrowser1: TWebBrowser;
     Button1: TButton;
     procedure FormCreate(Sender: TObject);
     procedure Button1Click(Sender: TObject);
   private
     FOleInPlaceActiveObject: IOleInPlaceActiveObject;
     procedure ApplicationEvents1Message(var Msg: TMsg; var Handled: Boolean);
   public
     { Public declarations }
   end;

var
   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(var Msg: TMsg;
   var Handled: Boolean);
const
   DialogKeys: set of Byte = [VK_LEFT, VK_RIGHT, VK_BACK, VK_UP, VK_DOWN,$30..$39, $41..42, $44..$55, $57, $59..$5A];
var
   iOIPAO: IOleInPlaceActiveObject;
   Dispatch: IDispatch;
begin
   { exit if we don‘t get back a webbrowser object }
   if (WebBrowser1 = nil) then
   begin
     Handled := System.False;
     Exit;
   end;

   Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = System.True);

   if (Handled) and (not WebBrowser1.Busy) then
   begin
     if FOleInPlaceActiveObject = nil then
     begin
       Dispatch := WebBrowser1.Application;
       if Dispatch <> nil then
       begin
         Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
         if iOIPAO <> nil then
           FOleInPlaceActiveObject := iOIPAO;
       end;
     end;

     if FOleInPlaceActiveObject <> nil then
       if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and (Msg.wParam in DialogKeys) then
         // nothing - do not pass on the DialogKeys
       else
         FOleInPlaceActiveObject.TranslateAccelerator(Msg);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Application.OnMessage := ApplicationEvents1Message;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   WebBrowser1.Navigate('http://www.wesoho.com');
end;

initialization
OleInitialize(nil);

finalization
OleUninitialize;

end.