文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部