Home » Tutorials » VCL » Aktionen verwenden

Aktionen verwenden

Weiter geht’s

So weit, so einfach. Aber mit Aktionen lassen sich noch weitere Dinge bewerkstelligen.

Bilder zuweisen

Recht simpel ist es zum Beispiel, der Aktion auch ein Symbolbild zuzuweisen. Dazu fügt man zuerst dem Formular eine ImageList (Registrierkarte Win32) hinzu. Mit Doppelklicken gelangt man in den Editor, wo man der Komponente eine Reihe von Bildern zuweisen kann, die alle die gleiche Größe haben sollten. Danach weist man diese ImageList der ActionList-Komponente, die unsere Aktionen enthält, zu (Eigenschaft ImageList). Jetzt kann für jede Aktion über die Eigenschaft ImageIndex ein Bild ausgewählt werden.
Ist die Aktion einem Steuerelement zugewiesen, dass auch ein Bild anzeigen kann (TSpeedButton, TMenuItem, etc.), dann erscheint das ausgewählte Symbol an der entsprechenden Stelle.

Aktionen für Labels

Nun zum eingangs angesprochenen Problem, dass die Eigenschaft Action eben nur bei einigen visuellen Komponenten im Objektinspektor erscheint. Da aber alle von der Klasse TControl abstammen, müssten sie doch auch die Eigenschaft geerbt haben. Das haben sie auch. Sie ist aber nicht im Published-Abschnitt deklariert und taucht folglich nicht im Objektinspektor auf. Trotzdem kann man auf einfache Weise auch diesen Komponenten eine Aktion zuweisen.
Man erzeugt für das Formular einen OnCreate-Eventhandler. Dort wird der Komponente (hier z. B. ein Label) dann unsere Aktion zugewiesen:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Action := ActionClose;
end;

Nun lassen sich Aussehen und Verhalten des Labels auch durch die Aktion steuern. Ob es allerdings sinnvoll ist, ein Label als Schaltfläche zu „missbrauchen“ sei hier mal dahin gestellt. Aber vielleicht hilft es manchmal weiter.

Standardaktionen

Eine zusätzliche Vereinfachung bringen die Standardaktionen. Delphi stellt eine Reihe vordefinierter Aktionen zur Verfügung, die für bestimmte Aufgaben gedacht sind. Sie sind in folgende Kategorien eingeteilt:

  • Standard-Bearbeitungsaktionen für Textverarbeitung
  • Windows-Standardaktionen
  • Standard-Hilfeaktionen
  • Datenmengenaktionen

Ich gehe hier exemplarisch auf einige Aktionen aus der ersten Kategorie ein. Diese ist gedacht für typische Aufgaben bei der Textverarbeitung (Kopieren, Ausschneiden, Einfügen, usw.). Diese Aktionen sorgen auch für ein sinnvolles Verhalten der Schaltflächen.
Wenn man z.B. die Aktion zum Kopieren von Text (TEditCopy) verwendet, wird der entsprechende Button nur dann aktiviert, wenn man in einem Edit oder Memo auch tatsächlich Text markiert hat, andernfalls ist er deaktiviert und erscheint grau (Enabled = False). Außerdem nimmt die Aktion automatisch einige Einstellungen an der Zwischenablage vor. Darum reicht es, in die OnExecute-Prozedur der Aktion zu schreiben:

procedure TForm1.EditCopy1Execute(Sender: TObject);
begin
  Memo1.CopyToClipboard;
end;

Das reicht für eine Schaltfläche, die aus Memo1 den markierten Text in die Zwischenablage kopiert.
Um den Text wieder einzufügen, verwendet man die Aktion TEditPaste. Sie sorgt dafür, dass die Schaltfläche nur aktiviert wird, wenn sich etwas in der Zwischenablage befindet. Das eigentliche Einfügen des Textes wird realisiert durch:

procedure TForm1.EditPaste1Execute(Sender: TObject);
begin
  Memo1.PasteFromClipboard;
end;

Eine vollständige Beschreibung aller Standardaktionen würde natürlich zu weit führen. Man findet aber eine Aufstellung in der Delphi-Hilfe: Einfach nach „Vordefinierte Aktionsklassen“ suchen.