Po uruchomieniu akcji, "nadawca" jest zawsze samym działaniem. Zwykle jest to najbardziej przydatne, ale czy w jakiś sposób można się dowiedzieć, kto uruchomił zdarzenie onexecute akcji?Jak mogę sprawdzić, kto wywołał akcję w Delphi?
Przykład
Powiedzmy masz formularz z następującymi:
- 2 przyciski, zwany
Button1
iButton2
- 1 TAction nazywa
actDoStuff
tego samego działania jest przypisany do obu przycisków. Czy mogę pokazać, który przycisk kliknąłem?
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.
Jedynym rozwiązaniem widzę w tej chwili jest, aby nie używać właściwości działania przycisków, ale o eventhandler dla każdego przycisku i wywołanie stamtąd actDoStuffExecute(), ale tego rodzaju całkowicie przeciwstawia się celowi używania akcji.
Nie chcę mieć dedykowanego działania dla każdej osobnej kontroli. Powyższy przykład to uproszczona wersja problemu, z którym mam do czynienia. Mam menu ze zmienną liczbą pozycji menu (nazw plików), a każdy element menu zasadniczo musi robić to samo, z wyjątkiem ładowania innego pliku. Posiadanie akcji dla każdego elementu menu byłoby trochę głupie.
Zobacz parametr "Nadawca: TObject"? ... To jest wstępnie wypełnione dla Ciebie ... Spróbuj rzucić okiem na Nadawcę w swojej funkcji. – Fosco
Tak, ale w powyższym przykładzie 'actDoStuff' będzie nadawcą. Chcę wiedzieć, czy naciśnięto przycisk 1 lub przycisk 2. –