FMX.Forms.TCommonCustomForm.KeyDown

提供: Appmethod Libraries
移動先: 案内検索

Object Pascal

procedure KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); virtual;

C++

virtual void __fastcall KeyDown(System::Word &Key, System::WideChar &KeyChar, System::Classes::TShiftState Shift);

プロパティ

種類 可視性 ソース ユニット
procedure
function
public
FMX.Forms.pas
FMX.Forms.hpp
FMX.Forms TCommonCustomForm


説明

このフォームに入力フォーカスがある際に、キーが押されると実行されます。

FireMonkey フレームワーク KeyDown は、フォームでキーの押下を処理する主要メソッドです。KeyDown は、このフォームに入力がフォーカスがあるときに、キーが押されるたびに実行されます。KeyDown は内部的に使用されます。用途は、メニューやアクションを有効化する、このフォームの子コントロールを循環する TAB リクエストを処理するためなどです。エディタは、KeyDown を使用して、編集されているテキストにシンボルを追加することができます。

KeyDown をサブクラスでオーバーライドすることにより、さらなるキー処理を提供することができます。

KeyDown には、次のパラメータがあります:

パラメータ 説明

Key

押されたキーボード キーのスキャン コード、または、$0

UITypes ユニットは、キーボード キーのスキャン コードのためのシンボリック定数を提供する、Virtual Keys を定義します。

同じキーの物理スキャン コードは、異なるプラットフォーム(Windows や iOS)下では異なる可能性があります。FireMonkey フレームワーク プラットフォーム固有ユニット(FMX.Platform.Mac.pas ユニット)では、ネイティブの Mac スキャン コードを、UITypes ユニットで定義されている対応する Windows のコードに変換しなければなりません。その結果、Key は常に、UITypes 内の vkXXXX 定数で定義された、スキャン コード値になります。以下に例を示します。

vkReturn = $0D; { 13 } はキーボード キー Return に対応します。
vkEscape = $1B; { 27 } は Esc に対応します。
vkSpace = $20; { 32 } は Space に対応します。
vkF2 = $71; { 113 } はキーボード キー F2 に対応します。

数字および文字のキー -- 入力言語やアルファベット キーの大文字小文字には依存しない -- は、'0'..'9' および 'A'..'Z' の各シンボルに相当する値を持っています。たとえば、Key = vkP = $50 は、〔P〕 キーボード キーに相当します。

Key = $0 の場合、KeyChar には、現在のキーボードの入力言語、キーボード モード(CAPS LOCK および NUM LOCK キー)、キーボードの Shift の状態、そして IME(入力メソッド エディタ) の状態に従って、押されたシンボルが格納されます。

Key および Shift パラメータの組み合わせは、ショートカット キーの組み合わせに解釈することもできます。

KeyChar

押された文字(数字)、または、#0

押されたキーの組み合わせを印字可能な文字または数字として扱える場合は、Key = 0 で、KeyChar には、現在のキーボードの入力言語、キーボード モード(Caps Lock キーおよび Num Lock キー)、キーボードのシフト状態、IME の状態に従って、押されたシンボルが格納されます。エディタでは、このシンボルを使用して、編集中のテキストに追加することができます。

Shift

キーが押下された際の、Ctrl、Alt、Shift、および CMD(Mac のみ)のキーの状態を決定します。


KeyDown は次のアルゴリズムに従って押されたキーを処理します。

  1. KeyDown はまず IsDialogKey を、KeyDown で指定されたのと同じパラメータで呼び出します。IsDialog パラメータは、KeyChar < ' 'Shift が CTRL、ALT、または CMD キーのいずれかである場合に、True を返します。つまり、KeyCharShift の組み合わせが、何らかのコントロールの組み合わせであるか(印刷可能文字でないか)を示しているか、です。そうでなければ、False を返します。' ' 文字は、$20 ASCII 値を持っています。$20 より小さい ASCII 値は、コントロールの組み合わせを示します。
  2. IsDialogKeyTrueIsDialog パラメータで返した場合、押されたキーの組み合わせが処理されるまで、次の順番で、フォーム内のすべての子コントロール、メニュー、アクション リスト渡されます:
    1. フォーカスを持っているコントロール
    2. フォーカスを持っているコントロールのコンテキスト メニュー
    3. フォーム内のその他すべてのメニューおよびコンテキスト メニュー
    4. フォーム内のその他すべてのコントロール(フォーカスを持っていない)
    5. アクション リスト要素が割り当てられている、フォームおよびすべての子コンポーネントのアクション リスト
    6. その他のすべてのフォーム内のメニューとアクション リスト
    7. 押下された組み合わせが上記のステップのいずれかで処理された場合は、KeyDownKey = 0 および KeyChar = #0 に設定し、終了します。
  3. Key = vkTab の場合、KeyDown はフォーカスを、コントロールの「タブ順」の次のコントロールに移し、終了します。
  4. Key <> 0 または KeyChar <> #0 の場合、KeyDown は、フォーカスのあるコントロールの KeyDown メソッドを呼び出し、それから、OnKeyDown イベント ハンドラのいずれかが割り当てられている場合には、それを呼び出します。
  5. finally ブロックで、KeyDown は現在の日時を、現在の アプリケーションLastKeyPressLastUserActive プロパティに格納します。

関連項目