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.