首页 > 解决方案 > 在键盘上的按键上执行按钮单击

问题描述

当我按下键盘上的一个键时,我想在我的应用程序中单击按钮。它可能通过使用 If 函数来完成。我不确定哪个变量等于按键监控。

标签: delphidelphi-7

解决方案


使用操作列表

您可能会发现以下示例很有启发性:

  1. 创建一个新的 VCL 应用程序。

  2. 在表格上放一个TActionList

  3. 双击TActionList并创建一个新动作。将其设置NameaGreet,将其设置ShortCutF1,并将其Caption设置为Greet!

  4. 双击列表框中的操作以创建其OnExecute处理程序。

  5. 将以下代码添加到处理程序:ShowMessage('Welcome!')

  6. 返回到可视表单编辑器并TButton在表单上放置一个。

  7. 将其Action属性设置为aGreet

  8. 运行应用程序。

现在,如您所见,按 F1 与单击按钮的效果相同。

欢迎来到精彩的行动清单世界!

仅使用加速器

上面的例子假设你想为你的按钮使用一个热键。但您也应该注意加速键。

几十年来,在 Microsoft Windows 中,标准是OKCancel之外的所有按钮都有加速键。例如,按钮的标题可能是&Save,这意味着带有S下划线并且按下Alt+S将“单击”按钮。

如果这就是你所需要的,你就不需要使用动作(尽管动作有很多其他的原因),你也不需要写一行代码。只需在按钮的标题中添加一个 & 字符!

在精心设计的 Win32 GUI 中,除了默认 ( OK ) 和取消 ( Cancel ) 按钮之外的所有按钮都应该有这样的访问键。像我这样的键盘用户在需要按 27 次制表键或使用计算机的指点设备时会非常恼火。

其他方法

当然,您也可以为您的表单创建一个OnKeyDownOnKeyPress事件处理程序,查看键是VK_F1(例如)还是SCtrl按下(另一个示例),如果是,则调用与按钮调用相同的代码。但这可能是一种不太理想的方法,如果表单具有窗口子控件(提示:查看KeyPreview属性),它会稍微复杂一些。

只是一些例子:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  case Key of
    VK_F1:                                                       // F1
      ShowMessage('You want help?');
    VK_F2:                                                       // F2
      ShowMessage('You want to rename something?');
  end;

  if (Key = Ord('S')) and (ssCtrl in Shift) then                 // Ctrl + S
    ShowMessage('Time to save?');

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    ^A:                                                          // Ctrl + A
      ShowMessage('Select all!');
    'p':                                                         // P
      ShowMessage('A pause, perhaps?');
  end;
end;

推荐阅读