Afficher : Object Pascal C++
Préférences d'affichage

Comment utiliser les liaisons d'actions

De Appmethod Topics

Les programmes utilisent les liaisons d'actions pour connecter des actions à des clients. Cette rubrique présente comment implémenter de telles liaisons.

Types de classes d'actions

L'implémentation des actions dans Appmethod a recours aux trois types de classes d'actions principaux suivants :

  • Les classes TAction. TAction et ses classes descendantes définissent les objets action de FireMonkey. TAction et ses classes descendantes implémentent les actions à utiliser avec les contrôles, les éléments de menu et les boutons outils. Les événements et les propriétés publiées des actions peuvent être gérés dans l'inspecteur d'objets à la conception.
  • Les classes TActionLink. TActionLink et ses classes descendantes définissent des liaisons d'actions. Une liaison d'actions connecte une action à un client (les objets, composants et contrôles VCL ou FireMonkey). Le client est le paramètre correspondant au constructeur TActionLink et l'objet action assigné est indiqué par la propriété TBasicActionLink.Action. Un objet liaison d'actions configure également des liaisons entre une action et les propriétés du client ainsi que les événements d'exécution et de mise à jour.
Les actions permettent à une application de centraliser les réponses aux commandes de l'utilisateur. Quand une liaison d'actions associe un client à une action, l'action détermine les propriétés et événements appropriés du client (par exemple si le client est activé ou comment il réagit à un événement OnClick).

Comment et pourquoi les liaisons TActionLink sont utilisées

Lors de la conception d'applications Appmethod, le programmeur assigne typiquement des actions à un client (contrôle, élément de menu, bouton outil ou n'importe quel autre type de composant TFmxObject qui supporte la propriété Action).

Comment assigner une action à un client

Lors de la conception, vous pouvez effectuer l'assignation en utilisant l'algorithme suivant :

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

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

Comment accéder à une propriété Action

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

property Action: TBasicAction read GetAction write SetAction;

Vous remarquerez que la classe TFmxObject ne comporte pas de champ FAction. L'accesseur en écriture SetAction et l'accesseur en lecture GetAction privés récupèrent des valeurs d'actions depuis la propriété Action du type d'objet TActionLink approprié. L'accesseur en écriture et l'accesseur en lecture récupèrent un type d'objet TActionLink en appelant GetActionLinkClass.

Le noyau de l'accesseur en écriture de SetAction ressemble à ceci :

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

Où :

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, notez 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;

L'accesseur en écriture 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 référence de la classe lClass :

lClass := GetActionLinkClass;

GetActionLinkClass renvoie la classe de la 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 une nouvelle fois l'objet liaison d'actions stocké dans la propriété FActionLink. C'est-à-dire que les objets client ne gardent pas une action associée explicitement. Les actions sont stockées dans un objet liaison d'actions associé. L'accesseur en lecture GetAction et l'accesseur en écriture SetAction récupèrent et définissent, respectivement, une action à partir de ou sur la propriété Action de cet objet de liaison d'action. Si GetActionLinkClass renvoie une valeur non nil, l'objet action est assigné à Action. Si l'objet contrôle ne supporte pas les actions, GetActionLinkClass doit renvoyer nil. Dans ce cas, la tentative de définition d'une valeur pour la propriété Action déclenche l'exception suivante :

StrEActionNoSuported = 'La classe %s ne supporte pas l'action'

Remarquez 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 client d'une quelconque action.
  • Si Action <> nil alors ActionClient = True. Cela signifie que cet objet composant est client d'une action associée. Après la modification de la propriété ActionClient, la méthode virtuelle DoActionClientChanged est appelée.
Remarque : Les classes de liaison d'actions sont une fonction interne de Appmethod. Il n'est pas nécessaire d'utiliser explicitement les classes de liaison d'actions dans une application, sauf si vous créez votre propre type de composants client. Si, par exemple, votre composant client comporte de nouvelles propriétés, il est alors nécessaire que l'objet liaison d'actions approprié contrôle les états de ces propriétés. Par conséquent, il peut être nécessaire d'étendre la classe de liaison d'actions pour pouvoir gérer ces propriétés.

Voir aussi

Outils personnels
Autres langues