FMX.ActnList.TActionLink

Delphi
TActionLink = class(TContainedActionLink)
C++
class PASCALIMPLEMENTATION TActionLink : public System::Actions::TContainedActionLink
Inhaltsverzeichnis
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
class | public | FMX.ActnList.pas FMX.ActnList.hpp |
FMX.ActnList | FMX.ActnList |
Beschreibung
Die Aktionsverknüpfung verbindet eine Aktion mit einem Client (Steuerelement, Menüeintrag oder Symbolschaltfläche).
TActionLink erweitert TContainedActionLink durch:
- Definition von Eigenschaften zum Ermitteln, welche Eigenschaften der Aktion mit den entsprechenden Eigenschaften des Clients verknüpft sind.
- Dabei handelt es sich um die folgenden Eigenschaften: CheckedLinked, EnabledLinked, GroupIndexLinked, ShortCutLinked, VisibleLinked und OnExecuteLinked. Diese Eigenschaften rufen die entsprechenden Methoden zum Überprüfen auf, ob Eigenschaften der Aktion mit den entsprechenden Eigenschaften des Clients verknüpft sind.
- Dies sind die Methoden IsCheckedLinked, IsEnabledLinked, IsGroupIndexLinked, IsShortCutLinked, IsVisibleLinked und IsOnExecuteLinked. Diese Methoden sind in TActionLink implementiert.
- Bereitstellung der Implementierung von Methoden, die Werte von mit Aktionseigenschaften verknüpften Client-Eigenschaften festlegen.
Spezielles Verhalten beim Verknüpfen von Eigenschaften der Aktion TCustomViewAction mit zugehörigen Eigenschaften von Clients
Gemäß der Implementierung in TActionLink werden bestimmte Eigenschaften von TCustomViewAction-Aktionen nicht mit den entsprechenden Eigenschaften von Clients verknüpft. Dies sind die Eigenschaften CheckedLinked, EnabledLinked, GroupIndexLinked, ShortCutLinked, VisibleLinked und OnExecuteLinked. Sie geben False
zurück, wenn eine der Aktionsverknüpfung TActionLink zugeordnete Aktion zu TCustomViewAction gehört. Das bedeutet, dass Änderungen des Werts der Eigenschaften Enabled, Checked, GroupIndex,
ShortCut, Visible und OnExecute nicht an die entsprechenden Eigenschaften von der Aktionsverknüpfung zugeordneten Clients weitergegeben werden.
Für Aktionen, die nicht zu TCustomViewAction gehören, geben die Eigenschaften CheckedLinked, EnabledLinked, GroupIndexLinked, ShortCutLinked, VisibleLinked und OnExecuteLinked True
zurück; deshalb werden Änderungen der Werte der Eigenschaften Enabled, Checked, GroupIndex,
ShortCut, Visible und OnExecute an die entsprechenden Eigenschaften von der Aktionsverknüpfung zugeordneten Clients weitergegeben.
Verwendung von Aktionsverknüpfungen
Beim Entwerfen von RAD Studio-Anwendungen weist der Programmierer normalerweise Clients (Steuerelementen, Menüeinträgen, Symbolschaltflächen oder anderen Komponenten vom Typ TFmxObject, die die Eigenschaft Action unterstützen) Aktionen zu.
Zuweisen einer Aktion zu einem Client
Beim Entwurf können Sie diese Zuweisung folgendermaßen vornehmen:
- Wählen Sie im Formular-Designer Ihre Client-Komponente (ein Objekt, das in den Typ TFmxObject umgewandelt werden kann) aus. Wenn die ausgewählte Komponente die Sichtbarkeit published der Eigenschaft Action hat, dann erscheint diese Eigenschaft im Objektinspektor.
- Wählen Sie im Objektinspektor den Eintrag Action aus, klicken Sie rechts auf den nach unten weisenden Pfeil, und wählen Sie dann die Aktion aus, die Sie dem Client zuordnen möchten.
Zur Laufzeit können Sie die benötigte Aktion einfach der Eigenschaft Action (TFmxObject.Action) eines Client-Objekts zuweisen.
Zugreifen auf eine "Action"-Eigenschaft
Das Zuweisen oder Abrufen einer Aktion zu oder aus der Eigenschaft Action wird nicht direkt vorgenommen. Die Eigenschaft Action hat die folgende Deklaration:
property Action: TBasicAction read GetAction write SetAction;
Die Klasse TFmxObject verfügt über kein FAction-Feld. Die private Setter-Methode SetAction und die Getter-Methode GetAction setzen bzw. ermitteln Aktionswerte in bzw. aus der Eigenschaft Action des passenden TActionLink-Objekts. Die Setter- und Getter-Methoden rufen ein TActionLink-Objekt durch Aufruf von GetActionLinkClass ab.
Das Kernstück der SetAction-Setter-Methode sieht etwa folgendermaßen aus:
procedure TFmxObject.SetAction(const Value: TBasicAction);
var
lClass: TActionLinkClass;
begin
lClass := GetActionLinkClass;
FActionLink := lClass.Create(Self);
ActionLink.Action := Value;
end;
Hier deklariert:
lClass: TActionLinkClass;
die lClass
-Variable, deren Wert die Klassenreferenz für die Klasse TActionLink oder für eine davon abgeleitete Klasse ist. Beachten Sie zum besseren Verständnis dieses Codes, dass die Klasse TFmxObject die schreibgeschützte Eigenschaft ActionLink deklariert, die in dem Feld FActionLink gespeichert wird:
property ActionLink: TActionLink read FActionLink;
Die Setter-Methode SetAction legt die Eigenschaft ActionLink.Action
in dem Aktionsverknüpfungsobjekt, das dem Client zugeordnet ist, fest. Dieses Aktionsverknüpfungsobjekt wird erstellt und FActionLink durch den folgenden Code zugewiesen:
FActionLink := lClass.Create(Self);
Der folgende Code ruft den lClass
-Klassenreferenzwert ab:
lClass := GetActionLinkClass;
GetActionLinkClass gibt die zugeordnete Aktionsverknüpfungsklasse zurück. Um eine Action abzurufen, ruft das Client-Objekt GetAction auf:
function TFmxObject.GetAction: TBasicAction;
begin
if Assigned(FActionLink) then
Result := FActionLink.Action
end;
In diesem Beispiel wird das in der Eigenschaft FActionLink gespeicherte Aktionsverknüpfungsobjekt verwendet.
Das heißt, dass Client-Objekte eine zugeordnete Aktion nicht explizit beibehalten. Die Aktion wird im zugehörigen Aktionsverknüpfungsobjekt gespeichert. Die Getter-Methode GetAction und die Setter-Methode SetAction ermitteln bzw. legen eine Aktion aus der oder für die Eigenschaft Action dieses Aktionsverknüpfungsobjekts fest.
Wenn GetActionLinkClass einen Wert ungleich nil
zurückgibt, wird das Aktionsobjekt zu Action zugewiesen. Wenn das Steuerelementobjekt keine Aktionen unterstützt, dann sollte GetActionLinkClass nil
zurückgeben. In diesem Fall löst der Versuch, einen Wert für die Eigenschaft Action festzulegen, die folgende Exception aus:
StrEActionNoSuported = 'Class %s does not support the action'
Beachten Sie die Eigenschaft ActionClient:
property ActionClient: boolean read FActionClient;
Der Wert der Eigenschaft ActionClient hängt vom Wert von Action ab:
- Wenn
Action = nil
, dann istActionClient = False
. Das bedeutet, dass dieses Komponentenobjekt kein Client einer Aktion ist. - Wenn
Action <> nil
, dann istActionClient = True
. Das bedeutet, dass dieses Komponentenobjekt ein Client einer zugeordneten Aktion ist. Nach dem Ändern der Eigenschaft ActionClient wird die virtuelle Methode DoActionClientChanged aufgerufen.