Wenn eine Aktion sogar ausgelöst wird, ist der "Absender" immer die Aktion selbst. Normalerweise ist das am nützlichsten, aber ist es irgendwie möglich herauszufinden, wer das einmalige Ereignis der Aktion ausgelöst hat?Wie kann ich sehen, wer in Delphi eine Aktion ausgelöst hat?
Beispiel
Angenommen, Sie haben ein Formular mit den folgenden:
- 2 Knöpfe, genannt
Button1
undButton2
- 1 TAction
actDoStuff
genannt
Die gleiche Aktion ist beiden Tasten zugewiesen. Ist es möglich zu zeigen, auf welchen Knopf ich geklickt habe?
Example.dfm
object Form1: TForm1
object Button1: TButton
Action = actDoStuff
end
object Button2: TButton
Action = actDoStuff
Left = 100
end
object actDoStuff: TAction
Caption = 'Do Stuff'
OnExecute = actDoStuffExecute
end
end
Example.pas
unit Example;
interface
uses Windows, Classes, Forms, Dialogs, Controls, ActnList, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
actDoStuff: TAction;
procedure actDoStuffExecute(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.actDoStuffExecute(Sender: TObject);
begin
ShowMessage('Button X was clicked');
end;
end.
Die einzige Lösung, die ich im Moment sehe, ist nicht die Aktion Eigenschaft von Tasten zu bedienen, aber einen Eventhandler mit für jede Schaltfläche, und Aufruf von actDoStuffExecute() von dort, aber diese Art von trotzt den ganzen Zweck der Verwendung von Aktionen an erster Stelle.
Ich möchte auch keine dedizierte Aktion für jede einzelne Steuerung haben. Das obige Beispiel ist eine vereinfachte Version des Problems, dem ich gegenüberstehe. Ich habe ein Menü mit einer variablen Anzahl von Menüpunkten (Dateinamen), und jedes Menüelement muss grundsätzlich dasselbe tun, außer dass eine andere Datei geladen wird. Aktionen für jeden Menüpunkt zu haben wäre ein bisschen albern.
Sehen Sie, dass "Sender: TObject" -Parameter? ... Das ist für Sie bereits ausgefüllt ... Werfen Sie einen Blick auf Sender in Ihrer Funktion. – Fosco
Ja, aber im obigen Beispiel wäre'ActDoStuff' der Absender. Ich möchte wissen, ob Button1 oder Button2 gedrückt wurde. –