在组件的OnKeyDown、OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程中,有一个TShiftState类型的变量Shift ,

TShiftState类型定义如下:

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

所以根据Shift的值就可以判断当键盘上的键按下时Shift 、Alt和Ctrl键的状态,或者按下鼠标左键、鼠标右键、鼠标中键、任意按键双击时的状态。

下面的例程说明了如何检测Shift、Alt和Ctrl 键是否按下。

通过菜单File | New Application 创建一个新的工程,在窗体中添加一个StatusBar组件,并在状态栏编辑器中为其添加6 个面板。

然后为窗体Form1添加OnKeyDown 、OnKeyUp 、OnMouseDown和OnMouseUp等事件的处理过程如下:

OnKeyDown事件:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Shift>=[ssShift] then  {如果按下了Shift键则在第一个面板上显示Shift}StatusBar1.Panels[0].Text:= 'Shift'; if Shift>=[ssAlt] then {如果按下了Alt键则在第二个面板上显示Alt} StatusBar1.Panels[1].Text:= 'Alt'; if Shift>=[ssCtrl] then {如果按下了C t r l 键则在第三个面板上显示Ctrl}StatusBar1.Panels[2].Text:= 'Ctrl'; end; 

OnKeyUp事件:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
  begin  
  {在Shift、Alt 和Ctrl键弹起时清除状态栏中相应面板上的内容 }
    if not(Shift>=[ssShift]) then 
      StatusBar1.Panels[0].Text:=' '; 
  
    if not(Shift>=[ssAlt]) then 
      StatusBar1.Panels[1].Text:=' '; 
  
   if not(Shift>=[ssCtrl]) then 
     StatusBar1.Panels[2].Text:=' '; 
 end;

OnMouseDown事件:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); 
begin

if Shift>=[ssLeft] then  {按下了左键则在第四个面板上显示left}
      Statusbar1.Panels[3].Text:= 'left'; 
  
    if Shift>=[ssMiddle] then {如果按下了中键则在第五个面板上显示Middle}
      StatusBar1.Panels[4].Text:= 'Middle'; 
  
   if Shift>=[ssDouble] then {如果是双击则在第六个面板上显示Double }
     StatusBar1.Panels[5].Text:='Double'; 
 end; 
13

OnMouseUp事件:

1 procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); 
 2 begin 
 3 {在鼠标按键弹起时清除状态栏中相应面板上的内容 }
 4   if not(Shift>=[ssLeft]) then  
 5     StatusBar1.Panels[3].Text:=' '; 
 6 
 7   if not(Shift>=[ssMiddle]) then 
 8     StatusBar1.Panels[4].Text:=' '; 
 9 
10   if not(Shift>=[ssDouble]) then 
11     StatusBar1.Panels[5].Text:=' '; 
12 end;

程序运行后,读者可以尝试按下Shift、Alt 和Ctrl键,单击或双击鼠标左键、中键和右键,观察状态栏上各面板的显示。

判断shift,ctrl,alt键是否按下相关推荐

  1. BCB key事件中判断Shift、Alt、Ctrl状态

    BCB key事件中判断Shift.Alt.Ctrl状态: 类似此事件中 void __fastcall TForm1::keydown(TObject *Sender, WORD &Key, ...

  2. ai自由变换工具使用介绍:配合Ctrl、Shift、Alt键使用自由变换工具

    内容提要:文章介绍ai自由变换工具的使用要点,单击加Ctrl.Shift.Alt键配合使用自由变换工具.对ai感兴趣的朋友可加ai学习交流群:142574315 ai教程中自由变换工具和photosh ...

  3. python判断按键是否按下_python – 如何检查键修饰符是否被按下(shift,ctrl,alt)?

    您所需要做的就是在您的按钮处理程序中检查 QApplication.keyboardModifiers,并根据需要选择其他操作: from PyQt4 import QtGui, QtCore cla ...

  4. windows的Alt键一直处于按下状态,解决,亲测有用

    1.键盘右边alt按下就好了 2.alt+ctrl+del 3.左右两个alt一起按下来

  5. CTRL、SHIFT、ALT及WIN键的功能

    CTRL.SHIFT.ALT及WIN键的功能 Ctrl是英文control的缩写,表示控制.在电脑里,多和其他键配合使用, 方便快捷. CTRL+X 剪切被选择的项目到剪贴板 CRTL+C 复制被选择 ...

  6. Ctrl+Alt组合键在VMware虚拟机中如何使用

    http://kb.vmware.com/kb/1011705 现象: Ctrl+Alt+其他键的组合并不如期生效,比如Ctrl+Alt+Esc,Ctrl+Alt+F2(Linux切换终端) 分析: ...

  7. 易语言添加ctrl c键,易语言操作快捷键汇总

    以下是关于易语言的快捷键内容: 预览被设计窗口 Ctrl+Enter 运行 F5 终止运行 Ctrl+F5 编译 F7 菜单编辑器 Ctrl+E 即时帮助 F1 在编辑窗口之间跳转.按下 Ctrl 键 ...

  8. 键盘上ALT键的妙用

    Alt键是一个Windows操作系统上的古老的按键.大家可能会知道一点Alt键的功能,但是你是否知道它所有的功能呢?又是否能灵活地掌握它们呢?今天就来为大家讲讲我们平时最常用的Windows操作系统中 ...

  9. Delphi 屏蔽系统的Ctrl+Alt+Del

    从网上搜集整理,直接调用函数RunFuckCAD屏蔽Ctrl+Alt+Del,一般在程序创建时调用,在程序退出时调用StopFuckCAD ,取消屏蔽Ctrl+Alt+Del. {---------- ...

最新文章

  1. leetcode算法第三题
  2. VC6中编译参数设置
  3. Scrapy项目 - 数据简析 - 实现腾讯网站社会招聘信息爬取的爬虫设计
  4. FlexChart: 针对AJAX的Flash绘图应用
  5. 权限管理系统系列之序言
  6. Android日志[进阶篇]四-获取错误报告
  7. SQL2005服务器上安装SQL2008失败
  8. 软件安装及软件包管理
  9. iOS UIControl控件
  10. linux 显卡驱动错误,ubuntu下 Nvidia显卡驱动错误的解决
  11. 树莓派安装MPlayer播放器
  12. 飘逸的python - 赛程表算法
  13. 编码通信与魔术初步(一)——通信浅谈
  14. background-image图片不存在时显示默认照片
  15. 阿里云发送短信功能(环境搭建篇)
  16. U盘启动如何进入pe
  17. typescript egg mysql_Egg.js egg-mysql 连接MySQL 报 AppWorkerDiedError 错误
  18. MySQL的yum源
  19. 面向对象的三大基本特征和六大基本原则
  20. Leetcode917:仅仅反转字母(simple)

热门文章

  1. 【jmeter】--- jmeter汉化方式
  2. 4月11号浦发银行笔试回忆
  3. 机器学习之Artificial Neural Networks
  4. Matlab与Arduino车牌识别的完整系统(2)
  5. 8.4 Unitary Operators
  6. 【第三方库】PHP实现创建PDF文件和编辑PDF文件
  7. 为什么总是在电路里摆两个0.1uF和0.01uF的电容?
  8. 一个人时善待自己_善待彼此
  9. Seate 1.4.2运行seata-server.bat数据库连接失败解决方案
  10. Git应该怎么读?这里帮你解决全部计算机词汇发音问题!