Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 23.08.02 23:33 
Viele Delphi Programmierer treiben einen großen Aufwand um zu erreichen, dass sich zwei Schaltelemente in einem Programm gleich verhalten. So ist es heutzutage üblich, das ein Programm einen Toolbar besitzt über welchen die Wichtigsten Einträge des Hautmenüs noch einmal zur Verfügung gestellt werden. Sicher ist es für einen Delphi Programmierer kein Problem beiden Elementen, den Menüpunkt und dem Toolbutton, die selbe OnClick-Methode zu zuweisen aber wie sieht es aus, wenn die Funktion deaktiviert werden soll? Dann müssen zwei Befehle im Quellcode stehen und das jedesmal. Ebenso wenn der Knopf gedrückt und der Menüeintrag ein Häckchen erhalten soll.
An genau dieser Stelle setzt die ActionList an. Dieses Object wurde mit Delphi 4 eingeführt und von vielen Programmierern stiefmütterlich behandelt. Völlig zu unrecht, denn es kann dem Programmierer das viel angenehmer machen.

Action erstellen
Bevor eine Action erstellt werden kann, muss erst einmal eine ActionList auf dem Formular platziert werden. Diese befindet sich in der Komponentenpalette Standart.
Befindet diese sich im Projeckt kann mit einem einfachen Doppelklick auf sie, der Action Editor geöffnet werden. Dies ist ein schlichter Dialog. Neben viel Toolbuttons befinden sich noch 2 Listen auf ihm.
Die neue Aktion wird durch einen einfachen Click auf den ersten Button erstellt. Sofort erscheint in der Liste Aktionen ein neuer Eintrag. Seine Eigenschaften können wie gewohnt im Objektinspektor bearbeitet werden.
Diese währen im einzelnen:
Caption: Dies ist die Beschriftung, welche später im Menü aber z.B. auch auf einem Button erscheint.
Category: Hier kann ein beliebiger Kategorienname eingetragen werden. Also z.B. Programsteuerung, Dateiverarbeitung oder Peter ist doof (anwesende ausgeschlossen ;)). Die Kategorie soll es dem Programmierer nur erleichtern die übersicht zu bewahren.
Checked: Legt fest ob die, mit der Aktion verbundenen, Objekte Markiert sind oder nicht. Wenn diese Eigenschaft auf TRUE steht würde z.B. bei einer Checkbock das Häckchen gesetzt oder ein Speed Button als heruntergedrückt dargestellt werden.
Enabled: Über diese Eigenschaft können alle mit der Action verbundenen Objekte auf einen schlag (De)Aktiviert werden.
HelpContext: In HelpContext wird der Hilfekontext für die Aktion gespeichert, wie man es von anderen Komponenten kennt.
Hint: Die eigneschaft sollte jeden was sagen ;).
ImageIndex: Ist die Action List mit einer Image List verbunden so kann hier ausgewählt werden, welches Image auf den mit dieser Aktion verbundenen Objekten dargestellt werden soll. Natürlich müssen diese Objekte das unterstützen und ebenfalls mit der selben Imagelist verbunden sein.
Name: Der Name über den die Aktion später angesprochen werden kann. Üblicherweise beginnen diese mit ac.
ShortCut: Hiermit lässt sich ein Hotkey für die Aktuelle Action festlegen. Dieser wird z.B. in Menüs mit angezeigt und ist gültig, solange er nicht verdeckt wird (z.B. indem in einer MDI Anwendung ein anderes Formular den Focus erhällt). Sobald er hier eingetragen wurde ist er gültig, es sind also keine Weiteren schriffe mehr nötig.
Tag: Ein Integerwert, der vom Programmierer nach gutdünken verwendet werden kann (ist ja bekannt).
Visible: Hiermit lassen sich alle mit der Aktion verbunden Objekte auf einmal ausblenden.

Neben diesen Eigenschaften besitzt ein tAction-Objekt noch drei Ereignisse. Diese sind:
OnExecute: Dieses wird immer dann aufgerufen wenn die Action ausgeführt werden soll. Ist die Action z.B. mit einem Button verbunden wird es als OnClick-Ereignis des Buttons ausgefühtr.
OnHint: Dieses Ereignis wird ausgelöst wenn der Hint Text eines mit der Action verbundenen Objektes angezeigt werden soll. In diesem Ereignis ist es möglich die Abzeige zu unterdrücken oder den HintText noch einmal schnell zu ändern ;).
OnUpdate: wird immer dann ausgelöst, wenn sich die Anwendung inaktiv ist oder die Action List Aktualisiert wird.

Objekte mit einer Action verbinden
Aber wie verbinde ich jetzt eine solche Action mit dem dazugehörigen Objekten? Dank Borland ist das sehr einfach. Die "Actiontauglichen-" Objekte besitzen eine Eigenschaft Action. In dieser muss man nur den Namen der Action eintragen und das war es.
Am besten gleich mal ausprobieren.

Aktionen aus dem Queltext ausführen
In Foren werden häufig Fragen gestellt wie: "Wie kann ich einen Mausclick auf einen Button Simulieren?". Hiermit wollen die Programmier einfach nur den Code des OnClick Ereignisses ausführen. Mal abgesehen davon, das die in den allermeisten Fällen auf einen Designfehler hindeutet (wenn man eine Funktion aus dem Quelltext aufrufen will dann sollte man sie auch als solche deklarieren und unter anderen auch in dem OnClick-Ereignis aufrufen), wurde dies bei dem Action-Objekt vorgesehen. Ein einfacher Aufruf von acMyAction.Execute genügt.

Standartaktionen
Neben solchen selbst gemachten Actions kann man auch Bolands Standartaktionen verwenden. Diese decken häufig benötigte Funktionen wie z.B. in die Zwischenablage Kopieren oder das ausrichten der Fenster in einer MDI-Anwendung ab.
Man legt sie ebenfalls auf sehr einfache Art und weise an:

1. ActionList Editor öffnen (doppelclick auf die Actionlist).
2. Auf den kleinen Pfeil neben den ersten Toolbutton clicken.
3. Neue Standartaktion auswählen.
4. Gewünschte Aktion markieren
5. Auf Ok clicken
6. fertig.

Häufig bringen Standartaktionen auch Standartbilder mit. Die Actionlist sollte also mit einer ImageList verbunden werden bevor Standartaktionen eingefügt werden.
Die Standartaktionen weisen noch ein paar nette Extras auf. So aktiviert sich die Aktion Copy immer dann wenn in einem beliebigen Eingabefeld ein Text markiert wird. Entsprechend ist die Standartaktion Paste nur dann aktiv, wenn sich auch ein Inhalt in der Zwischenablage befindet.

Um eigenen Actionen solche Features zu ermöglichen muss man nachfahren von tAction bilden und die Virtuelle Methode HandlesTarget überschreiben.

Aber das ist eine andere Geschichte...

Klabautermann
mirom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win2000, Win XP

BeitragVerfasst: So 03.10.04 22:28 
Hallo !

Da du experte mit ActionList bist, bitte um kleine hilfe:

ich möchte meine Application für mehrere sprachen forbereiten. Dafür habe ich eigene Unit mit resourcestring gemacht. Bei Programmstart muss ich dann zu jede Action richtige Caption und Hint zuweisen ... aber wie? Es scheint dass Caption property nicht erreichbar ist.

Ich benutze D7 personal.

Danke für jede hilfe!

{sorry for poor german}
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: Mo 04.10.04 16:50 
mirom hat folgendes geschrieben:
Hallo !

Da du experte mit ActionList bist, bitte um kleine hilfe:

ich möchte meine Application für mehrere sprachen forbereiten. Dafür habe ich eigene Unit mit resourcestring gemacht. Bei Programmstart muss ich dann zu jede Action richtige Caption und Hint zuweisen ... aber wie? Es scheint dass Caption property nicht erreichbar ist.

Ich benutze D7 personal.

Danke für jede hilfe!

{sorry for poor german}


www.delphi-forum.de/...rogrammen_16593.html ?

eigentlcih wäre das ja ein neues Thema... :roll:

Klabautermann hat folgendes geschrieben:
Standart


:shock: wie stehen sie? :o

_________________
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
mirom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win2000, Win XP

BeitragVerfasst: Mo 04.10.04 18:44 
Hallo!

Habe bereits gefunen - DXGETTEXT ist geniale werkzeug für Sprachflexible programme und noch dazu ist kostenlos. Ich habe erst vor einige tagen mit Delphi angefangen ( war VB6 nutzer ) und muss ich sagen dass die zwei Sprachen eigentlich tag und nacht sind ( wobei VB6 nacht ist .... ). ActionList ist genau eine von 'kleinigkeiten' die programieren mit Delphi alles so einfach und logisch machen.

Danke für antwort!

Miro M.

{sorry for poor german}