Chinaunix首页 | 论坛 | 博客
  • 博客访问: 949887
  • 博文数量: 108
  • 博客积分: 3243
  • 博客等级: 中校
  • 技术积分: 964
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-15 22:09
文章分类

全部博文(108)

文章存档

2020年(2)

2019年(1)

2018年(2)

2017年(9)

2016年(20)

2015年(1)

2013年(1)

2012年(12)

2011年(28)

2010年(27)

2009年(4)

2008年(1)

分类:

2009-09-21 20:54:02

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('');
end;

initialization
OleInitialize(nil);

finalization
OleUninitialize;

end.

 

阅读(2720) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~