Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   In Form1 auf eine in DataModul definierte TAction zugreifen (https://www.delphipraxis.net/181603-form1-auf-eine-datamodul-definierte-taction-zugreifen.html)

Glühwürmchen 28. Aug 2014 11:32

In Form1 auf eine in DataModul definierte TAction zugreifen
 
Hallo,

ich habe im "DataModuleActionsUndMenus" eine ActionList angelegt. Darin befinden sich beispielsweise folgende drei Actions:
- Action_HM_Datei_Kategorisieren
- Action_HM_Datei_Beenden
- Action_HM_Film_Suchen
...

In "FormTsKatalog" liegt eine "TMainMenue"-Komponente, mit den Menüeinträgen
- Datei
- Kategorisieren
- Beenden
- Film
...

Die ActionList lag zuvor im "FormTsKatalog". Ihre Actions sind so geschrieben, dass sie vom "OnClick"-Event des Hauptmenüs direkt aufgerufen werden können.
Ich also im OI von "Datei-Beenden" unter "OnClick" "Action_HM_Datei_BeendenExecute" eintragen bzw. auswählen(!) konnte.

Nun lege ich aber meine Actions deshalb an, weil ich deren Code nicht an mehreren Stellen im Programm stehen haben will, sondern nur deren Aufruf.
(Ist halt so beim OO Programmieren) :)

Also tat ich mir die Arbeit an und "verschob" die TActionList in ein DataModule.

Jetzt, wo alles fertig ist, stelle ich zum wiederholten Male fest, dass es mir nicht gelingen will, im OI von "Datei-Beenden" unter "OnClick" des Menüeintrages "HM_Datei_Beenden" im "FormTsKatalog"
die Aktion "Action_HM_Datei_BeendenExecute" zuzuweisen.
Dies gelingt nur über den Umweg, einen Doppelklick im OI zu machen und der Methode "HM_Datei_BeendenOnClick" den Aufruf "Action_HM_Datei_BeendenExecute(Sender);" einzufügen.

Frage:
Ist das wirklich so? also Muss das so sein?
Oder gibt es da irgendwie eine Abkürzung?

Bummi 28. Aug 2014 11:46

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Du hast den Code er Actions mit umgezogen und das Datenmodul per "uses" in Deinem Hauptformular aufgenommen?

Sir Rufo 28. Aug 2014 13:46

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Und wieso willst du dem OnClick-Event etwas zuweisen?

Bei Actions weist man z.B. dem Menü-Item einfach die passende Action zu und gut ist.

Glühwürmchen 28. Aug 2014 14:34

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Ja, ich habe den Code mit umgezogen.
Gehören denn die Action und das ActionExecute nicht zusammen?


Wenn ich nur die passende Action zuweise, dann tut diese nachher nichts, wenn sie etwas tun soll.
Woher sollte sie auch wissen, bei welchem der Events (das sind beim Menü immerhin vier Stück) sie sich angesprochen fühlen soll?

Sir Rufo 28. Aug 2014 14:39

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Ja eine Action hat eine ActionExecute-Methode, da steht drin, was beim Auslösen der Action passieren soll.

Ein MenuItem hat eine Action-Eigenschaft, wo festgelegt werden kann, welche Action ausgelöst werden soll, wenn der Menüpunkt angeklickt wird (geht auch bei einem Button und vielen anderen Controls).

Wenn du nur die Methoden zuweisen willst, wofür nimmst du denn dann überhaupt die Actions? Damit du per Doppelklick einen Methodenrumpf bekommst?

Der Vorteil von Actions ist doch, dass hier von den Actions einige Eigenschaften übernommen werden (Caption, Enabled, Selected) und dieses dann an mehrere Controls dranklatschen kann.

"Der Herr noch einen Button zum Drucken?" - Button hin, Action zum Drucken dran, fertig

Glühwürmchen 28. Aug 2014 14:54

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1270167)
Ja eine Action hat eine ActionExecute-Methode, da steht drin, was beim Auslösen der Action passieren soll.

Soweit ist das klar.

Zitat:

Zitat von Sir Rufo (Beitrag 1270167)
Ein MenuItem hat eine Action-Eigenschaft, wo festgelegt werden kann, welche Action ausgelöst werden soll, wenn der Menüpunkt angeklickt wird (geht auch bei einem Button und vielen anderen Controls).

Da ist mir etwas unklar: Woher weiß das Kontrollelement (MenuItem, Button, ...) dass genau diese Action ausgeführt werden soll, wenn ich das Ding anklicke.
Und was mache ich, wenn ich eine Action für die zu erledigende Arbeit beim klicken und eine andere Action für die zu erledigende Arbeit beim "drüber hovern" habe?

Zitat:

Zitat von Sir Rufo (Beitrag 1270167)
"Der Herr noch einen Button zum Drucken?" - Button hin, Action zum Drucken dran, fertig

Das wiederum ist klar. Genau deshalb nehme ich die Actions.
Und natürlich auch deshalb, weil ich denen so ein schickes Bildchen zuweisen kann, einen Shurtcut, eine Caption, und sie so bequem En- und disablen kann mit allen dazugehörenden Konsequenzen.

Sir Rufo 28. Aug 2014 15:02

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Zitat:

Zitat von Glühwürmchen (Beitrag 1270174)
Zitat:

Zitat von Sir Rufo (Beitrag 1270167)
Ein MenuItem hat eine Action-Eigenschaft, wo festgelegt werden kann, welche Action ausgelöst werden soll, wenn der Menüpunkt angeklickt wird (geht auch bei einem Button und vielen anderen Controls).

Da ist mir etwas unklar: Woher weiß das Kontrollelement (MenuItem, Button, ...) dass genau diese Action ausgeführt werden soll, wenn ich das Ding anklicke.
Und was mache ich, wenn ich eine Action für die zu erledigende Arbeit beim klicken und eine andere Action für die zu erledigende Arbeit beim "drüber hovern" habe?

Hmmm, du weißt was Actions sind und wie man die benutzt und dann diese Frage? :gruebel:

So ein Control hat eine Standard-Aktion (Button->Click, MenüItem->Click) und diese Standard-Aktion kann man mit einer Action belegen. Alles weitere muss man "per Hand" dazubauen.

Glühwürmchen 28. Aug 2014 15:28

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1270176)
Hmmm, du weißt was Actions sind und wie man die benutzt und dann diese Frage? :gruebel:

:lol:
Alles autodidaktisch gelernt. Da bleibt zwischendurch was auf der Strecke...

Ich habe da jetzt ein bisschen rum experimentiert und herausgefunden, warum die Actions einfach nicht tun wollten.
Wenn ich die Actionlist in dem Formular habe, in dem ich die Actions benutzen will,
dann kann ich im OI dem gewünschten OnClick-Event eines Panels die ActionExecute-Methode direkt zuweisen.

Liegt die ActionList aber in einem anderen Formular, dann kann ich im OI dem gewünschten Panel nur die Action zuweisen, ohne sie gezielt an ein bestimmtes Event dranzunähen.
Das habe ich getan und dann ging es nicht.
Der Grund: Ich muss dann im Eventteil des OI die Action aufklappen und dem "OnExecute"-Event die ActionExecute-Methode noch mal extra zuweisen. Tue ich das, dann klappt es auch mit dem Nachbarn.

Frage beantwortet:
Nächste Frage:
Welchen Vorteil bietet mir in diesem Zusammenhang die ActionManager-Limousine gegenüber dem ActionList-Tretroller?

sx2008 29. Aug 2014 22:25

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Zitat:

Zitat von Glühwürmchen (Beitrag 1270126)
Nun lege ich aber meine Actions deshalb an, weil ich deren Code nicht an mehreren Stellen im Programm stehen haben will, sondern nur deren Aufruf.
(Ist halt so beim OO Programmieren) :)

Also tat ich mir die Arbeit an und "verschob" die TActionList in ein DataModule.

Actionlists sind der "Klebstoff" zwischen Buttons & Menuitems und Events.
Man kann zwar Actionlists auf ein Datenmodul legen aber das ist nicht der richtige Weg.
Eigentlich müsste man verhindern dass man Actionlists auf etwas anderes als Form und Frames legen kann...

Harry Stahl 30. Aug 2014 01:27

AW: In Form1 auf eine in DataModul definierte TAction zugreifen
 
Zitat:

Zitat von sx2008 (Beitrag 1270287)
Actionlists sind der "Klebstoff" zwischen Buttons & Menuitems und Events.
Man kann zwar Actionlists auf ein Datenmodul legen aber das ist nicht der richtige Weg.
Eigentlich müsste man verhindern dass man Actionlists auf etwas anderes als Form und Frames legen kann...

Das sehe ich anders. Wenn man die Funktionen im Datamodule hat, kann man z.B. für das Programm unterschiedliche Oberflächen verwenden. Du kannst dann die Actions einfach an eine andere Oberfläche binden. Darüber hinaus kann ich den Source-Code aus dem Actionmodule auch für mobile Anwendungen verwenden (die ja i.d.R. andere Formen als die Desktop-Anwendungen haben). Und Nachteile für diesen Weg sind mir keine bekannt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.
Seite 1 von 2  1 2      

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