KeyDown KeyPress难题 - 如何在Ctrl +空格中取消空格

时间:2016-01-05 22:20:53

标签: delphi delphi-xe4

如果我理解正确,KeyDown事件无法阻止字符键(空格)传递给控件。

但是KeyPress事件并没有告诉我Ctrl是否已关闭。

但是如果Ctrl关闭,我只需要取消空格。

如果ctrl也已关闭,如何阻止编辑控件接收空格键?

目的:我有一个文本框,我正在从中提出搜索建议。我想使用快捷键ctrl + space弹出建议。但在这种情况下,我不想在编辑文本中添加空格。

2 个答案:

答案 0 :(得分:5)

  

KeyPress事件不会告诉我Ctrl是否已关闭。

不,但您可以使用Win32 GetKeyState()功能。

  

如果ctrl也已关闭,如何阻止编辑控件接收空格键?

像这样:

procedure TForm58.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = ' ') and (GetKeyState(VK_CONTROL) < 0) then
  begin
    Key := #0;
    // do something...
  end;
end;

答案 1 :(得分:1)

  

我有一个文本框,我正在从中提出搜索建议。我想使用快捷键ctrl + space弹出建议。但在这种情况下,我不想在编辑文本中添加空格。

例如,使用附加到操作的快捷方式处理 CTRL + SPACE 输入。这样处理密钥将无法到达编辑控件。