【发布时间】:2020-11-26 14:03:13
【问题描述】:
【问题讨论】:
标签: delphi keyboard controls delphi-2010
【问题讨论】:
标签: delphi keyboard controls delphi-2010
如果你知道如何做它的不同部分,这很容易。
创建一个新的 VCL 应用程序。
在表单上添加TShape。
将以下OnKeyDown 事件处理程序添加到表单中:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
D = 2;
begin
case Key of
VK_UP:
Shape1.Top := Shape1.Top - D;
VK_DOWN:
Shape1.Top := Shape1.Top + D;
VK_LEFT:
Shape1.Left := Shape1.Left - D;
VK_RIGHT:
Shape1.Left := Shape1.Left + D;
end;
end;
话虽如此:
通过在窗体上移动控件来创建动画是错误的。
相反,如果您想创建动画,正确的做法是使用 GDI、GDI+、OpenGL 或 DirectX/Direct2D 手动绘制它们。 Here 是我如何做到这一点的标准示例。
【讨论】:
KeyPreview 属性设置为 True。
KeyPreview = True 表明你没有以最合适的方式做事。
How can I move a control in Delphi at runtime using the keyboard? 因此我认为 OP 已经在表单上有多个控件。
TLabel,TShape,TImage,...),在这种情况下一切正常。另一方面,如果表单包含类TButton、TRadioButton、TCheckbox 等的控件,那么首先窃取箭头键是非常不可取的,因为它们用于移动焦点。更糟糕的是,如果你有TEdit、TListBox、TComboBox、TMemo、TRichEdit、TListView 等,箭头键是它们自己的 UI 不可或缺的一部分。在这种情况下,你不能偷箭。在这两者之间,有一个小区域,KeyPreview 确实有用。