文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

支付宝客户端架构分析:自动化日志收集及分析

摘要: 《支付宝客户端架构解析》系列将从支付宝客户端的架构设计方案入手,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。 小蚂蚁说: 《支付宝客户端架构解析》系列将从支付宝...

阿里云官方博客
15分钟前
1
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
32分钟前
5
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
34分钟前
3
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
37分钟前
3
0
Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序

今天我们来实战一把, 对Map的Value值排序进行简化. 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群...

编程SHA
40分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部