FMX.ActnList.TActionLink

De RAD Studio API Documentation
Aller à : navigation, rechercher

System.Actions.TContainedActionLinkSystem.Classes.TBasicActionLinkSystem.TObjectTActionLink

Delphi

TActionLink = class(TContainedActionLink)

C++

class PASCALIMPLEMENTATION TActionLink : public System::Actions::TContainedActionLink

Propriétés

Type Visibilité  Source Unité  Parent
class public
FMX.ActnList.pas
FMX.ActnList.hpp
FMX.ActnList FMX.ActnList


Description

Une liaison d'actions connecte une action à un client (un contrôle, un élément de menu ou un bouton d'outil).

TActionLink étend TContainedActionLink en :

  • Définition des propriétés qui déterminent les propriétés de l'action qui sont liées aux propriétés correspondantes du client.
Ce sont les propriétés suivantes : CheckedLinked, EnabledLinked, GroupIndexLinked, ShortCutLinked, VisibleLinked et OnExecuteLinked. Elles appellent les méthodes respectives qui vérifient si les propriétés de l'action sont liées aux propriétés correspondantes du client.
Ce sont les méthodes IsCheckedLinked, IsEnabledLinked, IsGroupIndexLinked, IsShortCutLinked, IsVisibleLinked et IsOnExecuteLinked, respectivement. Ces méthodes sont implémentées dans TActionLink.
  • Fourniture de l'implémentation des méthodes définissant les valeurs des propriétés client qui sont liées aux propriétés de l'action.

Comportement spécial consistant à définir des liaisons entre les propriétés de l'action TCustomViewAction et les propriétés correspondantes des clients

Telles qu'implémentées dans TActionLink, plusieurs propriétés des actions TCustomViewAction ne sont pas liées aux propriétés correspondantes des clients. Elles sont implémentées dans les propriétés CheckedLinked, EnabledLinked, GroupIndexLinked, ShortCutLinked, VisibleLinked et OnExecuteLinked. Elles renvoient False lorsqu'une action assignée à la liaison d'action TActionLink appartient au TCustomViewAction. Cela signifie que les modifications des valeurs des propriétés Enabled, Checked, GroupIndex, ShortCut, Visible et OnExecute ne sont pas distribuées aux propriétés correspondantes des clients associés à la liaison d'action.

Pour les actions qui n'appartiennent pas aux propriétés TCustomViewAction, CheckedLinked, EnabledLinked, GroupIndexLinked, ShortCutLinked, VisibleLinked et OnExecuteLinked, renvoie True ; par conséquent, les modifications des valeurs des propriétés Enabled, Checked, GroupIndex, ShortCut, Visible et OnExecute sont distribuées aux propriétés correspondantes des clients associés à la liaison d'action.

Comment et pourquoi les liaisons d'actions sont utilisées

Lors de la conception d'applications RAD Studio, un programmeur assigne typiquement des actions aux clients (contrôles, éléments de menus, boutons d'outils ou tout autre composant de type TFmxObject prenant en charge la propriété Action).

Comment assigner une action à un client

A la conception, vous pouvez effectuer cette assignation en utilisant l'algorithme suivant :

  1. Dans le Concepteur de fiches, sélectionnez votre composant client (un objet pouvant être transtypé sur le type TFmxObject). Si le composant sélectionné a la visibilité published de la propriété Action, cette propriété apparaît alors dans l'inspecteur d'objets.
  2. Dans l'inspecteur d'objets, sélectionnez l'élément Action, cliquez sur la flèche vers le bas sur la droite, puis sélectionnez l'action que vous voulez assigner au client.

A l'exécution, vous pouvez assigner simplement l'action requise à la propriété Action (TFmxObject.Action) d'un objet client.

Comment accéder à la propriété Action

L'assignation d'une action à la propriété Action ou son obtention depuis cette propriété n'est pas une opération directe. La propriété Action a la déclaration suivante :

property Action: TBasicAction read GetAction write SetAction;

Notez que la classe TFmxObject n'a pas de champ FAction. L'accesseur en écriture private SetAction et l'accesseur en lecture GetAction définit et récupère, respectivement, les valeurs d'action de la propriété Action de l'objet de type TActionLink adéquat. Les accesseurs en écriture et en lecture récupèrent un objet de type TActionLink en appelant GetActionLinkClass.

Le noyau du setter SetAction a l'apparence suivante :

 procedure TFmxObject.SetAction(const Value: TBasicAction);
 var
   lClass: TActionLinkClass;
 begin
    lClass := GetActionLinkClass;
    FActionLink := lClass.Create(Self);
    ActionLink.Action := Value;
 end;

Ici :

lClass: TActionLinkClass;

déclare la variable lClass dont la valeur est la référence de classe pour la classe TActionLink ou pour l'un de ses descendants. Pour comprendre ce code, sachez que la classe TFmxObject déclare la propriété en lecture seule ActionLink, qui est stockée dans le champ FActionLink :

property ActionLink: TActionLink read FActionLink;

Le setter SetAction définit la propriété ActionLink.Action dans l'objet liaison d'actions associé au client. Cet objet liaison d'actions est créé et assigné à FActionLink par :

FActionLink := lClass.Create(Self);

Le code suivant récupère la valeur de la référence de classe lClass :

lClass := GetActionLinkClass;

GetActionLinkClass renvoie la classe de liaison d'actions associée. Pour récupérer une action, l'objet client appelle GetAction :

 function TFmxObject.GetAction: TBasicAction;
 begin
  if Assigned(FActionLink) then
    Result := FActionLink.Action
 end;

Cet exemple utilise encore l'objet liaison d'actions stocké dans la propriété FActionLink. Ce qui signifie que les objets client ne conservent pas explicitement une action associée. L'action est stockée dans l'objet liaison d'actions associé. Le getter GetAction et le setter SetAction récupèrent et définissent respectivement une action depuis ou vers la propriété Action de cet objet liaison d'actions. Si GetActionLinkClass renvoie une valeur non nil, l'objet action est assigné à Action. Si l'objet contrôle ne prend pas en charge les actions, GetActionLinkClass doit renvoyer nil. Dans ce cas, la tentative de définir la propriété Action sur une valeur déclenche l'exception suivante :

StrEActionNoSuported = 'Class %s does not support the action'

Examinez la propriété ActionClient :

property ActionClient: boolean read FActionClient;

La propriété ActionClient dépend de la valeur de Action :

  • Si Action = nil alors ActionClient = False. Cela signifie que cet objet composant n'est pas un client d'une action quelconque.
  • Si Action <> nil alors ActionClient = True. Cela signifie que cet objet composant n'est pas un client d'une action associée. Dès que la propriété ActionClient est modifiée, la méthode virtuelle DoActionClientChanged est appelée.


Remarque: Les classes de liaison d'action sont une fonctionnalité interne de RAD Studio. Vous n'avez pas besoin d'utiliser explicitement les classes de liaison d'action dans une application, sauf si vous créez votre propre type de composants client. Dans le cas, par exemple, où votre composant client est doté de nouvelles propriétés, il est nécessaire que l'objet liaison d'action approprié contrôle l'état de ces propriétés. Par conséquent, vous devez étendre des classes de liaison d'action pour gérer ces propriétés.

Exemples de code

Voir aussi