如何在运行时使用键盘在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

我添加了一个在运行时使用鼠标移动控件的选项,该选项基于,并且运行良好

但是我试图找到一些代码来完成同样的操作,但是使用键盘——就像在设计时移动组件一样(只移动)


如何做到这一点?

如果您知道如何完成不同的部分,这是非常容易的

  • 创建一个新的VCL应用程序

  • 将一个
    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包含的信息太少,我们无法确切知道解决方案是什么。