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 :

Personnaliser les boutons du MessageDialog


Sujet :

Delphi

  1. #1
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut Personnaliser les boutons du MessageDialog
    Bonjour à Tous;
    J'aimerais apprendre à personnaliser les boutons des MessagesDialog
    J'ai trouvé le lien suivant:
    https://www.developpez.net/forums/d8...messagedialog/

    j'ai copié et essayer le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if MessageDlgCustomBtn('Type de Restauration ?', mtConfirmation, [mbYes, mbNo], ['Rapide', 'Complète']) = mrYes then
    Mais il se passe rien, les boutons personnalisés ne s'affichent pas.

    alors; j'ai également essayé ceci; qui ne fonctionne pas non plus. MessageDialog tiré d'un tuto que j'ai modifié avec des TBitBtn

    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
    38
    39
    40
    41
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
    Bitmap: TBitmap;
    begin
    Bitmap := TBitmap.Create;
    ImageList1.GetBitmap(1, Bitmap);
      with CreateMessageDialog('Vive  Delphi... ', mtConfirmation, [mbOK,mbRetry]) do
        try
          Caption := 'Look Extrême !';
          TLabel(FindComponent('Message')).Font.Color := $00C08000;
          TLabel(FindComponent('Message')).Font.Name := 'Mistral';
          TLabel(FindComponent('Message')).Font.Size := 13;
          TLabel(FindComponent('Message')).Width:= 150;
          TBitBtn(FindComponent('Ok')).Caption := 'Ok';
          TBitBtn(FindComponent('Ok')).Cursor:= crHandPoint;
          TBitBtn(FindComponent('Ok')).Hint := 'Ok';
          TBitBtn(FindComponent('Ok')).ShowHint := True;
          TBitBtn(FindComponent('Ok')).TabOrder := 0;
          TBitBtn(FindComponent('Ok')).Width:= 90;
          TBitBtn(FindComponent('Ok')).Left:= 10;
          TBitBtn(FindComponent('Retry')).Caption := 'Réessayez';
          TBitBtn(FindComponent('Retry')).Cursor:= crHandPoint;
          TBitBtn(FindComponent('Retry')).Hint := 'réessayez';
          TBitBtn(FindComponent('Retry')).ShowHint := True;
          TBitBtn(FindComponent('Retry')).Width:= 90;
          TBitBtn(FindComponent('Retry')).Left:= 110;
          TBitBtn(FindComponent('Retry')).Height:= 33;
     
         /// ImageList1.GetBitmap(0, TImage(Findcomponent('Retry')).Picture.Bitmap);
          //TBitBtn(FindComponent('Retry')).Glyph:= Bitmap;                   /// cette ligne m'affiche un message d'erreur
     
          TImage(FindComponent('Image')).Transparent := True;
          ImageList1.GetBitmap(0, TImage(Findcomponent('Image')).Picture.Bitmap);
          Width:= 220;
          Position := poScreenCenter;
          ShowModal;
        finally
          Bitmap.Free;
          Free;
        end;
    end;
    Quelqu'un pourrait-il m'expliquer comment résoudre mon problème soit avec l'une ou l'autre solution ??,
    En vous remercient d'avance,
    Cordialement

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 692
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 692
    Points : 13 122
    Points
    13 122
    Par défaut
    Suivant ta version de Delphi, oriente-toi plutôt vers TTaskDialog.

  3. #3
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    Bonsoir,
    Merci Andnotor, je vais essayer ton code,
    Cordialement

  4. #4
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    j'ai mis en place le code visiblement, ça ne va pas, j'ai Delphi 2005, perso

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    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 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    j'utilise MsgLangs.pas de Cirec qui fonctionne très bien et permet d'internationaliser les appli et en particulier les boutons de MessageDlg

    A+
    Charly

  6. #6
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    Bonjour Charly 910;
    Merci encore une fois pour ta réponse, je vais voir ça de suite,
    Cordialement

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Ah ! je me souviens de ce Post.
    Mon objectif était d'avoir les Glyph des boutons sur un message box que j'avais trafiqué pour y ajouter une case à cocher.

    Tout repose sur la routine CreateMessageDialog.
    Elle permettait de créer mon message box comme l'aurait fait la fonction MessageDlg (et donc avec des boutons sans glyph).
    Une fois ceci effectué, j'agrandissait le fenêtre et y plaçait ma case à cocher.
    On m'a ensuite demandé de mettre les glyphs sur les boutons et j'ai alors posté de message sur le forum.
    L'option suggérée par ShaiLeTroll consistait à remplacer les TButton par des BitBtn où le glyph est géré nativement.

    Si ça peut t'aider, cela a donné ceci :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    function MessageDialogChecked(Const Msg, ChkMsg : string; var CheckedValue : boolean; DlgType : TMsgDlgType; Buttons : TMsgDlgButtons) : Word;
     
      procedure PlacerTypeBouton(OldBtn : TButton; NewBtn : TBitBtn; LeType : TBitBtnKind; BtnType: TMsgDlgBtn);
      begin
        { 1 : Met le type de bouton et le modalresult }
        NewBtn.Kind := LeType;
        NewBtn.ModalResult := OldBtn.ModalResult;
        if (NewBtn.Default) then NewBtn.TabOrder := 0;
        { 1 }
        { 2 : Le bouton d'annulation (si) présent n'est plus le vieux mais le nouveau }
        if (OldBtn.Cancel) then
        begin
          OldBtn.Cancel := False;
          NewBtn.Cancel := True;
        end;
        { 2 }
        { 3 : Au cas où le OnClick soit redéfini }
        if Assigned(OldBtn.OnClick) then
          NewBtn.OnClick := OldBtn.OnClick;
        { 3 }
      end;
     
    var Frm : TForm;
        Chk : TCheckBox;
        StMsg : string;
        i : integer;
        OldButton : TButton;
        NewButton : TBitBtn;
    begin
      stMsg := Msg + StringOfChar(Chr(13),2);
      Frm := CreateMessageDialog(Msg,DlgType,Buttons);
      Frm.Height := Frm.Height + 10;
      try
        // Création de la case à cocher
        Chk := TCheckBox.Create(Frm);
        Chk.Checked := CheckedValue; // Valeur par défaut
        Chk.Caption := chkMsg; // Message derrière la checkbox
        Chk.Left := 12; // Position Y de la case
        Chk.Top := Frm.Height - Chk.Height - 70; // Position X de la case
        Chk.Width := Frm.Width - 11; // Taille de la case
        Chk.Visible := True;
        Chk.Parent := Frm;
        // Postionnement au centre l'écran
        with Frm do
        begin
          Position := poScreenCenter;
          for i := 0 to ControlCount - 1 do
          begin
            if (Controls[i] is TButton) then
            begin
              OldButton := TButton(Controls[i]);
     
              { Créé et place le nouveau bouton }
              NewButton := TBitBtn.Create(Frm);
              NewButton.Top := OldButton.Top + 12;
              NewButton.Left := OldButton.Left;
              NewButton.Width := OldButton.Width;
              NewButton.Height := OldButton.Height + 2; // <= Place pour le glyphe
              NewButton.Parent := OldButton.Parent;
     
              case OldButton.ModalResult of
                mrOK : PlacerTypeBouton(OldButton, NewButton, bkOK, mbOK);
                mrCancel : PlacerTypeBouton(OldButton, NewButton, bkCancel, mbCancel);
                mrAbort : PlacerTypeBouton(OldButton, NewButton, bkAbort, mbAbort);
                mrRetry : PlacerTypeBouton(OldButton, NewButton, bkRetry, mbRetry);
                mrIgnore : PlacerTypeBouton(OldButton, NewButton, bkIgnore, mbIgnore);
                mrYes : PlacerTypeBouton(OldButton, NewButton, bkYes, mbYes);
                mrNo : PlacerTypeBouton(OldButton, NewButton, bkNo, mbNo);
                mrAll : PlacerTypeBouton(OldButton, NewButton, bkAll, mbAll);
                mrYesToAll : PlacerTypeBouton(OldButton, NewButton, bkYes, mbYesToAll);
                mrNoToAll : PlacerTypeBouton(OldButton, NewButton, bkNo, mbNoToAll);
              else
                PlacerTypeBouton(OldButton, NewButton, bkOK, mbOK);
              end;
     
              { Désactive et masque l'autre bouton }
              OldButton.Enabled := False;
              OldButton.Visible := False;
            end;
          end;
        end;
        // Valeur de résultat
        Result := Frm.ShowModal;
        CheckedValue := Chk.Checked;
      finally
        Frm.Free;
      end;
    end;

  8. #8
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    bonjour Popo;
    Un grand merci pour ton code
    Je vais l'essayer, bien que j'avais mis des TBitbtn dans mon MessageDialog, ça n'a pas fonctionné.
    J'espère avoir plus de chance avec ton code
    Cordialement

  9. #9
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    @Charly;
    Bonjour Charly, merci pour le lien, mais, ce n'est pas trop ce que je recherche, ce code change uniquement la langue des captions des boutons, moi, ce sont les glyphs que je veux afficher
    Cordialement

Discussions similaires

  1. Personnaliser les boutons du MessageDialog
    Par popo dans le forum Débuter
    Réponses: 4
    Dernier message: 23/09/2009, 18h10
  2. personnaliser les boutons
    Par NicolasMO dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/08/2007, 22h07
  3. [CSS] personnaliser les boutons des balises INPUT
    Par Leviathan_72 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 08/11/2005, 15h22
  4. [FLASH MX2004] Personnaliser les scrollbars
    Par stephane eyskens dans le forum Flash
    Réponses: 10
    Dernier message: 09/10/2003, 12h53

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