有很多关于如何在Delphi程序中定义ShortCut的例子,但是 他们归结为两种不同的方式:
e.g。
Action.ShortCut := scCtrl + scShift + Ord('K');
// vs
Action.ShortCut := Menus.ShortCut(Word('K'), [ssCtrl, ssShift]);
这两种方式中的一种更可取吗?如果是,哪一个和为什么?
答案 0 :(得分:14)
代码几乎完全相同,但ShortCut
还有一些额外的检查:
function ShortCut(Key: Word; Shift: TShiftState): TShortCut;
begin
Result := 0;
if HiByte(Key) <> 0 then Exit; // if Key is national character then it can't be used as shortcut
Result := Key;
if ssShift in Shift then Inc(Result, scShift); // this is identical to "+" scShift
if ssCtrl in Shift then Inc(Result, scCtrl);
if ssAlt in Shift then Inc(Result, scAlt);
end;
由于RegisterHotKey函数使用Virtual key codes(其值为$ 00到$ FE),因此这项附加检查非常重要。
注意,而不是Ord文档,真正的Ord
函数返回smallint(签名Word
),因此使用国家字符可以更改包含在内的修饰符ShortCut值的高字节。
因此,更优选使用ShortCut
函数。
答案 1 :(得分:5)
我会说只要有一个功能来完成这项工作,最好使用这个功能。
因为将来有机会发生变化,有一个函数会给你一个调用的“硬链接”,所以如果函数被弃用,你会收到通知,如果函数逻辑发生变化,你会得到更新默默。
否则,你不会从中受益。
现在在这个特殊情况下,在未来10到20年内定义快捷方式的可能性有多大? 可能没有。但是我仍然提倡函数调用(如果不是为了任何东西,但你不必记住逻辑(它是添加还是逻辑ORing?后来可能会问自己)