AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TAction - Aufruf via ShortCut?

TAction - Aufruf via ShortCut?

Ein Thema von sjansen · begonnen am 2. Nov 2021 · letzter Beitrag vom 3. Nov 2021
Antwort Antwort
sjansen

Registriert seit: 16. Okt 2019
Ort: Siegen
9 Beiträge
 
Delphi 10.4 Sydney
 
#1

TAction - Aufruf via ShortCut?

  Alt 2. Nov 2021, 16:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TAction - Aufruf via ShortCut?

  Alt 2. Nov 2021, 22:10
Beim Aufruf über den ShortCut ist ActionComponent = nil . Beim Aufruf z.B. über ein TMenuItem oder einen TButton steht dort die auslösende TComponent drin.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
sjansen

Registriert seit: 16. Okt 2019
Ort: Siegen
9 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TAction - Aufruf via ShortCut?

  Alt 3. Nov 2021, 09:07
Beim Aufruf über den ShortCut ist 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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TAction - Aufruf via ShortCut?

  Alt 3. Nov 2021, 09:43
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++).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:08 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