2016-03-26 14 views
9

彼らがダウンしてちょうど2つの異なる方法に沸騰ありDelphiのプログラムにショートカットを定義する方法の多くの例がありますが、 :Delphiでショートカットを定義する "正しい"方法はどちらですか?

  1. は(オードにscCtrl、scShiftとscAlt定数のいずれかを追加)のキー

例えばMenus.ShortCut機能を使用します

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

これらの2つの方法のいずれかが好ましいですか?はいの場合は、どちらが、なぜですか?

答えて

13

コードはほぼ、

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ドキュメントの注意:同じ、しかしShortCutいくつかの追加のチェックを持っています。リアルOrd関数はsmallint(符号Word)を返します。したがって、国別文字を使用すると、ショートカットのHi-byte値に含まれる変更子を変更できます。

したがって、より好ましくは、使用ShortCut機能です。

5

私は、仕事をする機能があるときは、その機能を使う方が良いと言いたいと思います。

将来何かが変更される可能性があるため、関数を使用するとコールに「ハードリンク」が与えられますので、関数が廃止予定の場合は通知を受け、関数ロジックが変更された場合はサイレントに更新します。

それ以外の場合は、この恩恵を受けることはありません。

この特定のケースでは、今後10〜20年以内に変更するショートカットの定義のチャンスは何ですか? おそらくありません。しかし、私はまだ関数呼び出しを唱えていますが、ロジックを覚えておく必要はありません(論理的なORingだったのでしょうか?後で質問するかもしれません)

関連する問題