FireMonkey で実装されているアクション機能
目次
FireMonkey でのアクション への移動
ユーザー アプリケーションで扱う基底アクション クラスは、FMX.ActnList.pas ユニットに定義されています。標準アクションのクラスは FMX.StdActns.pas ファイルに定義されています。これらのモジュールは FMX.dpk パッケージに含まれています。
標準の FMX アクションを新規に作成する際は、可能な限り、FMX.StdActns.pas に記述してください(FMX.ActnRes.pas も参照)。
FMX.ActnRes ユニット
dclfmxstd.dpk パッケージでは、ActnRes ユニットと似たものとして FMX.ActnRes ユニットが作成されています。このユニットには、指定されたデフォルトのタイトル、ショートカットなど、アクション リスト エディタ(画像を参照)で標準アクションが新規作成される際にデフォルト値として使用されるプロパティを備えた標準アクションのインスタンスが含まれています。
FMX.ActnRes ユニットには値が保持されるだけで、アクションの実装は含めません。このユニットはユーザー アプリケーションでは使用されず、IDE のアクション リスト エディタで System.Actions.RegisterActions を呼び出して標準アクションを登録する際に使用されるだけです。
FMX.ActnRes ユニットには TStandardActions クラスのみ含まれています。これは、System.Classes.TDataModule の下位クラスです。
メモ: 開発者は、プロパティがデフォルトで定義されている標準アクションを FMX.ActnRes ユニットに格納しなければなりません。
FireMonkey アクションの登録
FMX アクションも、同じように登録することができます。以下に例を示します。
unit FmxReg; ... Implementation ... procedure Register; begin ... { Standard action registration } RegisterActions('', [FMX.ActnList.TAction, TControlAction], nil); RegisterActions(SFileCategory, [TFileExit], TStandardActions); RegisterActions(SViewCategory, [TViewAction], TStandardActions); end;
FMX.ActnList ユニット
FMX.ActnList ユニットには、FireMonkey でアクションを扱うための基底クラスが含まれています。
TCustomActionList クラス
TCustomActionList クラスは、公開プロパティのないアクションのリストを定義しています。このクラスには DialogKey メソッドがあり、キーボード キーの押下を処理します。このメソッドは、リストに含まれているすべてのアクションの類似メソッドを順次呼び出します。押されたキーが操作のショートカットに相当する場合は、その操作の処理が呼び出され、その目的が達成されたら、処理が終了して True が返されます。
TActionList クラス
このクラスは、アクションとコントロールの関連を提供するためのものです。このクラスは、FireMonkey におけるすべてのアクションに共通する上位クラスです。
TShortCutList クラス
これは、FireMonkey におけるホット キーの追加の組み合わせのリストを定義したものです。System.Actions.TCustomShortCutList クラスの FMX による実装を提供します。TShortCutList クラスは、読み取り専用の公開フィールド System.Actions.TCustomShortCutList.ShortCuts(追加のショートカットのリスト)を継承しています。ShortCutList は、オーバーロードされた FMX.ActnList.TCustomAction.CreateShortCutList メソッドで作成されます。
TCustomAction クラス
このクラスは、公開プロパティを持たない普通の FireMonkey アクションを定義しています。他のアクション クラスはすべて、このクラスの下位クラスでなければなりません。
TCustomAction クラスの最重要メンバ:
メンバ | 説明 |
---|---|
文字列プロパティで、Caption と同じです。Text も Caption も使用できますが、下位クラスで使用できるのは公開プロパティ Text のみであるため、[オブジェクト インスペクタ]では、大半の FireMonkey コンポーネントと同様に、Text プロパティのみ表示されます。 | |
ユーザー テキストです。アクションの中には、デフォルトで Text プロパティを自動的に設定できるものがあります。たとえば、標準アクション TFileExit では、Text プロパティの値が " | |
ImageIndex |
現在では、サポートされていません。ただし、 |
仮想メソッドです。このアクションが現在のプラットフォームで実装できる場合は True(デフォルト値)を返します。 | |
このプロパティが True の場合は、Supported プロパティの値を取得するために IsSupportedInterface 関数が使用されます。その場合、IsSupportedInterface が False を返せば、このアクションは常にアクセス不能で表示されません。HideIfUnsupportedInterface プロパティが False の場合、このアクションの表示/非表示は他のプロパティによって決まります。下位クラスやアプリケーションでは、自分で IsSupportedInterface を呼び出して、アクションの表示/非表示とアクセス可能性を取得しなければなりません。 | |
サポートされていないアーキテクチャです。 | |
サポートされていないプラットフォームです。 | |
Supported |
アクションが現在のプラットフォームおよび CPU アーキテクチャで動作できるかどうかを定義する読み取り専用プロパティです。このプロパティの値は UnsupportedArchitectures プロパティと UnsupportedPlatforms プロパティで定義され、IsSupportedInterface 関数によっても定義されます。Supported が False の場合、このアクションは常にアクセス不能で表示されません。 |
ShortCutPressed |
アクションのハンドラがコントロールのクリックではなくキーボード キーの押下で呼び出されることを定義する読み取り専用プロパティです。 |
Target |
アクションの実行対象となるコンポーネントを定義する読み取り専用プロパティです。nil に設定できます。1 つのショートカットで複数のコントロールを呼び出せる場合、Target は最初に一致したコントロールに相当します。 |
TAction クラス
FireMonkey における普通のアクションです。このクラスは、アクションの新規作成にデフォルトで使用されます。アクションの作成時には、System.Actions.TContainedAction.DisableIfNoHandler プロパティが True に設定されています。つまり、OnExecute イベントのハンドラがない場合、アクションにはアクセスできません。
FMX.Types ユニット
IIsChecked インターフェイス
アクションで IsChecked プロパティにアクセスするために使用されます。Checked 型のプロパティをサポートしているすべてのオブジェクト(TMenuItem、TcheckBox など)では、このインターフェイスをサポートする必要があります。
IGroupName インターフェイス
アクションで GroupIndex、GroupName などのプロパティにアクセスするために使用されます。GroupName プロパティは string 型であり、整数を格納しなければなりません。そうでない場合は、無視され、0 として扱われます。
TFmxObject クラス
このクラスには、protected 可視性のメソッドとプロパティがいくつか追加されています。下位クラスでは、仮想メソッドをオーバーライドしなければなりません。
TFmxObject クラスの最重要メンバ:
メンバ | 説明 |
---|---|
Action プロパティが設定されている場合、その値は更新されます。そうでない場合は、何も起こりません。 | |
オブジェクトで使用されるアクションです。 | |
オブジェクトとアクションのリンクを実行するクラスのオブジェクトです。このオブジェクトは、Action に | |
オブジェクトの Action プロパティが変更されたときに呼び出される仮想メソッドです。 | |
TActionLink の下位クラスを返さなければならない仮想メソッドです。このクラスのオブジェクトは、Action に | |
読み取り専用プロパティです。オブジェクトでアクションが使用されることを指定します。これは、Action が |
TControl クラス
Click 仮想メソッドは変更されています。Action プロパティが設定されており、EnableExecuteAction = True
で、OnClick イベントのハンドラが割り当てられていない(または Action.OnExecute に等しい)場合は、割り当てられているアクションが実行されます。そうでない場合は、OnClick イベントのハンドラが実行されます。
if Assigned(onClick) then OnClick(self); // 間違い Click; // 正しい
EnableExecuteAction プロパティは、コントロールでマウス クリックに Action.OnExecute を使用できるかどうかを定義します。TTextControl の下位クラスでは、このプロパティは True ですが、それ以外ではすべて False です。
TCustomControlAction クラス
コントロールで使用される普通のアクションです。ただし、公開プロパティはありません。コントロールに存在できるプロパティの集合に属する追加プロパティを持つことができます。現在のところ、追加プロパティは PopupMenu のみです。TAction の場合とは異なり、アクションの作成時には DisableIfNoHandler プロパティは False に設定されています。つまり、OnExecute イベントのハンドラが定義されていない場合、アクションのアクセス可能性は変わりません。
TControlAction クラス
このクラスは TCustomControlAction と似ていますが、公開プロパティがあります。
TCustomViewAction クラス
このクラスには公開プロパティはありません。[表示]メニューのコマンドを作成する場合に役に立ちます。追加の Component プロパティがあります。ExecuteTarget メソッドを使用すると、Visible プロパティを True に設定できます。Component が設定されておらず、OnCreateComponent イベントのハンドラが定義されている場合は、コンポーネントが作成されます。
Component がフォーム、ペイン、あるいはそれに類似する別のオブジェクトである場合、そのオブジェクトの IsChecked、GroupIndex、Enabled、OnExecute、Visible の各プロパティはアクションにはリンクされません。つまり、ViewAction を非表示にしても、フォームやペインは自動的には非表示になりません。プログラマは、その状態を OnUpdate イベントのハンドラで管理できます。
ComponentText は、Component プロパティに対応するテキストを返す仮想メソッドです。これが FMX.Forms.TCommonCustomForm の下位クラス オブジェクトの場合は、Caption が返されます。また、これが FMX.Controls.TTextControl の下位クラス オブジェクトの場合は、Text が返され、それ以外の場合は Name が返されます。
TControlActionLink クラス
TControlActionLink クラスは、コントロールでプロパティ値とアクションをリンクするのに使用されます。IsCaptionLinked 型の関数は、プロパティを .fmx ファイルに保存すべきかどうかを判断するのに使用することができます。IsCaptionLinked が True を返す場合、コントロールのテキストはアクションのテキストと同じになるため、保存する必要はありません。
FMX.Forms ユニット
TApplication クラス
TApplication クラスの最重要メンバ:
メンバ | 説明 |
---|---|
すべてのアクションの更新遅延をミリ秒で表したものです(デフォルト値は
また、ActionUpdateDelayNever 定数を使用することもできます。 | |
このメソッドは OnIdle イベントのハンドラを呼び出します。その後、FIdleDone フィールドが Done に設定されます。FIdleDone が True の場合は、ActionUpdateDelay プロパティに応じて、すべてのアクションの状態が更新されます。出力フィールド Done は、たとえばアプリケーションが長時間アイドル状態になっている場合などに、イベント ハンドラで False に設定することができます。 |
TCommonCustomForm クラス
TCommonCustomForm クラスの最重要メンバ:
メンバ | 説明 |
---|---|
フォームにおけるすべてのアクションの状態を順次更新します。通常は、このメソッドを手動で呼び出す必要はありません。Application オブジェクトが、すべてのフォームに対してこのメソッドを定期的に実行するからです。 | |
デフォルトで、TFormActionLink を返します。 |
TFormActionLink クラス
フォームでは、このクラスを使用して、プロパティ値とアクションをリンクします。TControlActionLink クラスの場合とは異なり、TFormActionLink は Caption プロパティと Visible プロパティだけをアクションとリンクします。
FMX.Menus ユニット
TMainMenu クラス
このクラスの動作ロジックは変更されました。MacOS では、メイン メニューの最初の表示項目は常にアクセス可能で、そのテキストはアプリケーション タイトルと同じです。つまり、これはシステム メニュー項目です。表示されるメニュー項目が存在しない場合は、システム メニュー項目がともかく作成され、その中にはサブ項目[<アプリケーション> を終了]のみ含まれています。画像では、[DemoView を終了 ^Q]となっています。UnsupportedPlatforms を使用すると、さまざまなプラットフォームについてメニュー項目の表示/非表示を管理できます。
FMX.StdActns ユニット
このユニットには標準アクションが含まれています。
TFileExit クラス
アプリケーションの終了を処理します。
TFileExit クラスの最重要メンバ:
メンバ | 説明 |
---|---|
このプロパティの値は自動的に設定されます。このプロパティは[オブジェクト インスペクタ]には表示されません。値は、 | |
このプロパティの値が設定されている場合、この値はアクション Text として使用されます。 | |
このイベントのイベント ハンドラは、ユーザーが本当にアプリケーションを終了するのかどうかを確認するために使用されます。ShortCutPressed プロパティの値を分析すると、イベントがキーボード キーの押下で起動されるのかマウスのクリックで起動されるのかを決定できます。 |
TViewAction クラス
このクラスは TCustomViewAction と似ていますが、公開プロパティがあります。
TViewAction クラスの最重要メンバ:
メンバ | 説明 |
---|---|
このプロパティは、アクションを実行し、その実行中に画像が表示されるオブジェクトを指しています。 | |
このイベントのイベント ハンドラで作成できるのは、TFmxObject 型のオブジェクトだけです。作成されたコンポーネントが TFmxObject の下位クラス オブジェクトでない場合は、例外が発生し、新規オブジェクトは破棄されます。 |
TCustomValueRangeAction クラス
これは、Value 型のプロパティを持っているコントロールで使用できるアクション(公開プロパティなし)の基底クラスです。そのようなコントロールは、たとえば、TProgressBar、TCustomTrack、TCustomEditBox などです。
ValueRange プロパティには、浮動小数点値の許容範囲に関する情報が格納されています。FMX.StdActns.TCustomValueRange クラスを参照してください。
IValueRange インターフェイス
TCustomValueRangeAction クラスを使用する各コントロールでは、このインターフェイスをサポートしている必要があります。IValueRange は、アクションで ValueRange プロパティへのアクセスに使用されます。
TBaseValueRange クラス
このクラスは、浮動小数点数の Value をその範囲に関連付けます。このクラスはデータを保持するだけで、格納している Value が受け入れ可能かどうかを確認しません。
TBaseValueRange クラスの最重要メンバ:
メンバ | 説明 |
---|---|
許容値の下限です。 | |
許容値の上限です。 | |
可変の浮動小数点パラメータです。 | |
TScrollBar のようなコントロールでサム サイズの定義に使用されます。Value の有効最大値が | |
Value の起こり得る変化のステップ幅です。Value は、Frequency の倍数、Min、Max のいずれかになります。たとえば、以下の場合、 Min = 0.1 Max = 2.1 ViewportSize = 0 Frequency = 1 Value は次のように変化できます。 0.1 1 2 2.1 次のようにはなれません。 Value = 1.1 | |
現在のオブジェクトのすべてのプロパティ値が、指定されたオブジェクト | |
現在のオブジェクトのすべてのプロパティ値が、指定されたオブジェクト |
TCustomValueRange クラス
TCustomValueRange は、TBaseValueRange の下位クラスです。Value を格納するだけでなく、Value の正確さを制御する機能も提供します。たとえば、Max
値を Value > Max
となるように設定した場合、Value
は Value = Max
となるように変更されます。
TCustomValueRange クラスの最重要メンバ:
メンバ | 説明 |
---|---|
すべてのプロパティ(Min、Max、Value など)がデフォルト値になっている場合、True を返します。 | |
すべてのプロパティ(Min、Max、Value など)にデフォルト値を割り当てます。 | |
| |
一部のプロパティが変更されたものの、値がまだ再計算されていないことを示します。 | |
このメソッドは、いずれかのプロパティの値が変更された直後に呼び出されます。値を再計算し、(必要であれば)適切なイベントを発生させ、IsChanged を False に設定します。アクションの Owner コンポーネントが読み込み中か | |
TBaseValueRange クラスに宣言されているプロパティ(Max、Min、Value、Frequency、ViewportSize)の新しい値を格納する TBaseValueRange 型プロパティです。BeforeChange イベントのハンドラで使用できます。 | |
このプロパティは、以下の式に従って RelativeValue = (Value-Min)/(Max-Min-ViewportSize) 0 から 1 までの範囲に収まります。コントロールでのサムの配置に使用できます。 | |
このクラス インスタンスのオーナー コンポーネントです。 | |
更新の開始です。 | |
更新の終了です。 | |
更新が開始された回数のカウンタです。 | |
このプロパティは、TCustomValueRange 型オブジェクトが値の再計算状態にあることを示します。 | |
このイベントは、パラメータの新しい値が有効になる前に発生します。たとえば、 | |
このイベントは、 | |
このイベントは、 | |
このイベントは、UpdateCount に関係なく、 | |
これらの仮想メソッドは、それぞれ対応するイベントを発生させます。下位クラスを作成する場合は、対応するイベント ハンドラを割り当てる代わりに、これらのメソッドをオーバーライドできます。 | |
MaxStored |
これらの仮想関数は、対応するプロパティ値がデフォルトとは異なる場合に、True を返します。 |
TValueRange クラス
このクラスは TCustomValueRange と似ていますが、公開プロパティがあります。