Key Manipulator を使用する

Key Manipulator を使用して、ユーザーがアプリケーションをナビゲートするために使用できるキーを設定します。たとえば、デフォルトのフォーカスナビゲーションキーをオーバーライドして特定のキーでノードにフォーカスを設定したり、キーを設定してポップアップタイプのウィンドウを開閉したり、フォーカスチェーン内でフォーカスを移動したりできます。

デフォルトのキーボードナビゲーションキー

これらは、アプリケーション内でフォーカスを移動するために使用できるデフォルトのキーボードキーです。

  • Tab キーを押して前方に移動し、BackTab キーまたは Shift Tab キーを押して後方に移動します。

  • Button ノードは Focusable プロパティが有効になっており、デフォルトでフォーカスを受け取ることができます。Button ノードにフォーカスがある場合、そのボタンを押すには、デフォルトのキーボードキー Space、Enter、および Enter をテンキーで使用できます。

  • Toggle Button ノードは Focusable プロパティが有効になっており、デフォルトでフォーカスを受け取ることができます。Toggle Button ノードにフォーカスがある場合、そのボタンを押すには、デフォルトのキーボードキー Space、Enter、および Enter をテンキーで使用できます。

  • Slider ノードは Focusable プロパティが有効になっており、デフォルトでフォーカスを受け取ることができます。Slider ノードにフォーカスがある場合、そのスライダーのノブを動かすには、次のデフォルトのキーボードキーを使用できます。

    • スライダーのノブをレールの始点に移動するには、Home

    • スライダーのノブをレールの端まで移動するには、End を使用します。

    • ← と → を使用して、水平スライダーのノブを移動します。

    • ↑ と ↓ を使用して、垂直スライダーのノブを移動します。

    スライダーノブを矢印キーで移動させるには、その Slider ノードで、各キー押下時にノブが移動する量を Step Value プロパティで設定します。

  • Kanzi Studio で作成する Scroll View ノードは、Focusable プロパティが有効になっており、デフォルトでフォーカスを受け取ることができます。Scroll View ノードがフォーカスを持っているとき、そのノードをスクロールするには、デフォルトのキーボードキー ←、→、↑、および ↓ を使用できます。

  • List Box ノードにフォーカスがあるとき、次のデフォルトのキーボードキーを使用して、フォーカス可能なリストアイテム間をナビゲートできます。

    • ↑ と ↓:y 軸方向にスクロールする List Box 内のフォーカス可能なアイテム間でフォーカスを移動します。

    • → と ←:x 軸方向にスクロールする List Box 内のフォーカス可能なアイテム間でフォーカスを移動します。

    • Home:最初のフォーカス可能なアイテムにフォーカスを移動します。

    • End:最後のフォーカス可能なアイテムにフォーカスを移動します。

    • Page Up と Page Down:Grid List Box ノードで、フォーカスを1ページ分後方または前方に移動します。1ページは、Grid List Box ノードの表示領域のサイズに相当します。

    List Box ノードでのキー入力フォーカスの処理 を参照してください。

  • Text Box ノードが編集状態にあるとき、そのテキストボックス内でカーソルを移動するには、次のデフォルトのキーボードキーを使用できます。

    • ← でカーソルを1文字後ろに移動します。

    • → はカーソルを1文字前に移動します。

    • Ctrl ← は、カーソルをカーソルの前にある単語の境界に移動します。

    • Ctrl → は、カーソルをカーソルの後に続く単語の境界に移動します。

    • Home はテキストコンテンツの先頭にカーソルを移動します。

    • End はテキストコンテンツの末尾にカーソルを移動します。

    Text Box ノードが編集状態にあるとき、そのテキストボックス内のテキスト選択を変更するには、次のデフォルトのキーボードキーを使用できます。

    • Shift ← は、テキスト選択内のアクティブカーソルを1文字後ろに移動します。

    • Shift Ctrl は、テキスト選択内のアクティブカーソルを現在の位置に先行する単語の境界に移動します。

    • Shift Home は、テキスト選択内のアクティブカーソルをテキストコンテンツの先頭に移動します。

    • Shift → は、テキスト選択内のアクティブカーソルを1文字前に移動します。

    • Shift Ctrl → は、テキスト選択内のアクティブカーソルを現在の位置に続く単語の境界に移動します。

    • Shift End を使用して、テキスト選択内のアクティブカーソルをテキストコンテンツの末尾に移動します。

    • Ctrl A で全てのテキストを選択します。

Key Manipulator トリガーを使用する

Key Manipulator トリガーを使用して、ユーザーがキーを押したり離したりしたときに反応します。たとえば、デフォルトでのフォーカスナビゲーションキーをオーバーライドし、特定のキーを使用してノードにフォーカスを設定したり、オーバーレイを表示または非表示にしたり、フォーカスチェーン内でフォーカスを移動させたりすることができます。デフォルトのキーボードナビゲーションキー を参照してください。

Key Manipulator には次のトリガーがあります。

  • Key Pressed トリガーは、ユーザーがキーボードの特定のキーを押したときに作動します。

  • Key Released トリガーは、ユーザーがキーボードの特定のキーを離したときに発動します。

  • Key Canceled トリガーは、ユーザーがキー押下ジェスチャーをキャンセルしたときに発動します。

Key Manipulator トリガーを使用するには、

  1. Key Manipulator を追加して設定します。

    1. 特定のキーから入力を受け取りたいノードを選択します。

      例えば、特定のキーを持つオーバーレイを非表示にするには、そのオーバーレイを表すノードを選択します。オーバーレイを非表示にすると、Kanzi はフォーカスを以前にフォーカスされていたユーザーインターフェース要素に移動します。フォーカスの使用 を参照してください。

      ../../_images/popup.png
    2. Node Components Alt を押しながら右クリック Input Manipulators で、Key Manipulator を選択します。

      Key Manipulator を使用して、ノードがキーからの入力に反応するように設定します。

      ../../_images/select-key-manipulator.png
    3. Key Manipulator セット内で:

      • ノードが反応するキーに Logical Key を設定します。

        例えば、ユーザーが Enter キーを押したときにオーバーレイを非表示にするには、Logical Key を Enter に設定します。

      • (オプション) Key Modifiers をノードが反応するようにしたい修飾キーに設定します。

        例えば、ユーザーが Ctrl キーと Logical Key プロパティで設定したキーを押したときにノードが反応するように設定するには、Key Modifiers を Control に設定します。

      ../../_images/set-logical-key.png
  2. Node Components に Key Manipulator トリガーの1つを追加します。

    例えば、Node Components Alt を押しながら右クリック Triggers で、Message Trigger > Key Input > Key Pressed を選択します。

    ../../_images/key-pressed.png
  3. ユーザーがキーを押したときにオーバーレイを閉じるには、Key Pressed トリガーでオーバーレイを非表示にするアクションを作成します。オーバーレイを作成する を参照してください。

    ../../_images/set-visible-false.png
  4. (オプション) Key Pressed トリガーがキー押下のリピートをどのように処理するかを設定するには、トリガー内で Is Repeat メッセージ引数の値に対するトリガー条件を定義します。Is Repeat メッセージ引数は、キー押下がユーザーがキーを押し続けたことによるリピートであるかどうかを示します。

    例えば、ユーザーが同じキーを押したときにオーバーレイを開閉するように設定する場合、Key Pressed トリガーで Trigger Condition を作成し、条件に次を設定します。

    • A

      • Type of A から Message argument へ

      • Message Argument から Is Repeat へ

    • Operation から = へ

    • B

      • Type of B から Fixed へ

      • Fixed Value を無効にする

    この条件を使用して、最初のキー押下を処理するトリガーを設定します。これにより、アプリケーションユーザーがキーを押し続けても、オーバーレイが繰り返し開閉されることはありません。

    ../../_images/key-pressed-create-condition.png ../../_images/is-repeat-condition.png

ユーザーが Key Manipulator (Enter)で設定したキーを押すと、Key Pressed トリガーがアクションを開始し、オーバーレイを閉じて、以前にフォーカスされていたユーザーインターフェース要素にフォーカスを設定します。

API でキーマニピュレーターを使用する

A キーの押下とリリースを処理するには:

auto keyManipulator = KeyManipulator::create(getDomain());
anyNode->addInputManipulator(keyManipulator);
keyManipulator->setKey(LogicalKey::A);

auto onKeyPressed = [](auto&)
{
    // Handle the key press.
};
anyNode->addMessageHandler(KeyManipulator::KeyPressedMessage, onKeyPressed);
auto onKeyReleased = [](auto&)
{
    // Handle the key release.
};
anyNode->addMessageHandler(KeyManipulator::KeyReleasedMessage, onKeyReleased);

左 Ctrl 修飾キーをキージェスチャとして処理するには:

keyManipulator->setKey(LogicalKey::LeftControl);

Shift A キーで構成されるキー ジェスチャーを処理するには:

keyManipulator->setKey(LogicalKey::A, KeyModifier::Shift);

左 Alt および左 Ctrl 修飾キーを処理するには、左 Alt キーを修飾キーとして設定します。

keyManipulator->setKey(LogicalKey::LeftControl, KeyModifier::LeftAlt);

キー押下の順序は重要です。最初にLeft Ctrl を押してからLeft Alt を押すのは、最初にLeft Alt を押してからLeft Ctrl を押すのと同じキー操作にはなりません。Left Ctrl + Left Alt のキー操作を処理するには:

keyManipulator->setKey(LogicalKey::LeftAlt, KeyModifier::LeftControl);

詳細については、KeyManipulator クラスを参照してください。

関連項目

ユーザー入力の処理

フォーカスの使用

Navigation Manipulator を使用する

トリガーの使用

チュートリアル: アプリケーションのUIナビゲーションを作成する