FMX.ActnList.TActionLink
Delphi
TActionLink = class(TContainedActionLink)
C++
class PASCALIMPLEMENTATION TActionLink : public System::Actions::TContainedActionLink
目次
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
class | public | FMX.ActnList.pas FMX.ActnList.hpp |
FMX.ActnList | FMX.ActnList |
説明
アクション リンクは、アクションをクライアント(コントロール、メニュー項目、ツール ボタン)に接続します。
TActionLink は、次によって TContainedActionLink を拡張します:
- アクションのどのプロパティが、クライアントの対応するプロパティとリンクされるのかを判別する、プロパティの定義。
- これらは次のプロパティです: CheckedLinked、EnabledLinked、GroupIndexLinked、ShortCutLinked、VisibleLinked、および OnExecuteLinked。これらは、アクションのプロパティが、クライアントの対応するプロパティにリンクされているかをチェックする、それぞれに対応するメソッドを呼び出します。
- これらは、IsCheckedLinked、IsEnabledLinked、IsGroupIndexLinked、IsShortCutLinked、IsVisibleLinked、IsOnExecuteLinked といったメソッドとなります。 これらのメソッドは、TActionLink で実装されます。
- アクション プロパティとリンクされるクライアント プロパティの値を設定する、メソッドの実装を提供。
TCustomViewAction アクションのプロパティとクライアントの対応するプロパティとのリンク付けにおける特殊動作
TActionLink において実装される際、TCustomViewAction アクションの複数のプロパティは、クライアントの対応するプロパティとリンク付けされません。 これらは、CheckedLinked、EnabledLinked、GroupIndexLinked、ShortCutLinked、VisibleLinked、OnExecuteLinked プロパティにおいて実装されます。 それらは、TActionLink アクション リンクに割り当てられているアクションが TCustomViewAction に属する場合に、False
を返します。 つまり、Enabled、Checked、GroupIndex、ShortCut、Visible、OnExecute プロパティの値における変更は、アクション リンクで関連付けられたクライアントの対応するプロパティに伝播されます。
TCustomViewAction、CheckedLinked、EnabledLinked、GroupIndexLinked、ShortCutLinked、VisibleLinked、OnExecuteLinked プロパティに属しないアクションについては、True
を返します。つまり、Enabled、Checked、GroupIndex、ShortCut、Visible、OnExecute の各プロパティの値における変更は、アクション リンクで関連付けられたクライアントの対応プロパティに伝播されます。
アクション リンクの使用方法とその理由
RAD Studio アプリケーションを設計する際、プログラマは大抵、アクションをクライアント(コントロール、メニュー項目、ツール ボタン、またはその他の Action プロパティをサポートする TFmxObject 型コンポーネント)をサポートします。
アクションをクライアントに割り当てる方法
設計時に、この割り当てを次のアルゴリズムで行うことができます:
- フォーム デザイナで、クライアント コンポーネント(TFmxObject 型にキャストできるオブジェクト)を選択します。選択されたコンポーネントに published 可視性の Action プロパティがあった場合、このプロパティは オブジェクト インスペクタ に表示されます。
- オブジェクト インスペクタで、Action 項目を選択し、右側にある下矢印をクリックし、クライアントに割り当てたいアクションを選択します。
実行時に、シンプルに必要なアクションを、クライアント オブジェクトの Action (TFmxObject.Action) プロパティに割り当てることもできます。
Action プロパティにアクセスする方法
Action プロパティに対してアクションを割り当てたり取得することは、直接的な操作ではありません。Action プロパティは次のように宣言されています。
property Action: TBasicAction read GetAction write SetAction;
TFmxObject クラスには FAction フィールドがない点に注意してください。private 設定メソッド SetAction と、取得メソッド GetAction は、アクション値を適切な TActionLink の種類のオブジェクトの Action プロパティから設定および取得します。設定メソッドおよび取得メソッドは、GetActionLinkClass を呼び出すことにより、TActionLink 種類のオブジェクトを取得します。
設定アクセサ SetAction の中核部分は次のようになっています。
procedure TFmxObject.SetAction(const Value: TBasicAction);
var
lClass: TActionLinkClass;
begin
lClass := GetActionLinkClass;
FActionLink := lClass.Create(Self);
ActionLink.Action := Value;
end;
上記の
lClass: TActionLinkClass;
この部分では、変数 lClass
を宣言しています。この値は、TActionLink クラスまたはその下位クラスのクラス参照です。このコードを理解するために、TFmxObject クラスで読み取り専用の ActionLink プロパティを宣言していることに注目してください。これは次のように FActionLink フィールドに格納されます。
property ActionLink: TActionLink read FActionLink;
SetAction 設定アクセサでは、クライアントに関連付けられたアクション リンク オブジェクトの ActionLink.Action
プロパティを設定します。このアクション リンク オブジェクトは、次のようにして作成され、FActionLink に割り当てられます。
FActionLink := lClass.Create(Self);
以下のコードでは、クラス参照値 lClass
を取得しています。
lClass := GetActionLinkClass;
GetActionLinkClass は、関連付けられたアクション リンク クラスを返します。 Action を取得するには、クライアント オブジェクトで GetAction を呼び出します。
function TFmxObject.GetAction: TBasicAction;
begin
if Assigned(FActionLink) then
Result := FActionLink.Action
end;
この例でも、FActionLink プロパティに格納されたアクション リンク オブジェクトを使用しています。
つまり、クライアント オブジェクトでは、関連付けられたアクションを明示的に保持していません。アクションは、関連付けられたアクション リンク オブジェクトに格納されています。取得アクセサ GetAction および設定アクセサ SetAction は、このアクション リンク クラス オブジェクトの Action プロパティに対して、それぞれアクションの取得や設定を行います。
GetActionLinkClass が nil
以外の値を返すなら、アクション オブジェクトが Action に割り当てられています。コントロール オブジェクトがアクションをサポートしていない場合には、GetActionLinkClass は nil
を返すはずです。この場合、値を Action プロパティに設定しようとすると、次の例外が発生します。
StrEActionNoSuported = 'Class %s does not support the action'
ActionClient プロパティに注目してください。
property ActionClient: boolean read FActionClient;
ActionClient のプロパティは、Action の値によって異なります。
Action = nil
の場合には、ActionClient = False
です。つまり、このコンポーネント オブジェクトはどのアクションのクライアントでもありません。Action <> nil
の場合には、ActionClient = True
です。つまり、このコンポーネント オブジェクトは関連付けられた何らかのアクションのクライアントです。ActionClient プロパティを変更すると、仮想メソッド DoActionClientChanged が呼び出されます。