FireMonkey で実装されているアクション機能

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

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 クラスの最重要メンバ:

メンバ 説明

Text

文字列プロパティで、Caption と同じです。TextCaption も使用できますが、下位クラスで使用できるのは公開プロパティ Text のみであるため、[オブジェクト インスペクタ]では、大半の FireMonkey コンポーネントと同様に、Text プロパティのみ表示されます。

CustomText

ユーザー テキストです。アクションの中には、デフォルトで Text プロパティを自動的に設定できるものがあります。たとえば、標準アクション TFileExit では、Text プロパティの値が "<Application.Title> を終了" になっていますが、これとは別の値を設定する場合は、CustomText プロパティの値を設定する必要があります。

ImageIndex

現在では、サポートされていません。ただし、-1 に等しくない場合は、fmx/dfm ファイルに保存されます。[オブジェクト インスペクタ]では、このプロパティは表示されない可能性があります。

IsSupportedInterface

仮想メソッドです。このアクションが現在のプラットフォームで実装できる場合は True(デフォルト値)を返します。

HideIfUnsupportedInterface

このプロパティが True の場合は、Supported プロパティの値を取得するために IsSupportedInterface 関数が使用されます。その場合、IsSupportedInterface が False を返せば、このアクションは常にアクセス不能で表示されません。HideIfUnsupportedInterface プロパティが False の場合、このアクションの表示/非表示は他のプロパティによって決まります。下位クラスやアプリケーションでは、自分で IsSupportedInterface を呼び出して、アクションの表示/非表示とアクセス可能性を取得しなければなりません。

UnsupportedArchitectures

サポートされていないアーキテクチャです。arIntelX86arIntelX64 のどちらかに設定できます。

UnsupportedPlatforms

サポートされていないプラットフォームです。pfWindowspfMacOS のどちらかに設定できます。

Supported

アクションが現在のプラットフォームおよび CPU アーキテクチャで動作できるかどうかを定義する読み取り専用プロパティです。このプロパティの値は UnsupportedArchitectures プロパティと UnsupportedPlatforms プロパティで定義され、IsSupportedInterface 関数によっても定義されます。SupportedFalse の場合、このアクションは常にアクセス不能で表示されません。

ShortCutPressed

アクションのハンドラがコントロールのクリックではなくキーボード キーの押下で呼び出されることを定義する読み取り専用プロパティです。

Target

アクションの実行対象となるコンポーネントを定義する読み取り専用プロパティです。nil に設定できます。1 つのショートカットで複数のコントロールを呼び出せる場合、Target は最初に一致したコントロールに相当します。


TAction クラス

FireMonkey における普通のアクションです。このクラスは、アクションの新規作成にデフォルトで使用されます。アクションの作成時には、System.Actions.TContainedAction.DisableIfNoHandler プロパティが True に設定されています。つまり、OnExecute イベントのハンドラがない場合、アクションにはアクセスできません。

FMX.Types ユニット

IIsChecked インターフェイス

アクションで IsChecked プロパティにアクセスするために使用されます。Checked 型のプロパティをサポートしているすべてのオブジェクト(TMenuItemTcheckBox など)では、このインターフェイスをサポートする必要があります。

IGroupName インターフェイス

アクションで GroupIndexGroupName などのプロパティにアクセスするために使用されます。GroupName プロパティは string 型であり、整数を格納しなければなりません。そうでない場合は、無視され、0 として扱われます。

TFmxObject クラス

このクラスには、protected 可視性のメソッドとプロパティがいくつか追加されています。下位クラスでは、仮想メソッドをオーバーライドしなければなりません。

TFmxObject クラスの最重要メンバ:

メンバ 説明

InitiateAction

Action プロパティが設定されている場合、その値は更新されます。そうでない場合は、何も起こりません。

Action

オブジェクトで使用されるアクションです。

ActionLink

オブジェクトとアクションのリンクを実行するクラスのオブジェクトです。このオブジェクトは、Actionnil 以外の値が割り当てられたときに作成され、nil が割り当てられたときに破棄されます。

ActionChange

オブジェクトの Action プロパティが変更されたときに呼び出される仮想メソッドです。

GetActionLinkClass

TActionLink の下位クラスを返さなければならない仮想メソッドです。このクラスのオブジェクトは、Actionnil 以外の値が割り当てられたときに作成されます。GetActionLinkClass が nil を返した場合は、例外が発生します。

ActionClient

読み取り専用プロパティです。オブジェクトでアクションが使用されることを指定します。これは、Actionnil 以外の場合 True で、そうでない場合は False です。このプロパティは、あるアクションが存在するかどうかを手早く調べるために使用できます。


TControl クラス

Click 仮想メソッドは変更されています。Action プロパティが設定されており、EnableExecuteAction = True で、OnClick イベントのハンドラが割り当てられていない(または Action.OnExecute に等しい)場合は、割り当てられているアクションが実行されます。そうでない場合は、OnClick イベントのハンドラが実行されます。

重要: コンポーネント開発者は OnClick イベントのハンドラを明示的に呼び出すのではなく、Click メソッドを呼び出します。
 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 がフォーム、ペイン、あるいはそれに類似する別のオブジェクトである場合、そのオブジェクトの IsCheckedGroupIndexEnabledOnExecuteVisible の各プロパティはアクションにはリンクされません。つまり、ViewAction を非表示にしても、フォームやペインは自動的には非表示になりません。プログラマは、その状態を OnUpdate イベントのハンドラで管理できます。

ComponentText は、Component プロパティに対応するテキストを返す仮想メソッドです。これが FMX.Forms.TCommonCustomForm の下位クラス オブジェクトの場合は、Caption が返されます。また、これが FMX.Controls.TTextControl の下位クラス オブジェクトの場合は、Text が返され、それ以外の場合は Name が返されます。

TControlActionLink クラス

TControlActionLink クラスは、コントロールでプロパティ値とアクションをリンクするのに使用されます。IsCaptionLinked 型の関数は、プロパティを .fmx ファイルに保存すべきかどうかを判断するのに使用することができます。IsCaptionLinkedTrue を返す場合、コントロールのテキストはアクションのテキストと同じになるため、保存する必要はありません。


FMX.Forms ユニット

TApplication クラス

TApplication クラスの最重要メンバ:

メンバ 説明

ActionUpdateDelay

すべてのアクションの更新遅延をミリ秒で表したものです(デフォルト値は 100)。

  • ActionUpdateDelay > 0 の場合、更新はタイマで管理されます。
  • ActionUpdateDelay = 0 の場合、更新は DoIdle で直接実行されます。
  • ActionUpdateDelay < 0 の場合、更新は実行されません。

また、ActionUpdateDelayNever 定数を使用することもできます。

DoIdle

このメソッドは OnIdle イベントのハンドラを呼び出します。その後、FIdleDone フィールドが Done に設定されます。FIdleDoneTrue の場合は、ActionUpdateDelay プロパティに応じて、すべてのアクションの状態が更新されます。出力フィールド Done は、たとえばアプリケーションが長時間アイドル状態になっている場合などに、イベント ハンドラで False に設定することができます。

TCommonCustomForm クラス

TCommonCustomForm クラスの最重要メンバ:

メンバ 説明

UpdateActions

フォームにおけるすべてのアクションの状態を順次更新します。通常は、このメソッドを手動で呼び出す必要はありません。Application オブジェクトが、すべてのフォームに対してこのメソッドを定期的に実行するからです。

GetActionLinkClass

デフォルトで、TFormActionLink を返します。

TFormActionLink クラス

フォームでは、このクラスを使用して、プロパティ値とアクションをリンクします。TControlActionLink クラスの場合とは異なり、TFormActionLinkCaption プロパティと Visible プロパティだけをアクションとリンクします。


FMX.Menus ユニット

TMainMenu クラス

このクラスの動作ロジックは変更されました。MacOS では、メイン メニューの最初の表示項目は常にアクセス可能で、そのテキストはアプリケーション タイトルと同じです。つまり、これはシステム メニュー項目です。表示されるメニュー項目が存在しない場合は、システム メニュー項目がともかく作成され、その中にはサブ項目[<アプリケーション> を終了]のみ含まれています。画像では、[DemoView を終了 ^Q]となっています。UnsupportedPlatforms を使用すると、さまざまなプラットフォームについてメニュー項目の表示/非表示を管理できます。

FMX_TMainMenu


FMX.StdActns ユニット

このユニットには標準アクションが含まれています。

TFileExit クラス

アプリケーションの終了を処理します。

TFileExit クラスの最重要メンバ:

メンバ 説明

Text

このプロパティの値は自動的に設定されます。このプロパティは[オブジェクト インスペクタ]には表示されません。値は、CustomText=" の場合 "<Application.Title> を終了" で、そうでない場合は、CustomText プロパティに格納されている <CustomText> です。

CustomText

このプロパティの値が設定されている場合、この値はアクション Text として使用されます。

OnCanActionExec

このイベントのイベント ハンドラは、ユーザーが本当にアプリケーションを終了するのかどうかを確認するために使用されます。ShortCutPressed プロパティの値を分析すると、イベントがキーボード キーの押下で起動されるのかマウスのクリックで起動されるのかを決定できます。

TViewAction クラス

このクラスは TCustomViewAction と似ていますが、公開プロパティがあります。

TViewAction クラスの最重要メンバ:

メンバ 説明

FmxObject

このプロパティは、アクションを実行し、その実行中に画像が表示されるオブジェクトを指しています。

OnCreateComponent

このイベントのイベント ハンドラで作成できるのは、TFmxObject 型のオブジェクトだけです。作成されたコンポーネントが TFmxObject の下位クラス オブジェクトでない場合は、例外が発生し、新規オブジェクトは破棄されます。


TCustomValueRangeAction クラス

これは、Value 型のプロパティを持っているコントロールで使用できるアクション(公開プロパティなし)の基底クラスです。そのようなコントロールは、たとえば、TProgressBarTCustomTrackTCustomEditBox などです。

ValueRange プロパティには、浮動小数点値の許容範囲に関する情報が格納されています。FMX.StdActns.TCustomValueRange クラスを参照してください。

IValueRange インターフェイス

TCustomValueRangeAction クラスを使用する各コントロールでは、このインターフェイスをサポートしている必要があります。IValueRange は、アクションで ValueRange プロパティへのアクセスに使用されます。

TBaseValueRange クラス

このクラスは、浮動小数点数の Value をその範囲に関連付けます。このクラスはデータを保持するだけで、格納している Value が受け入れ可能かどうかを確認しません。

TBaseValueRange クラスの最重要メンバ:

メンバ 説明

Min

許容値の下限です。

Max

許容値の上限です。

Value

可変の浮動小数点パラメータです。

ViewportSize

TScrollBar のようなコントロールでサム サイズの定義に使用されます。Value の有効最大値が Max - ViewportSize に従って小さくなることに注意してください。

Frequency

Value の起こり得る変化のステップ幅です。Value は、Frequency の倍数、MinMax のいずれかになります。たとえば、以下の場合、

Min = 0.1
Max = 2.1
ViewportSize = 0
Frequency = 1

Value は次のように変化できます。

0.1
1
2
2.1

次のようにはなれません。

Value = 1.1

Equals

現在のオブジェクトのすべてのプロパティ値が、指定されたオブジェクト Obj の対応するプロパティの値に正確に等しいかどうかを確認します。この関数は、現在のオブジェクトのすべてのプロパティ値が、Obj の対応するプロパティの値に等しい場合には True を返します。

Same

現在のオブジェクトのすべてのプロパティ値が、指定されたオブジェクト Obj の対応するプロパティの値に近いかどうかを確認します。この関数は Equals と似ていますが、SameValue 関数を使用して値を比較します。つまり、値の差が発生し得る丸め誤差より小さい場合は、値がほぼ等しいと SameValue 関数が判断し、SameTrue を返します。


TCustomValueRange クラス

TCustomValueRange は、TBaseValueRange の下位クラスです。Value を格納するだけでなく、Value の正確さを制御する機能も提供します。たとえば、Max 値を Value > Max となるように設定した場合、ValueValue = Max となるように変更されます。

TCustomValueRange クラスの最重要メンバ:

メンバ 説明

IsEmpty

すべてのプロパティ(MinMaxValue など)がデフォルト値になっている場合、True を返します。

Clear

すべてのプロパティ(MinMaxValue など)にデフォルト値を割り当てます。

Tracking

Tracking = True の場合は、いずれかのプロパティが変化するたびに、BeforeChange イベントと AfterChange イベントが発生します。Tracking = False の場合は、BeforeChange イベントと AfterChange イベントは発生しません。

IsChanged

一部のプロパティが変更されたものの、値がまだ再計算されていないことを示します。

Changed

このメソッドは、いずれかのプロパティの値が変更された直後に呼び出されます。値を再計算し、(必要であれば)適切なイベントを発生させ、IsChangedFalse に設定します。アクションの Owner コンポーネントが読み込み中か UpdateCount > 0 の場合は、アクティビティは何も生成されず、IsChangedTrue に設定されます。読み込みが完了した後、コントロールでは、IsChanged プロパティの値を確認し、(必要であれば)Changed メソッドを呼び出さなければなりません。

New

TBaseValueRange クラスに宣言されているプロパティ(MaxMinValueFrequencyViewportSize)の新しい値を格納する TBaseValueRange 型プロパティです。BeforeChange イベントのハンドラで使用できます。

RelativeValue

このプロパティは、以下の式に従って Value に対して相対的に計算されます。

RelativeValue = (Value-Min)/(Max-Min-ViewportSize)

0 から 1 までの範囲に収まります。コントロールでのサムの配置に使用できます。

Owner

このクラス インスタンスのオーナー コンポーネントです。

BeginUpdate

更新の開始です。

EndUpdate

更新の終了です。

UpdateCount

更新が開始された回数のカウンタです。UpdateCount > 0 の場合、UpdateCount = 0 に設定する EndUpdate メソッドが呼び出されるまで、更新は実際には実行されません。MaxMinValueFrequencyViewportSize の各プロパティはすべて古い値のままです。これらのプロパティに新しい値を設定するには、New プロパティを使用します。

Changing

このプロパティは、TCustomValueRange 型オブジェクトが値の再計算状態にあることを示します。

BeforeChange

このイベントは、パラメータの新しい値が有効になる前に発生します。たとえば、Min にはまだ古い値が格納されており、新しい値は New.Min パラメータにのみ入っています。BeforeChange イベントは、Tracking = True の場合に発生します。

OnChanged

このイベントは、Tracking 値に関係なく、いずれかのパラメータの値が変化した後に発生します。

AfterChange

このイベントは、Tracking = True の場合にのみ、いずれかのパラメータの値が変化した後に発生します。

OnTrackingChange

このイベントは、UpdateCount に関係なく、Tracking パラメータの値が変化した後に発生します。

DoBeforeChange
DoChanged
DoAfterChange
DoTrackingChange

これらの仮想メソッドは、それぞれ対応するイベントを発生させます。下位クラスを作成する場合は、対応するイベント ハンドラを割り当てる代わりに、これらのメソッドをオーバーライドできます。

MaxStored
MinStored
ValueStored
FrequencyStored
ViewportSizeStored

これらの仮想関数は、対応するプロパティ値がデフォルトとは異なる場合に、True を返します。


TValueRange クラス

このクラスは TCustomValueRange と似ていますが、公開プロパティがあります。

関連項目

アプリケーション サンプル