文档章节

TMainMenu 类[五] - 快捷键的记录方式

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 381
阅读 1
收藏 0
我们从 Form 的源码中看到, 指定的快捷键是一个数字, 譬如 Ctrl+A, 对应着数字: 16449
其实这是一个 Word 类型的数字; 快捷键的参数是 TShortCut 类型的, 它定义在 Classes 单元的第92行(Delphi 2007):
TShortCut = Low(Word)..High(Word);

Menus 单元有两个函数: TextToShortCut、ShortCutToText, 可以互相转换它们.
var
  w: Word;
  s: string;
begin
  w := TextToShortCut('Ctrl+A');
  ShowMessage(IntToStr(w)); {16449}

  s := ShortCutToText(16449);
  ShowMessage(s);           {Ctrl+A}
end;

 
 
 
 
 

 

 

  
它是根据什么原理用一个数字记下了一个字符串的呢? 我没有深究, 只是根据已知数据猜了一下.
Word 是双字节, 有一个高字节、一个低字节.
高字节用来储存辅助键, 就是 Shift、Ctrl、Alt 和它们的组合; 低字节储存单键对应的键值.
对组合键的键值, Delphi 规定如下:

辅助键
Shift $20
Ctrl $40
Shift+Ctrl $60
Alt $80
Shift+Alt $A0
Ctrl+Alt $C0
Shift+Ctrl+Alt  $E0 

譬如: 16449, 用十六进制表示是: $4041; 高字节 $40 表示 Ctrl, 低字节 $41 表示字母 A.


既然如此, 不用它的转换函数, 我们自己也可以转换了:
var
  w: Word;
  h,l: Byte;
begin
  w := 16449;
  h := Hi(w); {获取高字节}
  l := Lo(w); {获取低字节}
  ShowMessage(IntToHex(h,2)); {40}
  ShowMessage(IntToHex(l,2)); {41}
end;

 
 
 
 
 

 

 

  
不过, 我在整理 所有可用的快捷键列表时, 碰见了太多重复值(就是一个快捷键对应着好多个数值), 还不知是什么原理.

本文转载自:http://www.cnblogs.com/del/archive/2008/02/05/1064911.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Eclipse:应该掌握的快捷键

打游戏你要不会快捷键,那估计是个菜鸟,在使用任何IDE工具时,你要不会一些常用快捷键,那你也一定不是这个工具的高手。每个IDE都会使用到快捷键来提高我们的效率,本篇介绍一下Eclipse的快...

test042
2013/03/07
0
1
Eclipse常用快捷键及快捷键功能失效时的解决方案

当Eclipse快捷键功能,或者使用菜单时都无效。例如:搜索引用(快捷键Ctrl+Shift+G)无效; 解决方案:转换WorkSpace,或者删除WorkSpace目录下的.metadata文件夹,重启Eclipse,重新设置。 ...

国士
2015/03/30
0
2
Mac环境下Eclipse常用快捷键

一、Command类 Command+1 快速修复 Command+d 删除当前行 Command+Option+↓ 复制当前行到下一行 Command+Option+↑ 复制当前行到上一行 Command+← 移动光标至当前行的行首 Command+→ 移动...

孟飞阳
2016/07/29
41
0
myeclipse快捷键帮你快速开发java程序

Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 1. 【ALT+/】 此快捷键为用户编辑的好帮手,能为...

WangPerry
2013/01/26
0
0
【持续更新】Eclipse使用教程

是目前使用最为广泛的Java IDE,本文记录一些常用功能。 1 常用快捷键 ctrl + d:删除选中行 alt+?或alt+/:自动补全代码 ctrl+1:弹出错误修复 ctrl+o:快速outline视图 ctrl+e:快速切换选...

yuanlaijike
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

同样是工作3年程序员,为什么别人每月25K你却只有15K?

你有没有静下心来思考过:同样是做了x年Java开发,为什么你的技术比别人差很多?为什么别人每月26K你却只有15K? 其实技术水平的高低和个人智商关系不大(毕竟能做Java编程开发大家都不会差)...

Java填坑之路
23分钟前
1
0
跨域问题:解决跨域的三种方案

当前端页面与后台运行在不同的服务器时,就必定会出现跨域这一问题,本篇简单介绍解决跨域的三种方案,部分代码截图如下,仅供参考: 方式一:使用ajax的jsonp 前端代码 服务器代码 使用该方...

rechardchensir
23分钟前
4
0
linux学习-1012

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 扩展 bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/...

wxy丶
24分钟前
1
0
springboot dubbo 在程序初始化完成前 使用回声测试对服务依赖检测

<dubbo:consumer timeout="10000" check="false" /><dubbo:service delay="-1" /> @Component@Order(2)public class PrkServiceInit implements ApplicationListener {private Logge......

林伟琨
25分钟前
3
0
“网红架构师”解决你的Ceph 运维难题

Q1. 环境预准备 绝大多数MON创建的失败都是由于防火墙没有关导致的,亦或是SeLinux没关闭导致的。一定一定一定要关闭每个每个每个节点的防火墙(执行一次就好,没安装报错就忽视): CentOS s...

编程SHA
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部