Bonjour,
j’ai des actions qui peuvent être appelé depuis le mainmenu ou d’un popupmenu.
Existe-il un moyen de connaître si l’appelant est l’un ou l’autre dans le .execute de l’action ?
Merci d’avance de vos lumières sur le sujet.
Discussion :
Bonjour,
j’ai des actions qui peuvent être appelé depuis le mainmenu ou d’un popupmenu.
Existe-il un moyen de connaître si l’appelant est l’un ou l’autre dans le .execute de l’action ?
Merci d’avance de vos lumières sur le sujet.
Pour le TPopupMenu, il n'y a pas PopupComponent ?
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!
C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)
le Sender contient le TAction et ce dernier ne semble pas avoir de lien sur le Control déclencheur
Autant faire deux gestionnaire qui invoque un code commun
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Merci, de vos retours.
je vais me pencher sur PopupComponent
En attendant, j’ai opté pour avancer sur une solution similaire à celle proposé par ShaiLeTroll.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 unit Unit9; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, System.Actions, Vcl.ActnList, Vcl.StdActns, Vcl.ExtActns; type TForm9 = class(TForm) PopupMenu1: TPopupMenu; MainMenu1: TMainMenu; ActionList1: TActionList; DialogOpenPicture1: TOpenPicture; Ouvriruneimage1: TMenuItem; Ouvriruneimage2: TMenuItem; procedure ActionList1Execute(Action: TBasicAction; var Handled: Boolean); private { Déclarations privées } public { Déclarations publiques } end; var Form9: TForm9; implementation {$R *.dfm} procedure TForm9.ActionList1Execute(Action: TBasicAction; var Handled: Boolean); begin ShowMessage(TMenuITem(Action.ActionComponent).GetParentMenu.ClassName); end; end.
Merci Papy214 !
L'action n'a pas de lien avec un Control mais avec un Component ! bien vu !
J'ai retrouvé ça l'utilisation de ActionComponent dans un seul code en 25 ans mais pour retrouver un TControl et comme selon la source l'action ne faisait rien en commun, cela n'avait aucun intérêt de regrouper cela sur la même action, c'était un code d'un ancien collègue qui utilisait un Execute event handler unique pour toutes ses actions qui contenaient genre 100 if else if pour lancer le code selon l'action, je n'ai jamais compris cette façon de faire.
Pour rebondir sur ton code, ça donnerait :
Evidemment, si il n'y a aucun code commun entre l'un ou l'autre, autant faire deux gestionnaires différents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm9.ActionList1Execute(Action: TBasicAction; var Handled: Boolean); begin if TMenuITem(Action.ActionComponent).GetParentMenu() is TPopupMenu then begin ... end else if TMenuITem(Action.ActionComponent).GetParentMenu() is TMainMenu then begin ... end end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Partager