delphi 中 实现 ctrl + A~Z 和 Alt + A~Z 组合键的拦截

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 中 实现 ctrl + A~Z 和 Alt + A~Z 组合键的拦截相关的知识,希望对你有一定的参考价值。

delhpi 中 PageControl 有个页面,页1,页2 ,中常有相同的快捷键。焦点再页2,的时候,按先快捷键,Alt + ...的时候,常常弹出页1的事件中。
procedure Tfrmddzl.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_F2: begin
IF PG.ActivePage=TS1 THEN BEGIN
t1.OnClick(nil);
END;
IF PG.ActivePage=TS2 THEN BEGIN
IF TSB1.Enabled THEN TSB1.OnClick(nil);
END;
end;
end;

end;

用以上虚拟键盘,只能单个键值,拦截,怎样才能可以拦截组合键。谢谢!

参考技术A Shift: TShiftState
判断这个shift的取值就可以了

TShiftState = set of (ssShift, ssAlt, ssCtrl,
ssLeft, ssRight, ssMiddle, ssDouble);

if (ssShift in Shift)and(key = vk_F2) then 就是按下了shift+F2本回答被提问者和网友采纳
参考技术B 当按下alt或ctrl键的时候 Shift值是不一样的,通过读取Shift的值和Key的值,可以判断组合键 参考技术C Shift: TShiftState 看一下帮助 参考技术D 如果想实现Ctrl + L
procedure TForm1.Memo4KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = ord('L') ) then begin
SpeedButton44Click(Self);
end;

ctrl + z fg bg

[[email protected] ~]# jobs
[1]+  Stopped                 vncviewer 192.168.1.17:5904
[[email protected] ~]# #ctrl + z
[[email protected] ~]# bg 1
[1]+ vncviewer 192.168.1.17:5904 &
[[email protected] ~]# jobs
[1]+  Running                 vncviewer 192.168.1.17:5904 &
[[email protected] ~]# #bg + 序列号 ----吊到后台运行
[[email protected] ~]# fg 1
vncviewer 192.168.1.17:5904
# fg + 序列号 ------->把程序调到前台

 

以上是关于delphi 中 实现 ctrl + A~Z 和 Alt + A~Z 组合键的拦截的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 中没有像Word里后悔键“Ctrl+Z"

Delphi XE3 Ctrl+Z 也可以撤消插入符号的移动

Delphi中如何实现模拟组合按键,如发送Ctrl+F的按键

Delphi中如何监视键盘输入

linux中ctrl+z,ctrl+d,ctrl+c的区别

在Delphi中 如何在字符串中表示 CTRL+ENTER 组合键?