unit CustomControldel;interfaceuses
SysUtils, Classes, Controls,Dialogs, Windows;type
TCustomControl1 = class(TCustomControl)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Paint; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure CMWantSpecialKey(var Message: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Standard', [TCustomControl1]);
end;
constructor TCustomControl1.Create(AOwner: TComponent);
begin
inherited;
//
end;destructor TCustomControl1.Destroy;
begin
//
inherited;
end;procedure TCustomControl1.Paint;
begin
inherited;
//
end;
procedure TCustomControl1.KeyDown(var Key: Word; Shift: TShiftState);
begin
ShowMessage('yes');
end;procedure TCustomControl1.CMWantSpecialKey(var Message: TCMWantSpecialKey);
begin
inherited;
if Message.CharCode in [vk_Left..vk_Down] then Message.Result := 1;
end;end.
SysUtils, Classes, Controls,Dialogs, Windows;type
TCustomControl1 = class(TCustomControl)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Paint; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure CMWantSpecialKey(var Message: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Standard', [TCustomControl1]);
end;
constructor TCustomControl1.Create(AOwner: TComponent);
begin
inherited;
//
end;destructor TCustomControl1.Destroy;
begin
//
inherited;
end;procedure TCustomControl1.Paint;
begin
inherited;
//
end;
procedure TCustomControl1.KeyDown(var Key: Word; Shift: TShiftState);
begin
ShowMessage('yes');
end;procedure TCustomControl1.CMWantSpecialKey(var Message: TCMWantSpecialKey);
begin
inherited;
if Message.CharCode in [vk_Left..vk_Down] then Message.Result := 1;
end;end.
to:dyf2001(西风) ( ) 已经设置了。KeyPreView为true了。不行。是不是我的组件中就没有KeyDown事件的缘故。在测试一下。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TmyButton=class(TButton)
private
procedure CMWantSpecialKey(var Message: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
end;
var
Form1: TForm1;implementation{$R *.dfm}
procedure TmyButton.CMWantSpecialKey(var Message: TCMWantSpecialKey); begin
inherited;
// 我们只想处理向左方向键,其它的特殊键都给 Windows 处理
if Message.CharCode = VK_LEFT then
showmessage('left');
end;procedure TForm1.FormCreate(Sender: TObject);
var myBtn: TmyButton;
begin
myBtn:=TmyButton.Create(self);
myBtn.Parent:=self;
myBtn.Caption:='按左键'
end;end.