如何在 VCL TMemo 控件的按键事件处理程序中检测 Ctrl+Alt+x?

法杰拉·塔基亚

我创建了一个带有单个 TMemo 控件的 Delphi VCL 应用程序,这就是我拥有的代码。我用它来检测Ctrl+somekey. 例如,当我按下 时Ctrl+x,它会弹出警报ctrl,并且Ctrl+x' 的效果(剪切)被取消。

function IsKeyDown(Key: Integer): Boolean;
begin
  Result := (GetAsyncKeyState(Key) and (1 shl 15) > 0);
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if IsKeyDown(VK_CONTROL) then
  begin
    ShowMessage('ctrl');
    Key := #0;
  end;

end;

但是,当我将其更改为以下内容时:

function IsKeyDown(Key: Integer): Boolean;
begin
  Result := (GetAsyncKeyState(Key) and (1 shl 15) > 0);
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if IsKeyDown(VK_CONTROL) and IsKeyDown(VK_MENU) then
  begin
    ShowMessage('ctrl+alt');
    Key := #0;
  end;

end;

它不再起作用了。我需要的是检测像Ctrl+Alt+f. 我知道我可以使用 TActionList,但我只想知道为什么我的代码不起作用。

肯·怀特

您应该改用OnKeyDown它,它为您提供键值和修饰键。我已经在下面的代码中演示了如何同时捕获一个修饰键和多个修饰键。

uses
  { Needed for virtual key codes in recent Delphi versions. }
  System.UITypes;  
                 

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; 
    Shift: TShiftState);
begin
  if (Key = vkX) and ([ssCtrl] = Shift) then
  begin
    Key := 0;
    ShowMessage('Got Ctrl+X');
  end
  else if (Key = vkZ) and ([ssCtrl, ssAlt] = Shift) then
  begin
    Key := 0;
    ShowMessage('Got Ctrl+Alt+Z');
  end;
end; 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在reactjs click事件中检测Click + [Shift,Ctrl,Alt]?

如何在VirtualBox中按Ctrl + Alt + Delete?

如何在 Ubuntu 18.04 中禁用 Ctrl+Alt+S?

如何将Ctrl + Alt + F1(和其他特殊按键)发送到X窗口?

如何捕捉Ctrl + Alt + RShftKey

如何启用Ctrl + Alt + Backspace?

如何*禁用* Ctrl + Alt + Backspace?

如何从tty(Ctrl + Alt + F1-F6)启动GUI应用程序(在Ctrl + Alt + F7中)

为X启用Ctrl + Alt + Del

使用Ctrl + Enter清空TMemo

在visual studio代码中如何在组合[alt + ctrl + ']中组合键[`]?

如何在Windows 8中通过远程桌面发送Ctrl + Alt + Delete?

如何在PyCharm中禁用AltGr到Alt和Ctrl键的转换?

如何在GNOME 3.8中禁用快捷键Ctrl-Alt-Arrow

如何在gnome-shell中禁用Ctrl-Alt-D?

如何在Tmux中绑定Ctrl-Alt- [0-9]?

如何在Debian 7中将AtlGr绑定到Ctrl + Alt

如何在systemd中给CTRL-ALT-DEL宽限期

如何在Windows 7上禁用CTRL ALT键?

在Kubuntu 18.04 Bionic中,Ctrl + Alt + F7不会切换回X会话

如何从TMemo控件中删除文本找到的行?

按键事件“ AltGr + S”被视为“ Ctrl + alt + s”

如何在 OS X 上的 RStudio 中覆盖 ctrl-p 和 ctrl-n?

如何在C#控制台应用程序中将修改键(Ctrl,Alt,Shift)作为单键捕获?

如何在Ubuntu中使Ctrl + Alt像Alt gr一样工作?

在Windows 10中禁用CTRL + ALT + L

CTRL键检查JavaScript中的正确ALT

Ctrl + Alt + F1后返回X会话

关于zsh中的Alt + x以及如何将Alt + x绑定到其他东西