Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TAction(List) wofür ist das gut? (https://www.delphipraxis.net/183538-taction-list-wofuer-ist-das-gut.html)

p80286 18. Jan 2015 09:52

TAction(List) wofür ist das gut?
 
Hallo zusammen,
es ist Sonntag und da kann man mal versuchen etwas über seinen Tellerrand zu schauen.

Im Prinzip finde ich die Idee gut eine zentralen Einsprung von der GUI in die Verarbeitenden Routinen zu haben.
Nur beim Durchlesen der Doku stellt sich das für mich so dar, daß die TAction(List) nur mit vorher registrierten Komponenten umgehen kann.
Und da ich immer noch ein Freund von nicht installierten Programmen bin, scheint Taction(List) für mich unbrauchbar.
Oder hab ich da was in den falschen Hals bekommen?

Gruß
K-H

Daniel 18. Jan 2015 10:21

AW: TAction(List) wofür ist das gut?
 
Eine Action-List ist erstmal nur innerhalb Deiner Delphi-Anwendung gültig und hilft Dir, Code wenigstens ein bisschen von er Oberfläche fern zu halten.

Stelle Dir vor, Du hättest eine Action "SaveData", die Deine Daten sichern soll. Im OnExecute-Event dieser Action definierst Du den Programmcode, der nötig ist.
Zusätzlich hat die Action noch Eigenschaften wie "Caption", "Hint", "ImageIndex" oder "Enabled". Klassiker, die Du zum Beispiel von Buttons oder Menüeinträgen kennst. Wenn Du diese Eigenschaften bei Deiner Action einstellst und dann zum Beispiel einem Button diese Action zuweist, holt er sich alle relevanten Einstellungen aus der Action. Er ist also sofort richtig beschriftet. Nun weise die selbe Action einem Menüeintrag zu. Auch dieser wird sich die Beschriftung holen. Jetzt hast Du Dich vielleicht in der Beschriftung vertan - ändere sie einmalig in der Action und diese Änderung wird sich auf den Button UND den Menüeintrag auswirken.
Sollte Dein Programm an einer Stelle sein, an der es nichts zu speichern gibt, das Ausführen der Action keinen Sinn ergeben würde, stelle deren Eigenschaft "Enabled" auf FALSE. Prompt hat sich dies auf den Button und den Menüeintrag ausgewirkt.

Actions können schon sehr praktisch sein.

Sir Rufo 18. Jan 2015 10:28

AW: TAction(List) wofür ist das gut?
 
Ein weiterer sehr schöner Aspekt der Actions ist der Event Delphi-Referenz durchsuchenTAction.OnUpdate. Dieser wird ständig (immer wenn die Anwendung in den Idle-Modus geht) aufgerufen und man kann den Status der Action festlegen.

Dadurch spart man sich eine Menge Code, die z.B. eine ganze Reihe von Buttons ständig auf Enabled/Disabled stellen soll und es dann solche Rattenschwänze gibt, wo sich immer wieder alles wiederholt.

Im Event wird einfach überprüft, ob der aktuelle Status diese Aktion zulässt oder nicht und setzt die Enabled Eigenschaft der Action (oder auch jede andere, je nach Bedarf).

pelzig 18. Jan 2015 11:55

AW: TAction(List) wofür ist das gut?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kann mich Daniel und Sir Rufo nur anschließen.

Schau Dir mal die angehängt actDemo.zip (Source und Echse) an, benutzt wurden nur Standardkomponenten von D7.

"Programmiert" darin sind nur vier Prozeduren, den Rest habe ich im OI zusammengeklickt bzw. hinterher im OI miteinander verbunden.

Ändere mal im OI z.B. die Caption für "actCopy" in der ActionList und Du siehst sofort, wie sich das auf das Mainmenu, den Button und das Popupmenu auswirkt.

Markier' in der laufenden Echse etwas im RichEdit, und Du siehst sofort, wie sich die Prozedur "actCopyUpdate" auf Mainmenu, den Button und das Popupmenu auswirkt.

Bei mir hat es auch etwas gedauert, bis ich die enormen Vorteile einer ActionList kapierte (DRY), danach habe ich viele - eher kleine - Spaghetticode-Programme mit einer ActionList nachgerüstet.

Tipp für ein neues Projekt: Erst eine ImageList, dann eine ActionList auf das Formular. "Programmiert" wird dann in den Actions der ActionList, die man den MenuItems in Mainmenu, PopUps usw. (ggfs. nachträglich) zuweist.

MfG

Der schöne Günther 19. Jan 2015 08:51

AW: TAction(List) wofür ist das gut?
 
Es ist leider nicht mehr Sonntag, aber dieser (für Borland-Verhältnisse) relativ neue Artikel dürfte wahrscheinlich alles abdecken:

Actions, Action Lists And Action Managers

p80286 19. Jan 2015 09:59

AW: TAction(List) wofür ist das gut?
 
Hallo und vielen Dank. Nach Pelzigs Beispiel weiß ich so ungefähr wie der Hase läuft. Es scheint also auch ohne GUIDs zu gehen.
@den schönsten aller Männer
Wenn nicht Sonntag dann eben abends irgendwann;)

vielen Dank nochmals.

Gruß
K-H

Der schöne Günther 19. Jan 2015 10:03

AW: TAction(List) wofür ist das gut?
 
Ich hab mir den Artikel schon vor Monaten auf meine ToDo-Liste gelegt und ihn bis heute nicht geschafft :-(

p80286 19. Jan 2015 10:23

AW: TAction(List) wofür ist das gut?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1287023)
Ich hab mir den Artikel schon vor Monaten auf meine ToDo-Liste gelegt und ihn bis heute nicht geschafft :-(

Du hast zu wenige Sonntage

Gruß
K-H

wschrabi 5. Aug 2023 10:48

AW: TAction(List) wofür ist das gut?
 
Danke für dieses Offenlegung und INFOs über den SInn und Zweck von ActionLists.
:-D

wschrabi 5. Aug 2023 11:03

AW: TAction(List) wofür ist das gut?
 
Zitat:

Zitat von pelzig (Beitrag 1286929)
Kann mich Daniel und Sir Rufo nur anschließen.

Schau Dir mal die angehängt actDemo.zip (Source und Echse) an, benutzt wurden nur Standardkomponenten von D7.

"Programmiert" darin sind nur vier Prozeduren, den Rest habe ich im OI zusammengeklickt bzw. hinterher im OI miteinander verbunden.

Ändere mal im OI z.B. die Caption für "actCopy" in der ActionList und Du siehst sofort, wie sich das auf das Mainmenu, den Button und das Popupmenu auswirkt.

Markier' in der laufenden Echse etwas im RichEdit, und Du siehst sofort, wie sich die Prozedur "actCopyUpdate" auf Mainmenu, den Button und das Popupmenu auswirkt.

Bei mir hat es auch etwas gedauert, bis ich die enormen Vorteile einer ActionList kapierte (DRY), danach habe ich viele - eher kleine - Spaghetticode-Programme mit einer ActionList nachgerüstet.

Tipp für ein neues Projekt: Erst eine ImageList, dann eine ActionList auf das Formular. "Programmiert" wird dann in den Actions der ActionList, die man den MenuItems in Mainmenu, PopUps usw. (ggfs. nachträglich) zuweist.

MfG

DANKE;:thumb: eine FRAGE: Wie hast Du es geschaft, dass wenn man im RichEdit Feld was markiert dass, automatisch EINFÜGEN aktiv ist. Gibt es das OnEdit im RichEdit Feld? Oder wo ist da das Event bzw. der On-Handler.
DANKE


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz