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

Composants VCL Delphi Discussion :

[TPopupMenu] sous-menu et évènement OnClick


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut [TPopupMenu] sous-menu et évènement OnClick
    Bonjour

    Est-il possible que l'évènement OnClick d'un PopupMenu se déclenche automatiquement sans aucun "clic" sur un item ?

    Hé bien oui !

    Démo :

    Réalisez un simple PopupMenu de seulement deux Items et un sous-menu :

    Un
    Deux > Sous-menu 2


    Placez en évènement OnClick de l'item "Deux" ce code super sophistiqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShowMessage('OnClick sans aucun clic sur Item !!!');
    Voilà... lancez la bête et passez votre curseur sur...

    Avez-vous cliqué sur l'item "Deux" ?

    Non ?

    Avez-vous eu droit au ShowMessage ?

    Oui !!!

    Si l'on peut m'éclairer comment éviter cela, merci je dormirais mieux.

    Pardonnez cette question d'extrême débutant

  2. #2
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Effectivement, j'ai deja rencontré ce probleme
    Pour m'en defaire, dans le OnClick, j'ai fait un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if TMenuItem(Sender).Items.Count > 0 then
      Exit; //si on a des sous-menus, on ne traite pas le OnClick
    Seul bémol, il ne faut pas avoir besoin d'intercepter le "click reel" sur ce menu

  3. #3
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut


    guillemouze, tu me rassures du sens que tu es loin d'être un débutant, je commençais à me poser des questions si ça n'arrivait qu'à moi.

    Mais remarque à ce moment un simple exit en OnClik suffit

    Manque de bol j'ai à faire avec un popupmenu gérant des CheckBox

    Je suis étonné d'avoir lu nulle part de ce soucis assez important ; à savoir que la "sortie" d'un sous-menu entraîne le déclenchement de l'évènement OnClick de l'item parent.

    Merci d'avoir pris la peine de me répondre, et d'ainsi montrer que ce n'est pas seulement sur ma bécane que cela se produit.

    D7 sous Vista.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 409
    Par défaut
    tu peux essayer de faire

    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
    type
     
      TMenuItem = class(Menus.TMenuItem)
      private
        procedure Click; override;
      end;
     
      TForm1 = class(TForm)
    ...
    procedure TMenuItem.Click;
    var i:integer;
    begin
     if Count>0 then
     begin
      if GetAsyncKeyState(VK_LBUTTON)<0 then
       inherited;
     end else inherited;
    end;


    pour que le click soit pris en compte il faut qu'il ait lieu avant l'apparition du sous-menu (faut cliquer vite )

  5. #5
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    En fait l'explication est simple : pour un élément de menu qui en contient d'autres, l'action de click est d'ouvrir le sous-menu. Il se trouve que dans Windows, c'est automatique... au survol.

    J'imagine que si quelqu'un trouve une option de Windows pour n'ouvrir les sous-menu qu'au click explicite, ben tu n'auras pas de OnClick au survol.

    De toutes façons tu ne devrais pas avoir besoin de gérer OnClick sur un menu qui contient des sous-menus : c'est anti-ergonomique, parce que personne ne fait ça. Donc ça dérouterait tes utilisateurs.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Merci de vos réponses

    @ Christophe :
    Oupsss en effet faut pas prendre le temps de gober une mouche en cliquant l'item

    Sachant qu'en plus ce programme peut être utilisé sous JAWS, alors...

    Sébastien disait :
    [...] De toutes façons tu ne devrais pas avoir besoin de gérer OnClick sur un menu qui contient des sous-menus : c'est anti-ergonomique, parce que personne ne fait ça. Donc ça dérouterait tes utilisateurs. [...]
    C'est un PopupMenu assez conséquent gérant des choix => CheckBox

    L'un de ces items indique en face (sous-menu) une option annexe que je ne peux mettre ailleurs ; et c'est là le souci (car rapport direct avec l'item).

    Aucun utilisateur ne s'est encore plaint de cela (des milliers), pourtant si un truc cloque quelque part, je le sais tout de suite au courriel.

    Tu disais aussi :
    [...] En fait l'explication est simple : pour un élément de menu qui en contient d'autres, l'action de click est d'ouvrir le sous-menu. [...]
    Oui mais l'ennui c'est qu'aucun clic ne se produit et pourtant l'évènement à lieu !

    Je persiste et signe à croire que ce n'est pas normal que cet évènement se produise ainsi. Un OnClick doit être commandé par un click et non un OnMouse. Même commander via un OnClick virtuel la sortie d'un item de sous-menu.

    Je suis têtu je sais, et c'est l'une des qualités d'un programmeur

    @+

  7. #7
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    regarde du cote WM_COMMAND

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

Discussions similaires

  1. Problème de onClick dans un sous menu Android
    Par yoanndu15 dans le forum Composants graphiques
    Réponses: 15
    Dernier message: 14/12/2014, 15h56
  2. Créer un sous-menu dynamiquement
    Par PurL dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/09/2004, 10h31
  3. ContextMenu de l'explorer: Problème de sous menu
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 26/02/2004, 08h06
  4. Réponses: 9
    Dernier message: 14/10/2003, 15h35
  5. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52

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