将键盘事件添加到TPaintBox组件

时间:2015-05-24 10:07:57

标签: delphi

我在我的应用程序中使用SKView * skView = (SKView *)self.view; // ... GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"]; scene.scaleMode = SKSceneScaleModeAspectFill; scene.size = skView.bounds.size; [skView presentScene:scene]; 。已经设置了几个鼠标事件处理程序:鼠标按下,鼠标按下等。但是,我还想响应键盘输入:如果用户按下任何功能键,我想执行一个单独的过程(事件处理程序)而不是Mouse *事件处理函数。但我也需要在新程序中使用鼠标位置。

我如何对此进行编码,因为TPaintBox不支持任何按键事件?

TPaintBox

1 个答案:

答案 0 :(得分:8)

TPaintBox不是来自TWinControl,而是来自TGraphicControl,这意味着它无法接收输入焦点,因此它没有对键盘事件作出反应的功能。

可能的解决方案:

  • 实现PaintBox所在的父窗体的OnKeyPress事件,并启用窗体的KeyPreview属性。
  • 使用特定键设置为其ShortCut属性添加操作,并实现其OnExecute事件处理程序。 (另见:When does a ShortCut fire?)。
  • 为MainForm或Application实现OnShortCut事件处理程序。
  • 将PaintBox放置并对齐到TWinControl并实现该容器的OnKeyPress事件。

对于鼠标和键盘输入的组合,请检查鼠标事件的Shift参数或使用Win32 GetKeyState()GetKeyboardState()函数。