TWebBrowser响应回车事件问题

delphi 中 webbrowser1 浏览器中浏览网页,输入文本不能用ENTER键,无论你怎么按ENTER键,它都不会换行,还有,右键菜单的复制,和粘贴根本不是那么一回事,为什么呢?为什么??答案很简单,因为webbrowser不支持回车键响应,必须加上代码自己处理才行。参考下例:


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
   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
     begin
       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;
end;

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

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

initialization
OleInitialize(nil);

finalization
OleUninitialize;

end.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值