Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TAction - Aufruf via ShortCut? (https://www.delphipraxis.net/209153-taction-aufruf-via-shortcut.html)

sjansen 2. Nov 2021 15:57

TAction - Aufruf via ShortCut?
 
Hi,
ich habe eine Action, bei welcher ich je nach Aufruf-Herkunft andere Aspekte in der Auswertung betrachte.
Gibt es irgend eine Möglichkeit herauszufinden, ob die Action via Click oder HotKey kommt?

lg

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Actions, Vcl.ActnList, Vcl.Menus;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    ActionList1: TActionList;
    actTest: TAction;
    PopupMenu1: TPopupMenu;
    MenuItem1: TMenuItem;
    procedure actTestExecute(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.actTestExecute(Sender: TObject);
begin
  // gibt es die Möglichkeit, herauszufinden ob der Execute via ShortCut oder MenuItem erfolgt?
  // actTest.ActionComponent ist in beiden Fällen gesetzt
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ActionList1 := TActionList.Create(Self);
  ActionList1.Name := 'ActionList1';

  actTest := TAction.Create(Self);
  actTest.ShortCut := ShortCut(Ord('T'), [ssCtrl]); {Strg + T}
  actTest.ActionList := ActionList1;
  actTest.OnExecute := actTestExecute;
  actTest.Caption := 'Test';
  actTest.Name := 'actTest';

  PopupMenu1 := TPopupMenu.Create(Self);
  PopupMenu1.Name := 'PopupMenu1';

  MenuItem1 := TMenuItem.Create(Self);
  MenuItem1.Name := 'MenuItem1';
  MenuItem1.Action := actTest;
  PopupMenu1.Items.Add(MenuItem1);

  Self.PopupMenu := PopupMenu1;
end;

end.

Uwe Raabe 2. Nov 2021 21:10

AW: TAction - Aufruf via ShortCut?
 
Beim Aufruf über den ShortCut ist
Delphi-Quellcode:
ActionComponent = nil
. Beim Aufruf z.B. über ein TMenuItem oder einen TButton steht dort die auslösende TComponent drin.

sjansen 3. Nov 2021 08:07

AW: TAction - Aufruf via ShortCut?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1496990)
Beim Aufruf über den ShortCut ist
Delphi-Quellcode:
ActionComponent = nil
. Beim Aufruf z.B. über ein TMenuItem oder einen TButton steht dort die auslösende TComponent drin.

Leider nein. Bei dem Beispiel oben ist ActionComponent auch bei ShortCut gesetzt. Nutze 10.4.2

Uwe Raabe 3. Nov 2021 08:43

AW: TAction - Aufruf via ShortCut?
 
Für ein MenuItem stimmt das allerdings. Dort wird schon auf Menüebene nach dem Item mit diesem ShortCut gesucht und ein Click ausgelöst. Damit ist das nicht mehr von einem Mausklick zu unterscheiden.

Es ist aber wohl auch so, dass ActionComponent nach dem Execute nicht wieder auf nil gesetzt wird, obwohl das in der Dokumentation so geschrieben steht: System.Classes.TBasicAction.ActionComponent
Zitat:

When the user clicks a client control, that client sets ActionComponent before calling the action's Execute method. After the action executes, the action resets ActionComponent to nil (Delphi) or NULL (C++).


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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