我自已做了一个控件,想让其响应键盘事件,可是却不行,我不知道还有哪里没有设置,谁帮帮我,以下是声明部分代码type
TMyImage = class(TCustomPanel)
private
FPicture:TPicture;
procedure Setpicture(const Value: TPicture);
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
protected
procedure Paint; override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property picture:TPicture read Fpicture write Setpicture;
property onKeyDown;
property OnKeyUp;
property OnClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property Visible;
end;
TMyImage = class(TCustomPanel)
private
FPicture:TPicture;
procedure Setpicture(const Value: TPicture);
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
protected
procedure Paint; override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property picture:TPicture read Fpicture write Setpicture;
property onKeyDown;
property OnKeyUp;
property OnClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property Visible;
end;
TMyImage = class(TCustomPanel)
private
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
property OnKeyPress: TKeyPressEvent read FOnKeyPress write FOnKeyPress;
property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp;
。。
TMyPanel = class(TCustomPanel)
...
Public
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
property OnKeyPress: TKeyPressEvent read FOnKeyPress write FOnKeyPress;
property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp;
...
End;type
TMyImage = class(TMyPanel)
private
FPicture:TPicture;
procedure Setpicture(const Value: TPicture);
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
protected
procedure Paint; override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property picture:TPicture read Fpicture write Setpicture;
property onKeyDown;
property OnKeyUp;
property OnClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property Visible;
end;
控件声明部分如下:type
TMyImage = class(TCustomPanel)
private
FPicture:TPicture;
procedure Setpicture(const Value: TPicture);
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
protected
procedure Paint; override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property picture:TPicture read Fpicture write Setpicture;
property OnClick;
property OnKeyDown;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property Visible;
property TabStop;//添加了这个属性
end;测试代码如下:procedure TForm1.MyImage1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
s:string;
begin
s:='OnKeyDown:Key='+inttostr(Key);;
Edit1.Text:=s; //其它键可以,但就是方向键和Tab键不起作用,只要一按下它们就转换焦点到其它控件上了
end;procedure TForm1.MyImage1Click(Sender: TObject);
begin
MyImage1.SetFocus;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MyImage1.TabStop:=false; //设为false也没屏幕掉方向键和Tab键
end;
另外如果要处理Tab和方向键有两种方法
A.处理WM_GETDLGCODE消息.
Inherited;
Message.Result := Message.Result or DLGC_WANTTAB or DLGC_WANTARROWS;
B.可以处理CN_KeyDown和CN_KeyUp消息.
procedure TForm1.MyImage1Click(Sender: TObject);
begin
MyImage1.SetFocus;
end;A.处理WM_GETDLGCODE消息.
Inherited;
Message.Result := Message.Result or DLGC_WANTTAB or DLGC_WANTARROWS;
我给我具体点好吗,这个在哪儿用