“这条路是哪条路?”;“正确”;在Delphi中定义快捷方式的方法之一?
有很多关于如何在Delphi程序中定义快捷方式的示例,但是 它们归结为两种不同的方式:“这条路是哪条路?”;“正确”;在Delphi中定义快捷方式的方法之一?,delphi,keyboard-shortcuts,Delphi,Keyboard Shortcuts,有很多关于如何在Delphi程序中定义快捷方式的示例,但是 它们归结为两种不同的方式: 将任何scCtrl、scShift和scAlt常量添加到键的Ord() 使用“菜单.快捷方式”功能 e、 g 这两种方法中有一种更可取吗?如果是,是哪一个,原因是什么?我想说,每当有一个函数可以完成这项工作时,最好使用这个函数 因为如果将来有机会更改某些内容,那么使用函数将为您提供到调用的“硬链接”,因此,如果函数不推荐使用,您将收到通知,如果函数逻辑更改,您将以静默方式获得更新 否则,您将无法从中受益 在这
这两种方法中有一种更可取吗?如果是,是哪一个,原因是什么?我想说,每当有一个函数可以完成这项工作时,最好使用这个函数 因为如果将来有机会更改某些内容,那么使用函数将为您提供到调用的“硬链接”,因此,如果函数不推荐使用,您将收到通知,如果函数逻辑更改,您将以静默方式获得更新 否则,您将无法从中受益 在这种特殊情况下,在未来10-20年内,定义一条改变的捷径的机会有多大?
可能没有。但是我仍然主张函数调用(如果不是为了任何事情,但是你不必记住逻辑(是加法还是逻辑ORing?稍后可能会问自己)代码几乎相同,但是
快捷方式
有一些额外的检查:
功能快捷键(关键字:Word;Shift:TShiftState):TShortCut;
开始
结果:=0;
如果HiByte(键)为0,则退出;//如果键为国家字符,则不能将其用作快捷方式
结果:=键;
如果Shift中有ssShift,则Inc(结果,scShift);//这与“+”scShift相同
如果ssCtrl在班次中,则Inc(结果,scCtrl);
如果ssAlt在班次中,则Inc(结果,刻度);
结束;
因为函数使用(值从$00到$FE)这个额外的检查是重要的
注意realOrd
函数返回smallint(带符号的Word
),因此使用国家字符可以更改快捷值的Hi字节中包含的修改器
因此,更优选的是使用快捷方式
功能
Action.ShortCut := scCtrl + scShift + Ord('K');
// vs
Action.ShortCut := Menus.ShortCut(Word('K'), [ssCtrl, ssShift]);