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 :

[D7] Différentes variantes de MessageDlg


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut [D7] Différentes variantes de MessageDlg
    Bonjour;

    question bête :
    Message la fonction MessageDlg a plusieurs formes dont celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function MessageDlg(const Caption: WideString; const Msg: WideString; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload;
    Mais je ne parviens pas à l'appeler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MessageDlg('Titre de la fenêtre', 'Message à afficher', mtError, [mbOk], 0)
    Le compilo me renvoie un message "Types incompatibles TMsgDlgType et String, juste après le deuxième paramètre, ce qui correspondant à la premiere forme de MessageDlg :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
    Comment appeler MessageDlg avec Overload ?

    Merci

    A+
    Charly

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Il faut pê passer par des variables de type WideString ou transtyper lors de l'appel, sinon il prend la chaîne constante pour une String ?
    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 !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    d'après ce que tu indiques (je n'ai pas fais de test), ton problème vient que tu fais un mélange entre les deux déclarations, dans la seconde tu ne dois pas passer le titre mais débuter directement par le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageDlg('Message à afficher', mtError, [mbOk], 0)

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    En fait la fonction MessageDlg a plusieurs formes mais uniquement dans QDialogs et donc s'il s'agit d'une application CLX.
    Ça, ce n'est pas indiqué dans l'aide il faut fouiller dans les sources pour le voir
    Pour avoir quelque chose d'identique (titre et texte "personnalisés", bouton par défaut etc..) en VCL il faudra plutôt utiliser MessageBox
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Merci à tous,

    Comme Serge, en cherchant dans Dialogs.pas, j'ai vu que la version avec titre de la boite de dialogue n'existe pas.

    Du coup j'ai trouvé cette fonction qui répond au problème et permet même de changer le libellé des Boutons :

    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
    function TForm2.MessageDialog(Title, Text: string; DlgType: TMsgDlgType;
      Buttons: TMsgDlgButtons; BtnCaptions: array of string): Integer;
      var dlgButton: TButton;
          i, BtnIndex: Integer;
    begin
      with CreateMessageDialog(Text, DlgType, Buttons) do
        begin
          Color := ClBtnFace ;
          BtnIndex := 0;
          Caption := Title;
          for i := 0 to ComponentCount - 1 do
            if (Components[i] is TButton) then
              begin
                dlgButton := TButton(Components[i]);
                if BtnIndex > High(BtnCaptions) then Break;
                dlgButton.Caption := BtnCaptions[BtnIndex];
                Inc(BtnIndex);
              end;
          Result := ShowModal;
        end;
    end;
    A+
    Charly

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Charly910, j'avais aussi cet exemple qui fonctionne avec
    d6 mais apparemment moins complet, à toutes fins :

    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
     
    function MonMessageDlg(const Msg: string; DlgType: TMsgDlgType;
      Buttons: TMsgDlgButtons): integer;
    begin
      with CreateMessageDialog(Msg, DlgType, Buttons) do
      try
        BorderIcons := BorderIcons - [biSystemMenu];
        Caption:= '****Mon titre****';
        Color := clblue;
        Result := ShowModal;
      finally
        Free;
      end;
    end;
     
    //Utilisation
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     if MonMessageDlg('Hello Voulez vous continuer?', mtConfirmation, [mbYes, mbNo]) = mrYes then
     ShowMessage('Oui')
     
      else begin
     
        ShowMessage('Non');
        close;
    end;
    end;
    Par contre ta fonction comment l'utilises tu ?

    @+,

    cincap

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour Cincap,

    par exemple comme ceci (sans renommage des boutons) :

    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
    Var
      iResult : Integer ;
    Begin
        iResult := MessageDialog('Titre du dialogue', 'Message à afficher', mtInformation,
                       [mbIgnore, mbAbort, mbHelp, mbReTry, mbOk], []);
      Case iResult of
        IDOK       : ShowMessage('Ok') ;
        IDCANCEL   : ShowMessage('Annuler') ;
        IDABORT    : ShowMessage('Abandonner') ;
        IDRETRY    : ShowMessage('Réessayer') ;
        IDIGNORE   : ShowMessage('Ignorer') ;
        IDYES      : ShowMessage('Oui') ;
        IDNO       : ShowMessage('Non') ;
        IDHELP     : ShowMessage('Aide') ;         //  ne ferme pas le dialogue
        MB_TIMEDOUT: ShowMessage('Temps écoulé');
      end;
    A+
    Charly

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Charly910, merci pour l'info, après test j'ai une erreur sur :

    MB_TIMEDOUT: ShowMessage('Temps écoulé');
    Sinon j'avais retrouvé la fonction et son utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    MessageDialog('New Title', 'Some text', mtInformation, mbYesNoCancel, ['Btn Yes', 'Btn No', 'Btn Cancel']);
    Je n'en ai pas besoin c'est seulement pour info.

    @+,

    cincap

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Ah oui, mb_TimeOut n'est pas dans Windows.pas. Il doit être déclaré. Il ne sert pas ici. Seulement pour une autre fonction avec TimeOut !!

    A+
    Charly

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

Discussions similaires

  1. Jointure entre différentes bases (variante vicieuse)
    Par Dragoon264 dans le forum Développement
    Réponses: 1
    Dernier message: 30/11/2017, 14h11
  2. Réponses: 4
    Dernier message: 28/10/2016, 06h55
  3. Différent type de police dans un MessageDLG()..
    Par tazthedev dans le forum Delphi
    Réponses: 2
    Dernier message: 09/10/2006, 11h41
  4. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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