IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Déterminer si une action est appelée depuis un popupmenu ou un mainmenu ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chambord
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 148
    Par défaut Déterminer si une action est appelée depuis un popupmenu ou un mainmenu ?
    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.

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 705
    Par défaut
    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)

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 125
    Par défaut
    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

  4. #4
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    1 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chambord
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 148
    Par défaut
    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.

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 535
    Par défaut
    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.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 125
    Par défaut
    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 :

    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;
    Evidemment, si il n'y a aucun code commun entre l'un ou l'autre, autant faire deux gestionnaires différents.
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2016, 19h38
  2. Lancement d'une action java EE depuis JavaScript
    Par jmdel5327 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 01/01/2016, 17h35
  3. Voir à quel endroit une classe est appelé
    Par Jéjé34 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 18/03/2015, 21h54
  4. Réponses: 3
    Dernier message: 06/02/2012, 18h16
  5. Réponses: 3
    Dernier message: 11/07/2006, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo