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

  • アクションのどのプロパティが、クライアントの対応するプロパティとリンクされるのかを判別する、プロパティの定義。
これらは次のプロパティです: CheckedLinkedEnabledLinkedGroupIndexLinkedShortCutLinkedVisibleLinked、および OnExecuteLinked。これらは、アクションのプロパティが、クライアントの対応するプロパティにリンクされているかをチェックする、それぞれに対応するメソッドを呼び出します。
これらは、IsCheckedLinkedIsEnabledLinkedIsGroupIndexLinkedIsShortCutLinkedIsVisibleLinkedIsOnExecuteLinked といったメソッドとなります。 これらのメソッドは、TActionLink で実装されます。
  • アクション プロパティとリンクされるクライアント プロパティの値を設定する、メソッドの実装を提供。

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

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

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

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

RAD Studio アプリケーションを設計する際、プログラマは大抵、アクションをクライアント(コントロール、メニュー項目、ツール ボタン、またはその他の Action プロパティをサポートする TFmxObject 型コンポーネント)をサポートします。

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

設計時に、この割り当てを次のアルゴリズムで行うことができます:

  1. フォーム デザイナで、クライアント コンポーネント(TFmxObject 型にキャストできるオブジェクト)を選択します。選択されたコンポーネントに published 可視性の Action プロパティがあった場合、このプロパティは オブジェクト インスペクタ に表示されます。
  2. オブジェクト インスペクタで、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 プロパティに対して、それぞれアクションの取得や設定を行います。 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 の内部機能です。アプリケーションでアクション リンク クラスは明示的に使用する必要はありません。ただし、クライアント コンポーネントの独自型を作成したのではないかぎりです。その場合、たとえば、クライアント コンポーネントはいくつか新しいプロパティを持ち、適宜アクション リンク オブジェクトは、これらのプロパティの状態を制御する必要があります。そのため、アクション リンク クラスを拡張し、それらのプロパティを処理しなければなりません。

コード例

関連項目