“这条路是哪条路?”;“正确”;在Delphi中定义快捷方式的方法之一?

“这条路是哪条路?”;“正确”;在Delphi中定义快捷方式的方法之一?,delphi,keyboard-shortcuts,Delphi,Keyboard Shortcuts,有很多关于如何在Delphi程序中定义快捷方式的示例,但是 它们归结为两种不同的方式: 将任何scCtrl、scShift和scAlt常量添加到键的Ord() 使用“菜单.快捷方式”功能 e、 g 这两种方法中有一种更可取吗?如果是,是哪一个,原因是什么?我想说,每当有一个函数可以完成这项工作时,最好使用这个函数 因为如果将来有机会更改某些内容,那么使用函数将为您提供到调用的“硬链接”,因此,如果函数不推荐使用,您将收到通知,如果函数逻辑更改,您将以静默方式获得更新 否则,您将无法从中受益 在这

有很多关于如何在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)这个额外的检查是重要的

    注意real
    Ord
    函数返回smallint(带符号的
    Word
    ),因此使用国家字符可以更改快捷值的Hi字节中包含的修改器

    因此,更优选的是使用
    快捷方式
    功能

    Action.ShortCut := scCtrl + scShift + Ord('K');
    // vs
    Action.ShortCut := Menus.ShortCut(Word('K'), [ssCtrl, ssShift]);