如何在运行时使用键盘在Delphi中移动控件?
我添加了一个在运行时使用鼠标移动控件的选项,该选项基于,并且运行良好 但是我试图找到一些代码来完成同样的操作,但是使用键盘——就像在设计时移动组件一样(只移动)如何在运行时使用键盘在Delphi中移动控件?,delphi,keyboard,controls,delphi-2010,Delphi,Keyboard,Controls,Delphi 2010,我添加了一个在运行时使用鼠标移动控件的选项,该选项基于,并且运行良好 但是我试图找到一些代码来完成同样的操作,但是使用键盘——就像在设计时移动组件一样(只移动) 如何做到这一点?如果您知道如何完成不同的部分,这是非常容易的 创建一个新的VCL应用程序 将一个t形状放在表单上 将以下OnKeyDown事件处理程序添加到表单中: 过程TForm1.FormKeyDown(发送方:TObject;变量关键字:Word; 换档:t换档状态); 常数 D=2; 开始 案例关键 VK_UP: Shap
如何做到这一点?如果您知道如何完成不同的部分,这是非常容易的
t形状
放在表单上
OnKeyDown
事件处理程序添加到表单中:
过程TForm1.FormKeyDown(发送方:TObject;变量关键字:Word;
换档:t换档状态);
常数
D=2;
开始
案例关键
VK_UP:
Shape1.Top:=Shape1.Top-D;
VK_DOWN:
Shape1.Top:=Shape1.Top+D;
VK_左:
Shape1.Left:=Shape1.Left-D;
右图:
Shape1.Left:=Shape1.Left+D;
终止
终止
然而,尽管如此: 通过移动表单上的控件来创建动画是错误的。
相反,如果要创建动画,正确的做法是使用GDI、GDI+、OpenGL或DirectX/Direct2D手动绘制动画。这是我的标准示例。只有在没有其他组件能够自行处理键盘输入的情况下,您的示例才会起作用。为了允许窗体在这种情况下处理键盘输入,您还应该将所述窗体的
KeyPreview
属性设置为True。@SilverWarior:Correct。但通常情况下,当表单处理箭头键时,它根本不使用任何控件:它只是一个绘图画布。我几乎认为<代码> KEYPREVIEW = Trime是一个指示,说明你不是用最合适的方式来做事情。问题的标题是“代码> >如何在键盘上使用键盘?< /CODE >在Delphi中移动一个控件。因此,我假设OP已经在表单上有多个控件。非窗口控件(TLabel
,TShape
,TImage
,…),在这种情况下,一切正常。另一方面,如果表单包含类TButton
、TRadioButton
、TCheckbox
等控件,那么首先窃取箭头键是非常不可取的,因为它们用于移动焦点。更糟糕的是,如果您有TEdit
,TListBox
,TComboBox
,TMemo
,TRichEdit
,TListView
等,箭头键是它们自己的UI的一部分。在这种情况下,你不能偷箭。在这两者之间,有一个很小的区域,KeyPreview
确实有用。问题是OP包含的信息太少,我们无法确切知道解决方案是什么。