我想要我的窗体处理箭头键,我可以做 – 只要表单上没有按钮.为什么是这样?
解决方法
主要消息由收到这些消息的控件本身处理,这就是为什么当您在表单上没有收到消息的按钮时.所以通常你必须对这些控件进行子类化,但是,如果表单感兴趣,则VCL很适合请求父母表单做什么:
type TForm1 = class(TForm) .. private procedure DialogKey(var Msg: TWMKey); message CM_DIALOGKEY; .. procedure TForm1.DialogKey(var Msg: TWMKey); begin if not (Msg.CharCode in [VK_DOWN,VK_UP,VK_RIGHT,VK_LEFT]) then inherited; end;
François编辑:要回答OP原始问题,您需要以某种方式调用KeyDown,以便他的事件代码可以工作(可以自由编辑;对于注释来说太长了).
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } procedure DialogKey(var Msg: TWMKey); message CM_DIALOGKEY; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DialogKey(var Msg: TWMKey); begin case Msg.CharCode of VK_DOWN,VK_LEFT: if Assigned(onKeyDown) then onKeyDown(Self,Msg.CharCode,KeyDataToShiftState(Msg.KeyData)); else inherited end; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_DOWN: Top := Top + 5; VK_UP: Top := Top - 5; VK_LEFT: Left := Left - 5; VK_RIGHT: Left := Left + 5; end; end;
原文地址:https://www.jb51.cc/delphi/101436.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。