我自己编写的一个控件,大致模型如下://定义
TSmallImage=Class(TCustomControl)
...
end;//创建
procedure TViewManager.CreateImg;
var
img:TSmallImage;
begin
img:=TSmallImage.Create(panel1);
img.OnKeyDown := ImgKeyDown;
end;//事件
procedure TViewManager.ImgKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
ShowMessage('ok!');
end;procedure TFrmMain.FormShow...
var
VM:TViewManager;
begin
VM := TViewManager.Create;
...
VM.CreateImg;
end;
大致思路是,在主窗体显示时利用类ViewManager的实例对象vm,调用其CreateImg过程动态创建一个TSmallImage对象放到窗体Panel1面板上,并且动态设置了其OnKeyDown事件为自定义事件。问题是:程序运行后,在TSmallImage上按键盘上任何按键都不起作用,不触发ShowMessage('ok!');需要注意的是我的TSmallImage里并没有显式定义OnKeyDown,因为从其父类TCustomControl继承而来的我以为是主窗体的KeyPreview的问题,但是改了一样不解决问题。谁知道的说下,谢谢!!!
TSmallImage=Class(TCustomControl)
...
end;//创建
procedure TViewManager.CreateImg;
var
img:TSmallImage;
begin
img:=TSmallImage.Create(panel1);
img.OnKeyDown := ImgKeyDown;
end;//事件
procedure TViewManager.ImgKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
ShowMessage('ok!');
end;procedure TFrmMain.FormShow...
var
VM:TViewManager;
begin
VM := TViewManager.Create;
...
VM.CreateImg;
end;
大致思路是,在主窗体显示时利用类ViewManager的实例对象vm,调用其CreateImg过程动态创建一个TSmallImage对象放到窗体Panel1面板上,并且动态设置了其OnKeyDown事件为自定义事件。问题是:程序运行后,在TSmallImage上按键盘上任何按键都不起作用,不触发ShowMessage('ok!');需要注意的是我的TSmallImage里并没有显式定义OnKeyDown,因为从其父类TCustomControl继承而来的我以为是主窗体的KeyPreview的问题,但是改了一样不解决问题。谁知道的说下,谢谢!!!
if Sender is TSmallImage then
Windows.SetFocus();
if Sender is TSmallImage then
Windows.SetFocus(TSmallImage(Sender).Handle);
begin
//自定义按键处理
if Message.CharCode in [VK_UP,VK_DOWN,VK_HOME,VK_END,VK_PRIOR,VK_NEXT,VK_LEFT,VK_RIGHT] then
begin
Message.Result := 1;
end;
end;这样就可以了。不相信的或者没做过的可以试验下。很抱歉你们的回答不负责任,不给分了