FMX.ActnList.TActionLink

提供: RAD Studio API Documentation
移動先: 案内検索

System.Actions.TContainedActionLinkSystem.Classes.TBasicActionLinkSystem.TObjectTActionLink

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 を拡張します:

  • アクション プロパティとリンクされるクライアント プロパティの値を設定する、メソッドの実装を提供。


TCustomViewAction アクションのプロパティとクライアントの対応するプロパティとのリンク付けにおける特殊動作

TActionLink において実装される際、TCustomViewAction アクションの複数のプロパティは、クライアントの対応するプロパティとリンク付けされません。これらは、CheckedLinkedEnabledLinkedGroupIndexLinkedShortCutLinkedVisibleLinkedOnExecuteLinked プロパティにおいて実装されます。それらは、TActionLink アクション リンクに割り当てられているアクションが TCustomViewAction に属する場合に、False を返します。これは、EnabledCheckedGroupIndexShortCutVisible、and OnExecute の各プロパティの値の変更が、アクション リンクで関連付けられたクライアントの対応プロパティに伝播されないことを意味します。

TCustomViewActionCheckedLinkedEnabledLinkedGroupIndexLinkedShortCutLinkedVisibleLinked、and OnExecuteLinked プロパティに属しないアクションについては、True を返します。つまり、EnabledCheckedGroupIndexShortCutVisible, and OnExecute の各プロパティの値における変更は、アクション リンクで関連付けられたクライアントの対応プロパティに伝播されます。


アクション リンクの使用方法とその理由

RAD Studio アプリケーションの設計時には、通常、アクションをクライアント(コントロール、メニュー項目、ツール ボタンなど、Action プロパティをサポートしている TFmxObject 型のコンポーネント)に割り当てます。

アクションをクライアントに割り当てる方法

設計時には、以下の手順でこの割り当てを行うことができます。

  1. フォーム デザイナで、クライアント コンポーネント(TFmxObject 型にキャスト可能なオブジェクト)を選択します。選択したコンポーネントに可視性が publishedAction プロパティがあれば、そのプロパティが[オブジェクト インスペクタ]に表示されます。
  2. [オブジェクト インスペクタ]Action の項目を選択し、右側の下向き矢印をクリックします。クライアントに割り当てたいアクションを選択します。

実行時には、望ましいアクションをクライアント オブジェクトの ActionTFmxObject.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 プロパティに対して、それぞれアクションの取得や設定を行います。 GetActionLinkClassnil 以外の値を返すなら、アクション オブジェクトが Action に割り当てられています。コントロール オブジェクトがアクションをサポートしていない場合には、GetActionLinkClassnil を返すはずです。この場合、値を 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 が呼び出されます。


メモ: アクション リンク クラスは RAD Studio の内部機能です。アプリケーション内で明示的にアクション リンク クラスを使用する必要はありませんが、独自の型のクライアント コンポーネントを作成する場合は例外です。たとえば、作成するクライアント コンポーネントに新しいプロパティがある場合には、適切なアクション リンク オブジェクトを使ってそのプロパティの状態を制御する必要があります。そのため、いずれかのアクション リンク クラスを拡張してそのプロパティを処理する必要が生じる可能性があります。

コード例

関連項目