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 :

Problème de valeur de retour de MessageDlg


Sujet :

Composants VCL Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Problème de valeur de retour de MessageDlg
    Bonsoir à tous,

    en manipulant la fonction MessageDlg(...), je suis tombé sur un problème assez étrange: la valeur de retour de cette fonction ne correspond pas avec ce qui est indiqué dans la documentation !

    J'ai réalisé une petite fonction de teste, la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      function Test():Boolean;
        var
          i:Integer;
        begin
          i:=MessageDlg('Test','Appuyez sur qqchose:', mtInformation, mbYesNoCancel, 0);
     
          case i of
            mrYes:    ShowMessage('Vous avez cliqué sur Yes !');
            mrNo:     ShowMessage('Vous avez cliqué sur No !');
            mrCancel: ShowMessage('Vous avez cliqué sur Cancel !');
            else      ShowMessage('Sur quoi t''as cliqué ??! Valeur reçue='+IntToStr(i));
          end;
      end;
    Je ne sais pas chez vous, mais chez moi, le seul bouton qui est reconnu est le "Cancel".... Les deux autres renvoient des valeurs inconnue (Yes: val=3 et No: val=4), et quand on ferme la boite de dialogue par la croix en haut à droite, je reçois la valeur 0.

    Je pourrais bien tester directement ces valeurs, mais ce serait pas très beau... Pourquoi diable les constantes ne correspondent-elles pas ??!
    (mrYes vaut 6, mrNo je sais pas)

    Merci d'avance !

    PS:
    Citation Envoyé par Delphi doc
    ...
    MessageDlg renvoie la valeur du bouton sélectionné par l'utilisateur. Le tableau suivant liste les valeurs TMsgDlgBtn pour chaque type de bouton pouvant apparaître dans la boîte de message, et la valeur correspondante qui est renvoyée si l'utilisateur sélectionne ce bouton :

    Valeur TMsgDlgBtn Valeur renvoyée correspondante

    mbOk mrOk
    mbCancel mrCancel
    mbYes mrYes
    mbNo mrNo
    mbAbort mrAbort
    mbRetry mrRetry
    mbIgnore mrIgnore
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut,

    essai

    i:=MessageDlg('Test',mtInformation, mbYesNoCancel, 0);

  3. #3
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Salut !

    Chez moi, ces deux codes fonctionnent :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:Integer;
    begin
      i:=MessageDlg('Test',mtInformation, mbYesNoCancel, 0);
      case i of
        mrYes:    ShowMessage('Vous avez cliqué sur Yes !');
        mrNo:     ShowMessage('Vous avez cliqué sur No !');
        mrCancel: ShowMessage('Vous avez cliqué sur Cancel !');
        else      ShowMessage('Sur quoi t''as cliqué ??! Valeur reçue='+IntToStr(i));
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i:Integer;
    begin
      i := MessageBox(0, 'Appuyez sur qqchose:', 'test', MB_ICONWARNING or MB_YESNOCANCEL);
      case i of
        mrYes:    ShowMessage('Vous avez cliqué sur Yes !');
        mrNo:     ShowMessage('Vous avez cliqué sur No !');
        mrCancel: ShowMessage('Vous avez cliqué sur Cancel !');
        else      ShowMessage('Sur quoi t''as cliqué ??! Valeur reçue='+IntToStr(i));
      end;
    end;
    Chaque bouton renvoye le bon code et la croix renvoye Cancel

    A+
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    jouaud bernard> malheureusement, cela ne corrige pas le problème

    NoisetteProd> en effet, ton 2ème code (avec MessageBox) fonctionne chez moi.

    Mais pas le premier.... Est-ce que ça pourrait venir du fait que j'utilise delphi 6 ?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 852
    Points : 11 285
    Points
    11 285
    Billets dans le blog
    6
    Par défaut
    pour MessageBox sous D5
    Value Meaning
    IDABORT Abort button was selected. =3
    IDCANCEL Cancel button was selected. =2
    IDIGNORE Ignore button was selected. =5
    IDNO No button was selected. =7
    IDOK OK button was selected. =1
    IDRETRY Retry button was selected. =4
    IDYES Yes button was selected. =6

    pour MessageDlg sous D5
    mrOk =1 mrRetry =4 mrNo=7
    mrYes =6 mrAbort =3 mrNone =0
    mrCancel =2 mrIgnore =5 mrAll=8
    sous D5, valeurs identiques et pour MessageDialog, la croix renvoie mrNone, soit 0...


    les 2 codes de NoisetteProd marchent chez moi sous D5 et D6, mais tu as un paramètre de plus que nous au MessageDialog !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     i:=MessageDlg('Test', [b]'Appuyez sur qqchose:'[/b], mtInformation, mbYesNoCancel, 0);
    d'où vient-il ???
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par tourlourou
    ...tu as un paramètre de plus que nous au MessageDialog !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     i:=MessageDlg('Test', [b]'Appuyez sur qqchose:'[/b], mtInformation, mbYesNoCancel, 0);
    d'où vient-il ???
    j'utilise une autre version surchargée de cette fonction:

    Citation Envoyé par doc
    function MessageDlg(const Caption: WideString; const Msg: WideString; DlgType: TMsgDlgType
    ; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  7. #7
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Le problème viens donc surement de cette version surchargée !

    DIs nous en plus !
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Arf !

    Je viens de comprendre.....

    Je faisais un "uses QDialogs", au lieu d'un "uses Dialogs" !!! Et dans QDialogs, il y a la définition des mêmes constantes mais avec des valeurs différentes


    Tout fonctionne nickel maintenant

    Vous trouvez pas ça assez mal fouttu vous ?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  9. #9
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par Pill_S
    Je faisais un "uses QDialogs", au lieu d'un "uses Dialogs" !!! Et dans QDialogs, il y a la définition des mêmes constantes mais avec des valeurs différentes
    Toutes les unités Qxxxx sous les unités CLX pour compatibilité avec Kylix. Supprime de ton code tous ces unités si la portabilité n'est pas le but. Ton application ne s'en portera que mieux ( la CLX livrée avec Borland est buggée au possible )

    D'autre part, dans Delphi 6 et Delphi 7 quand tu fais F1 sur un identificateur il te donne trés souvent deux liens. Le premier contient le nom seul et le deuxième à la même nom mais avec "référence de bibliothèque de composants visuels" en plus. Dans ce cas prend toujours ce deuxième lien, il correspond à la version VCL de l'aide. Le premier est celui de la version CLX...
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  10. #10
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par Nono40
    Toutes les unités Qxxxx sous les unités CLX pour compatibilité avec Kylix. Supprime de ton code tous ces unités si la portabilité n'est pas le but. Ton application ne s'en portera que mieux ( la CLX livrée avec Borland est buggée au possible )

    D'autre part, dans Delphi 6 et Delphi 7 quand tu fais F1 sur un identificateur il te donne trés souvent deux liens. Le premier contient le nom seul et le deuxième à la même nom mais avec "référence de bibliothèque de composants visuels" en plus. Dans ce cas prend toujours ce deuxième lien, il correspond à la version VCL de l'aide. Le premier est celui de la version CLX...
    Tout s'explique ! Moi je prenais toujours l'autre lien...

    Merci de la précision. En effet, la portabilité n'étant pas indispensable dans mon cas, je vais virer tous les Qxxx


    @+!
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

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

Discussions similaires

  1. Problème de valeur de retour
    Par miklmikl dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/06/2009, 11h01
  2. Problème avec valeur de retour d'une fonction
    Par ouranos21 dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 20/01/2009, 08h52
  3. [AJAX] Récupération d'une valeur en retour d'un php
    Par lodan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/02/2007, 21h18
  4. [function][delphi]problème valeur de retour
    Par daheda dans le forum Delphi
    Réponses: 2
    Dernier message: 14/11/2006, 13h26
  5. Problème de sous requête (retour d'une seule valeur)
    Par ero-sennin dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/06/2006, 11h12

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