このドキュメントでは、次のトピックについて説明します。
キーボードコマンドを提供するには、以下の 2 つの方法があります。
ニーモニックキーは、下線付き文字によってメニュー項目などの表示可能ダイアログエレメントに定義されます。 エンドユーザーは、"Alt + ニーモニックキー"(例:Alt + A)を押すことによってメニュー項目を選択できます。
アクセスキーは ACCELERATOR
属性に定義されます。 使用可能なダイアログエレメントであれば表示可能かどうかに関係なく、エンドユーザーはこのキーを押すことによって、ダイアログエレメントに対するダブルクリックイベントまたはクリックイベントを起こすことができます。
ニーモニックキーは、希望する文字の前に "&" を付けたものをダイアログエレメントの STRING
属性に指定することによって定義します。 ランタイム時にこの文字が下線付きで示されます。 例えば、STRING
属性値 "E&xplanation" は、ランタイム時に以下のように表示されます。
Explanation
テキスト定数コントロールまたはグループフレームコントロールにニーモニックキーを定義した場合、ランタイム時にニーモニックキーが押されると、コントロールシーケンスの次のダイアログエレメントがフォーカスを得ます。 例えば、テキスト定数コントロールの次のダイアログエレメントが入力フィールドコントロールの場合、テキスト定数コントロールのニーモニックキーが押されると入力フィールドコントロールがフォーカスが移動します。 ランタイム時にこの入力フィールドコントロールを使用不可にする場合は、対応するテキスト定数コントロールも使用不可にする必要があります。
ニーモニックキーは、グループフレームコントロール、メニュー項目、プッシュボタンコントロール、ラジオボタンコントロール、テキスト定数コントロール、トグルボタンコントロール、ツールバー項目の各タイプのダイアログエレメントの STRING
属性に定義できます。
STRING
属性に "&&" と指定すると、ランタイム時に "&" も表示できます。 例えば、"A&&B" は "A&B" と表示されます。
注意:
最新の Windows バージョン(Windows 2000 など)のデフォルトでは、Alt キーが押されるまでニーモニック文字に下線が付けられません。 ただし、この新しい動作は、常にニーモニック文字に下線が付けられるようにユーザーによって変更できます。 例えば、英語版の Windows 2000 では、 の[Hide Keyboard navigation indicators until I use the Alt key]オプションをオフにすることによって、これを実現できます。
アクセスキーは、F6 や Ctrl + 1 のように、ダイアログエレメントに対するキーまたはキーの組み合せを ACCELERATOR
属性に設定することによって定義します。 エンドユーザーがアクセスキーを押すと、ダイアログエレメントに対するダブルクリックイベントか、ダブルクリックイベントがない場合はクリックイベントが発生します。 対応するイベントが抑制されているか、またはダイアログエレメントが使用不可の場合は、アクセスキーは動作しません。
Alt + Esc、Ctrl + Esc、Alt + Tab、および Ctrl + Alt + Del などの標準システムアクセラレータをアクセスキーとして定義できますが、これらはダイアログエレメントのクリックイベントまたはダブルクリックイベントを起動するのではなく、 関連付けられたシステム機能を起動します。 MDI アプリケーションで使用される標準 MDI アクセラレータ(Ctrl + F4 や Ctrl + F6 など)、およびアクティブなサーバー(例:現在フォーカスがある ActiveX コントロール)に属するアクセラレータについても同様です。
ユーザー定義アクセスキーは、デスクトップ項目に関連付けられた同じユーザー定義ショートカットキーを書き換えることに注意してください。
同一のアクセスキーを複数のダイアログエレメントに関連付けると、クリックイベントまたはダブルクリックイベントが起動されるダイアログエレメントは定義されません。
SAME-AS
属性によって別のダイアログエレメントを参照するダイアログエレメントは、参照されるオブジェクトのアクセラレータを継承します。 例えば、メニュー項目が 1 つのシグナルを参照し、そのシグナルのアクセラレータが Ctrl + Alt + X である場合、メニュー項目の ACCELERATOR
属性をクエリした場合も Ctrl + Alt + X が返されます。 ただし、アクセラレータを押すと、参照されるダイアログエレメント(この例では、シグナル)のクリックイベントだけが起動されます。
Alt + X 形式("X" は 1 つのアルファベット文字)のアクセラレータは、キーボードニーモニックとして予約されているため、使用しないでください。
メニュー項目のアクセラレータを表示するためには、メニューテキストにまずタブ(h'09')文字を追加して、次にアクセラレータ用のテキストを追加する必要があります。 ダイアログエディタのメニューエディタには文字列定義にタブ文字を入力する方法がないため、このエディタではスタティックに定義できません。 ただし、ダイアログのすべてのメニュー項目で繰り返し実行される共通コードを使用して、アクセラレータをダイナミックに追加できます。
これを説明する、ダイアログの AFTER-OPEN
イベントから簡単に呼び出すことのできる外部サブルーチンを以下に示します。
DEFINE DATA PARAMETER 1 #DLG$WINDOW HANDLE OF WINDOW LOCAL 1 #CONTROL HANDLE OF GUI 1 #COMMAND HANDLE OF GUI LOCAL USING NGULKEY1 END-DEFINE * DEFINE SUBROUTINE APPEND-ACCELERATORS #CONTROL := #DLG$WINDOW.FIRST-CHILD REPEAT UNTIL #CONTROL = NULL-HANDLE IF #CONTROL.TYPE = SUBMENU OR #CONTROL.TYPE = CONTEXTMENU #COMMAND := #CONTROL.FIRST-CHILD REPEAT UNTIL #COMMAND = NULL-HANDLE IF #COMMAND.ACCELERATOR <> ' ' COMPRESS #COMMAND.STRING H'09' #COMMAND.ACCELERATOR INTO #COMMAND.STRING LEAVING NO SPACE END-IF #COMMAND := #COMMAND.SUCCESSOR END-REPEAT END-IF #CONTROL := #CONTROL.SUCCESSOR END-REPEAT END-SUBROUTINE END
このダイナミック手法は、結果的にアクセラレータを 2 回(つまり、メニュー項目の ACCELERATOR
属性と STRING
属性に対して)定義しなくてもよいという利点があります。
使用言語が英語でない場合は、メニュー項目文字列に追加する前に ACCELERATOR
属性値の翻訳が必要となる場合があります。