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

Langage Delphi Discussion :

Comportement curieux d'un RadioGroup


Sujet :

Langage Delphi

  1. #21
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Citation Envoyé par Stevens.Georges Voir le message
    Pour ceux qui auront la gentillesse et la patience nécessaires, et en réponse à Adnotor, j'ai pu avancer un peu dans la localisation du bug. Voici ce que j'ai fait et que vous devriez pouvoir reproduire :
    ...
    C'est ce que j'ai fait après vous avoir demandé un mini projet... et bien sur je ne reproduis absolument pas ce que vous constatez...
    Bon, après on peut dire que j'ai testé avec D7 plutôt que D4, mais bon...
    Citation Envoyé par Stevens.Georges Voir le message
    P7/ Cliquer sur Quitter de RGMenu. Au point d'arrêt de la ligne 3 on constate que ItemIndex est revenu à 1. En tous cas c'est ce que je constate sur mon PC.
    Pas moi...
    Comme l'a très justement dit @AndNotOr, il est possible que la souris faiblisse sérieusement (avez vous testé avec une autre souris ? ou sur un autre PC ?)
    Mais pour constater le phénomène, il faudrait également que le pointeur de la souris ait bougé vers le haut et soit placé sur l'item 1.

    Complément :
    Bon j'ai trouvé ceci qui pourrait peut-être correspondre et expliquer le problème : Migration de Delphi vers Kylix : Bug du TRadioGroup
    Eric SIBERT dit à un moment :
    ...après le lancement du programme, vous appuyez sur Button2. Vous voyez le RadioGroup de l'autre fenêtre passer à "Two". Vous activez la seconde fenêtre en sélectionnant la barre de titre à la souris et vous constatez que le RadioGroup revient à "One". La même chose sous D3 et D5 (je n'ai pas de D2 ou D4 sous la main pour tester )...
    Il indique aussi avoir mis un correctif de la VCL sur Delphi Bug List. Le bug existerait aussi sous D6.

  2. #22
    Membre éprouvé
    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
    Points : 963
    Points
    963
    Par défaut
    Citation Envoyé par Stevens.Georges Voir le message
    MONTOR : excuse mon ignorance mais je ne vois pas ce que sont le mode asynchrone et PostMessage. Quelques explications seraient les bienvenues.
    normalement c'est comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Postmessage(Application.Mainform.Handle,WM_CLOSE,0,0);

  3. #23
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Testé sur D2009,

    Le fonctionnement est bon. le bug n'apparait jamais.

    que je ferme Form2 ou renvois un ModalResult=mrOk / mrAbort.

    avec n'importe quel code pour gérer l'itemIndex.

  4. #24
    Membre éprouvé
    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
    Points : 963
    Points
    963
    Par défaut
    sous D7 j'ai pu isolé le code incriminé
    cette ligne déclenche l'événement click ...
    essais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     RGMenu.Enabled := False;
     case RGMenu.ItemIndex of
      0:Action1;
      1:Form2.ShowModal;
      2:Application.Terminate
      end;
      RGMenu.ItemIndex:= -1;
     RGMenu.Enabled := True;

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Re : Comportement curieux d'un RadioGroup
    Un grand merci à tous pour vos contributions.

    Comme l'écrit Eric Sibert cité par Philippe, il semble bien qu'il y ait un bug dans Delphi.

    Comment y remédier ? Bien sûr je peux supprimer tout le code qui est dans RGMenuClick et le reporter dans l'évènement OnClick d'un bouton à coté, mais c'est moins élégant. Encore faudrait-il le tester pour être sûr que c'est parfaitement fiable.

    Georges.

  6. #26
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Et pourquoi ne pas simplement désactiver le onclick avant le changement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     RGMenu.Enabled := False;
     case RGMenu.ItemIndex of
      0:Action1;
      1:Form2.ShowModal;
      2:Application.Terminate
      end;
      RGMenu.Onclick := nil;
      RGMenu.ItemIndex:= -1;
      RGMenu.Onclick := LEvenementQuiVaBien;
     RGMenu.Enabled := True;

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Re : Comportement curieux d'un RadioGroup
    Rayek,

    C'est quoi LEvenementQuiVaBien ?

  8. #28
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    A priori RGMenuClick.

    Voir la partie interface:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      TForm1 = class(TForm)
        RGMenu: TRadioGroup;
        procedure RGMenuClick(Sender: TObject);  // <- ici
      private
        // ...
      public
        // ...
      end;

  9. #29
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Stevens.Georges Voir le message
    Rayek,

    C'est quoi LEvenementQuiVaBien ?
    Le RGMenuClick (Je n'avais pas lu toute la discussion, je n'avais pas vu le nom de ta procédure, donc j'ai mis LEvenementQuiVaBien à la place ).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     RGMenu.Enabled := False;
     case RGMenu.ItemIndex of
      0:Action1;
      1:Form2.ShowModal;
      2:Application.Terminate
      end;
      RGMenu.Onclick := nil;
      RGMenu.ItemIndex:= -1;
      RGMenu.Onclick := RGMenuClick;
     RGMenu.Enabled := True;

  10. #30
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Question bête mais ... pourquoi ne pas plutôt utiliser un TGroupBox avec 3 speedbutton/button ?

    ça serait déjà plus logique parce qu'un radio sous entend qu'un bouton de validation suis quelque part et non déclenche un événement aussi important que la sortie du programme

    Tel que, aussi, TComboBox, TListBox, TCheckBox, TCheckListBox etc.

    Bouton, Menu, short-cut = action
    le reste = choix/paramétrage/vue

    je voulais en parler avant, mais j'ai eu la flemme.


    Admettons que tu veuille mémoriser l'index du radiogroup, problème, quand tu rouvre le programme, que tu lis l'index dans un INI et que tu le remet PAF tu déclenche l'action.

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Re : Comportement curieux d'un RadioGroup
    Dr. WHO

    Ton raisonnement est exact : un TRadioGroup sous entend en effet en principe que le choix est validé ensuite par un TButton. Reste que le code proposé par Rayek semble marcher super bien.

    Merci à tous, je ne regrette pas d'avoir ouvert cette discussion fort intéressante.

    Je vais la laisser ouverte encore 24 h au cas où il y aurait d'autres suggestions ou commentaires puis je la cocherai comme résolue.

    Georges.

  12. #32
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Il me semble que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RGMenu.Enabled := False;
    RGMenu.ItemIndex := -1;
    RGMenu.Enabled := True;
    est suffissant non?

  13. #33
    Membre éprouvé
    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
    Points : 963
    Points
    963
    Par défaut
    Citation Envoyé par Eric Boisvert Voir le message
    Il me semble que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RGMenu.Enabled := False;
    RGMenu.ItemIndex := -1;
    RGMenu.Enabled := True;
    est suffissant non?
    c'était ma première conclusion et après j'ai préféré désactiver les événements de la souris dans tout la fonction ...

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Re : Comportement curieux d'un RadioGroup
    Merci Montor et Eric.

    Après essai les deux codes semblent fonctionner très correctement.

    Georges.

  15. #35
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par Stevens.Georges Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.RGMenuClick(Sender : TObject);
    begin
      case RGMenu.ItemIndex of
      0:Action1;
      1:Form2.ShowModal;
      2:Application.Terminate
      end;
      RGMenu.ItemIndex:= -1;
    end;
    tu change l’état de Rgroup dans son événement click, c'est comme coupé un branche d’arabe où tu es assis,

    Citation Envoyé par Montor Voir le message
    essaies de travailler en mode asynchrone Postmessage par exemple pour fermer la fiche principale
    mais pas pour férmer, pour changer l'état de Rgroup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure MonMessage(var msg:Tmessage);message wm_user;
    begin
        RGMenu.ItemIndex:= -1;
    end;
    procedure TForm1.RGMenuClick(Sender : TObject);
    begin
      case RGMenu.ItemIndex of
      0:Action1;
      1:Form2.ShowModal;
      2:Application.Terminate
      end;
      postmessage(handle,wm_user,0,0);
    end;

  16. #36
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut Re : Comportement curieux d'un RadioGroup
    Merci, Edam, pour ta contribution.

    Le code proposé par Montor (réponse 24) semble fonctionner parfaitement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [TOMCAT5.5] Comportement curieux de la mémoire
    Par tnodev dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 02/11/2007, 11h26
  2. [JScrollBar] comportement curieux
    Par rems033 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/10/2007, 10h06
  3. [Cookies] Mes cookies ont un comportement curieux
    Par Jinx_ dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 16h11
  4. [Rewrite .htaccess] Comportement curieux aussi
    Par Bensor dans le forum Apache
    Réponses: 2
    Dernier message: 23/12/2006, 13h22
  5. comportement curieux font-bold sous ffx ?
    Par SpaceFrog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 22/06/2006, 11h51

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