AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Grundlegendes Verständnis - Actions und deren Registrierung
Thema durchsuchen
Ansicht
Themen-Optionen

Grundlegendes Verständnis - Actions und deren Registrierung

Ein Thema von Hausmarke · begonnen am 28. Jun 2013 · letzter Beitrag vom 1. Jul 2013
Antwort Antwort
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 11:34
Mein Ziel ist es, eigene Actions in der ActionList zu registrieren.
Mir ist bekannt das ich diese zur Laufzeit mit der property "ActionList" meiner gewünschten ActionList hinzufügen kann.

Dies gehört zu einer Aufgabenstellung, welche als Ziel die Registrierung der Action in einer ActionList beinhaltet.


Meine zuletzt gestellten fragen beziehen sich dabei auf meine Beobachtung.
Die Registrierung der Action schlug fehl. Anschließend stellte sich mir die Frage in welche ActionList die Registrierung erfolgt bzw. woher der Compiler wissen soll welche ActionList gemeint ist.
Das sind für wissende möglicherweise nicht nachvollziehbare fragen. Ich würde mich dennoch freuen wenn jemand den Nerv hat mir dies zu erklären.

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.758 Beiträge
 
Delphi 12 Athens
 
#2

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 12:39
Mein Ziel ist es, eigene Actions in der ActionList zu registrieren.
Mir ist bekannt das ich diese zur Laufzeit mit der property "ActionList" meiner gewünschten ActionList hinzufügen kann.

Dies gehört zu einer Aufgabenstellung, welche als Ziel die Registrierung der Action in einer ActionList beinhaltet.


Meine zuletzt gestellten fragen beziehen sich dabei auf meine Beobachtung.
Die Registrierung der Action schlug fehl. Anschließend stellte sich mir die Frage in welche ActionList die Registrierung erfolgt bzw. woher der Compiler wissen soll welche ActionList gemeint ist.
Das sind für wissende möglicherweise nicht nachvollziehbare fragen. Ich würde mich dennoch freuen wenn jemand den Nerv hat mir dies zu erklären.

Vielen Dank
Tut mir Leid das sagen zu müssen, aber du hast es offenbar doch noch nicht ganz verstanden. Ich habe auch langsam den Eindruck, daß das sicher gut gemeinte Beispiel von sx2008 dich eher in die falsche Richtung gelockt hat. Dort wird nämlich keine Action in einer ActionList registriert, sondern vielmehr eine neuartige Action in der IDE registriert (wobei die Funktionalität erstmal egal ist).

Verabschieden wir uns doch bitte mal von der Formulierung eine Action in einer ActionList registrieren, da der Begriff eine Action registrieren schon für einen anderen Vorgang reserviert ist. Eine ActionList enthält getreu ihres Namens eine Liste von Actions. Man kann nun Actions zu dieser ActionList hinzufügen oder daraus entfernen.

Ich kann anhand deiner Beispiele leider auch nicht nachvollziehen, warum du überhaupt eigene Action-Klassen schreibst anstatt einfach eine normale TAction zu verwenden. Zwar ist der gängig Weg eine Action zu erzeugen der, diese in der IDE über den ActionList-Editor anzulegen, aber es geht natürlich auch zur Laufzeit über TAction.Create und anschließendes Setzen des ActionList-Properties.

Hier mal etwas Code:
Delphi-Quellcode:
var
  act: TAction;
begin
  act := TAction.Create(Self); // oder ein anderer geeigneter Owner
  act.Caption := 'Beispiel';
  act.Hint := 'Dies ist ein Beispiel';
  act.ImageIndex := 42; // Diese drei Properties lassen sich auch im OnUpdate dynamisch ändern
  act.OnExecute := MyActionExecute; // hier den passenden Exedcute-Event-Handler zuweisen
  act.OnUpdate := MyActionUpdate; // und den Update-Event-Handler
  act.ActionList := MyActionList; // und hier die passende ActionList
end;
Danach enthält MyActionList die so erzeugte Action, was ja dein eigentliches Ziel sein sollte, wenn ich dich nicht völlig falsch verstanden habe.

Das obige Beispiel kann natürlich auch für andere Action-Klassen als TAction angewandt werden, wobei dort eventuell die Event-Handler nicht gebraucht werden und womöglich andere Properties gesetzt werden müssen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 13:16
ja ich denke die Aussage "eine Action in einer ActionList zu registrieren" hat mich auf eine falsche Fährte gelockt. Was ich mittlerweile verstanden habe.

Die Action einer Actionlist zuzuordnen ist wie erwähnt kein Problem, auch das erzeugen der Action zur Laufzeit ist nicht das Problem.
Aber wie ich erkenne, ist dies wohl auch nicht das Ziel...wäre ja auch zu einfach gewesen....
Mir wurde gesagt ich soll die Actions Registrieren, da ich bis dahin keine Ahnung von Actions hatte, ging ich davon aus, das dies die Verknüpfung mit einer ActionList bedeutet. Okay, das ist falsch.

Wie ich deiner Antwort entnehme, an dieser Stelle vielen dank für deine Geduld, registriert man eigene Actionen in der IDE.
Wobei ich den Vorteil bzw. den Zweck dahinter noch nicht verstehe.
Mein Beispiel bezog sich nur auf die reine Handhabung, und hatte keine tiefere Funktionalität.

Wenn ich das richtig verstanden habe:
Das Beispiel von sx2008 implementiert die Aktion "Print Windows", was quasi den Drucken Dialog aufruft. Das ganze ist auch via shortcut F3 auszuführen.
Wäre diese Action nicht auch ohne Registrierung lauffähig und wie folgt umsetzbar:

Delphi-Quellcode:
var
  act: TAction;
begin
  act := TAction.Create(Self);
  act.Caption := 'Print Window';
  act.Hint := 'Drucken';
  act.ImageIndex := 42;
  act.OnExecute := MyWindowPrintExecute; // GetForm(Target).Print; - in OnExecute implementieren
  act.OnUpdate := MyWindowPrintUpdate; //
  act.ActionList := MyActionList; // und hier die passende ActionList
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.758 Beiträge
 
Delphi 12 Athens
 
#4

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 13:40
Wie ich deiner Antwort entnehme, an dieser Stelle vielen dank für deine Geduld, registriert man eigene Actionen in der IDE.
Wobei ich den Vorteil bzw. den Zweck dahinter noch nicht verstehe.
Der Vorteil in der IDE registrierter Actions ist, daß man sie in der IDE im ActionList-Editor bearbeiten kann.

Wenn ich das richtig verstanden habe:
Das Beispiel von sx2008 implementiert die Aktion "Print Windows", was quasi den Drucken Dialog aufruft. Das ganze ist auch via shortcut F3 auszuführen.
Wäre diese Action nicht auch ohne Registrierung lauffähig und wie folgt umsetzbar:

Delphi-Quellcode:
var
  act: TAction;
begin
  act := TAction.Create(Self);
  act.Caption := 'Print Window';
  act.Hint := 'Drucken';
  act.ImageIndex := 42;
  act.OnExecute := MyWindowPrintExecute; // GetForm(Target).Print; - in OnExecute implementieren
  act.OnUpdate := MyWindowPrintUpdate; //
  act.ActionList := MyActionList; // und hier die passende ActionList
end;
Prinzipiell ist das richtig, allerdings gibt es im OnExecute kein Target. Ersatzweise kannst du aber auch (Sender as TAction).ActionComponent verwenden. Allerdings ist GetForm eine Methode von TWindowAction und setzt voraus, daß diese nur auf Forms angewandt werden. Wenn du die obige Action z.B. einem Button oder Menüeintrag zuweist, musst du einen anderen Weg finden an das aktuelle Form zu kommen. Im einfachsten Fall geht das mit Screen.ActiveForm.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz