字符串 转换成 键值!!!比如把 'F1’ 这个字符串转换成键值!
能用什么函数可以直接转换的吗?我又不想弄一个键值数组来查找!
能用什么函数可以直接转换的吗?我又不想弄一个键值数组来查找!
解决方案 »
- 组建个小团队,欢迎加
- 如何组织窗体?急
- 请高手指教一个动态库问题
- DBGrid记录增加问题?
- 谁能送我一段票据打印的教程及实例?
- 接触过几个非技术区,delphi的非技术区的人气要高出一大截!!不知道是怎么回事?
- To: WWWWA(aaaa)再请教你一个问题??
- 急!急!!急!!!寻求三层结构中动态定位服务器的实例,各位哥哥姐姐弟弟妹妹来看看吧,我真的急用的!!!
- 求助
- ---------------help me about Session.GetDatabaseName
- 关于AdvStringGrid的使用
- Windowsmediaplayer这个控件如何动态调整大小,嵌入FORM后不能调整大小
Menus;TextToShortCut
ShortCutToKey
procedure TForm1.Button1Click(Sender: TObject);
var
T: TShiftState;
begin
Id := GlobalAddAtom('F1') - $C000;
ShortCutToKey(HotKey1.HotKey, Key, T);
Shift := ShiftStateToWord(T);
RegisterHotKey(Handle, Id, Shift, Key);
end;
w: Word;
s: string;
begin
w := TextToShortCut('Ctrl+A');
ShowMessage(IntToStr(w)); {16449} s := ShortCutToText(16449);
ShowMessage(s); {Ctrl+A}
end;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;
16449, 用十六进制表示是: $4041; 高字节 $40 表示 Ctrl, 低字节 $41 表示字母 A.
我们从 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;
键值 快捷键
3 Scroll Lock
8 BkSp
9 Tab
12 Num 5
13 Enter
16 Shift
17 Ctrl
18 Alt
20 Caps Lock
27 Esc
32 Space
33 PgUp
34 PgDn
35 End
36 Home
37 Left
38 Up
39 Right
40 Down
44 Sys Req
45 Ins
46 Del
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
57 9
65 A
66 B
67 C
68 D
69 E
70 F
......
......
......