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
Seite 1 von 2  1 2      
Hausmarke

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

Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 28. Jun 2013, 13:31
Hallo Leute,

ich versuche mich gerade in actions und deren Registrierung in ActionsLists zur Laufzeit einzuarbeiten.

Allerdings komme ich nur schwer voran.
Was Actions sind habe ich soweit verstanden und auch für was ActionLists gut sind.

und dann hörts auf
Wie kann ich die actions in der actionlist registrieren?
Bei "RegisterActions" komm ich nicht mit den AktionKlasseNamen zu recht.
Wie ich es verstehe gibt man dort die Namen der Actions an, die man jedoch wo und wie deklariert?

Gibt es hierfür ein gutes Tutorial was Ihr empfehlen könnt, oder kann mir es jemand kurz und prägnant erläutern?

ich danke schon mal im voraus
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 28. Jun 2013, 13:49
RegisterActions ist nur für neue, von dir geschriebene Action-Klassen notwendig. Normalerweise brauchst du das nicht.

Eigentlich solltest du deine Actions in der IDE zur Designzeit anlegen. Dazu legst du eine ActionList auf das Formular oder Datenmodul und machst einen Doppelclick drauf. Dann kannst du deine Actions einfach anlegen und sie sind auch gleich in der passenden ActionList.

Solltest du auf irgendeine Art erst zur Laufzeit eine Action erzeugt haben, dann weise deren ActionList-Property einfach die gewünschte ActionList zu.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 28. Jun 2013, 20:37
Im Anhang ein Beispiel für eine Action-Klasse und wie diese mit RegisterActions() verankert wird.
Wenn du die Unit in ein Designtime-Package aufnimmst *), dann steht die neue Action für jede Anwendung zur Verfügung.

*) Eigentlich sollte der Code der Klasse in ein Runtime-Package und nur der RegisterActions() Aufruf in eine Designtime-Package.
Angehängte Dateien
Dateityp: pas AjsStdActions.pas (1,3 KB, 43x aufgerufen)
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 28. Jun 2013, 20:57
ich versuche mich gerade in actions und deren Registrierung in ActionsLists zur Laufzeit einzuarbeiten.
Wie schon gesagt: Actions werden nicht in ActionLists registriert (im Sinne von RegisterActions).

Also nochmal die Frage: Willst du einfach nur zur Laufzeit eine Action erzeugen und in eine ActionList hinzufügen?
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
 
#5

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 07:34
@sx2008: besten Dank für das Beispiel so in etwa hatte ich es mir schon gedacht, aber leider kein konkretes Beispiel gefunden.

@U.Raabe:
mein Ziel ist es die Actions zur Laufzeit und damit dynamisch zur Actionlist hinzuzufügen.
Ich dachte dies nennt man registrieren.
Wie darf man das RegisterAction sonst verstehen? Wo werden die Actions Registriert wenn nicht in der ActionList?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 08:08
@U.Raabe:
mein Ziel ist es die Actions zur Laufzeit und damit dynamisch zur Actionlist hinzuzufügen.
Ich dachte dies nennt man registrieren.
Wie darf man das RegisterAction sonst verstehen? Wo werden die Actions Registriert wenn nicht in der ActionList?
Man unterscheidet grundsätzlich zwischen einer TAction, bei der das OnUpdate und OnExecute als Event ausgeführt sind, die du in deinem Code wie bei einem OnClick-Event behandelts, und speziellen Actions, von denen man einige in StdActns.pas finden kann (z.B. TFileExit) und die für bestimmte Fälle ein vordefiniertes Verhalten implementieren. Alle diese Actions können zu ActionLists hinzugefügt werden. Das geschieht einfach durch Zuweisung der ActionList auf das entsprechende Property der Action.

Damit diese Actions aber im ActionListEditor der IDE auftauchen (das was aufgeht, wenn man in der IDE einen Doppelcklick auf die ActionList macht), müssen sie in der IDE mit RegisterActions registriert werden. RegisterActions brauchst du also nur, wenn du in einem DesignTime-Package für die IDE eine neue ActionKlasse registrieren willst. Zur Runtime brauchst du diese Funktion nicht.

Die Actions aus StdActions werden von den Delphi-Packages bereits registriert. Wenn du mal in der IDE auf eine ActionList doppelclickst und dann den DropDown-Pfeil beim "Neue Action"-Button anklickst, dann siehst du einen Menüpunkt "Neue Standardaktion". Dahinter verbirgt sich die Liste aller registrierten Standard-Aktionen. Je nach installierten Fremd-Komponenten sind das auch mal durchaus mehr als die Delphi-Standard-Actions.

Also: RegisterActions dient zum Registrieren neuer Aktions-Klassen in der IDE und ist nur zur Designzeit relevant. Das Hinzufügen einer TAction-Instanz zu einer ActionList geschieht durch Zuweisung des ActionList.Properties der TAction und wird zur Runtime durchgeführt, wenn die ActionList nicht (oder nur teilweise) schon im Designer gefüllt wurde.
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
 
#7

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 10:10
@ U. Raabe: ich denke ich habe es soweit verstanden.
Man registriert die Actions und findet diese dann zur Entwurfszeit im Dialog der ActionList wieder.
Dazu ein paar fragen: was ist wenn die ActionList auf einem anderen Formular bzw. in einer anderen Unit verankert ist?
Wie teile ich dies dem RegisterActions Aufruf mit?

Ich habe aktuell folgendes:
Delphi-Quellcode:
type
  TMyBaseAction = class (TCustomAction)
    private
      FCaption: string;
      procedure SetCaption(const Value: string);

    public
      property Caption: string read FCaption write SetCaption;
      constructor Create(AOwner: TComponent); virtual;
      procedure ExecuteTarget(Target: TObject); override;
      procedure UpdateTarget(Target: TObject); override;

  end;

  TBrowseAction = class(TMyBaseAction)
    private

    public
      constructor Create(AOwner: TComponent); override;
      procedure ExecuteTarget(Target: TObject); override;
      procedure UpdateTarget(Target: TObject); override;

  end;


implementation

uses MainFrm;


{ TMyBaseAction }

constructor TMyBaseAction.Create(AOwner: TComponent);
begin
  inherited;
  Caption := 'New Action';
end;


procedure TMyBaseAction.ExecuteTarget(Target: TObject);
begin
  inherited;

end;

procedure TMyBaseAction.SetCaption(const Value: string);
begin
  FCaption := Value;
end;


procedure TMyBaseAction.UpdateTarget(Target: TObject);
begin
  inherited;

end;


{ TBrowseAction }

constructor TBrowseAction.Create(AOwner: TComponent);
begin
  inherited;
end;

procedure TBrowseAction.ExecuteTarget(Target: TObject);
begin
  inherited;
  showmessage('Execute');
end;

procedure TBrowseAction.UpdateTarget(Target: TObject);
begin
  inherited;
  showmessage('update');
end;

initialization
  RegisterActions('Datei', [TMyBaseAction], nil);

end.
,

Beim Ausführen schmeißt es mir die Exception 'Ungültige Aktionsregistrierung' entgegen.

Was mache ich falsch?

Geändert von Hausmarke ( 1. Jul 2013 um 10:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Grundlegendes Verständnis - Actions und deren Registrierung

  Alt 1. Jul 2013, 11:07
@ U. Raabe: ich denke ich habe es soweit verstanden.
Man registriert die Actions und findet diese dann zur Entwurfszeit im Dialog der ActionList wieder.
Dazu ein paar fragen: was ist wenn die ActionList auf einem anderen Formular bzw. in einer anderen Unit verankert ist?
Wie teile ich dies dem RegisterActions Aufruf mit?
Deine Frage macht für mich keinen Sinn. Vielleicht beschreibst du einfach mal was du genau erreichen willst.
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
 
#9

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
10.996 Beiträge
 
Delphi 12 Athens
 
#10

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
Antwort Antwort
Seite 1 von 2  1 2      


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 17:35 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