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 :

3 click sur un bouton d'un MessageDlg pour une action


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Par défaut 3 click sur un bouton d'un MessageDlg pour une action
    Bonjour, j'ai un problème avec les codes suivant:

    Je crée la fiche de message:
    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
    function DefMessageDlg(const ACaption: string;
      const Msg: string;
      DlgType: TMsgDlgType;
      Buttons: TMsgDlgButtons;
      DefButton: Integer;
      HelpCtx: Longint): Integer;
    var
      i: Integer;
      btn: TButton;
    begin
      with CreateMessageDialog(Msg, DlgType, Buttons) do
      try
        Caption := aCaption;
        HelpContext := HelpCtx;
        for i := 0 to ComponentCount - 1 do
        begin
          if (Components[i] is TButton) then
          begin
            btn := TButton(Components[i]);
            btn.Default := btn.ModalResult = DefButton;
            if btn.Default then ActiveControl := Btn;
          end;
        end;
        Result := ShowModal;
      finally
        Free;
      end;
    end;
    Ensuite je fait ouvrir (pour le test) le message avec un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if DefMessageDlg('Mon Titre','Mon Message',mtInformation,mbYesNoCancel,mrNo,0) = mrYes
         then ShowMessage('Oui');
      if DefMessageDlg('Mon Titre','Mon Message',mtInformation,mbYesNoCancel,mrNo,0) = mrNo
         then ShowMessage('No');
      if DefMessageDlg('Mon Titre','Mon Message',mtInformation,mbYesNoCancel,mrNo,0) = mrCancel
         then ShowMessage('Canceller');
    end;
    Si je clique sur le bouton 'Oui' (1é dans les if) c'est OK;
    Si je clique sur le bouton 'Non' (2è dans les if) cela nécessite 2 clicks
    Bouton 'Annuler' 3 clicks.
    Si j'inverse les if le nombre de click change suivant leur nouvelle position.

    Il est évident que le programme s'arrête sur chaque bouton pour en vérifier l'égalité mais je voudrais que l'action se fasse au premier click de souris sur n'importe lequel des 3 boutons.

    Merci

    Duan

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Il ne te faut appeler la boite de dialogue qu'une seule fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      case DefMessageDlg('Mon Titre','Mon Message',mtInformation,mbYesNoCancel,mrNo,0)  of
        mrYes:ShowMessage('Oui');
        mrNo:ShowMessage('No');
        mrCancel:ShowMessage('Canceller');
      end;
    end;
    en moins compact celà peut aussi s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var ResultatModalDeLaBoite:integer;
    begin
      ResultatModalDeLaBoite:=DefMessageDlg('Mon Titre','Mon Message',mtInformation,mbYesNoCancel,mrNo,0);
      case ResultatModalDeLaBoite of
        mrYes:ShowMessage('Oui');
        mrNo:ShowMessage('No');
        mrCancel:ShowMessage('Canceller');
      end;
    end;

    Bon dev

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Par défaut
    Merci beaucoup Waskol, simple mais efficace.

    Duan

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

Discussions similaires

  1. [JComboBox] Ouverture de déroulant par click sur un bouton
    Par oursblanc dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 06/02/2006, 14h16
  2. Détecter click sur le bouton de l'application dans Taskbar
    Par bob2553 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 22/08/2005, 22h34
  3. Réponses: 2
    Dernier message: 26/07/2005, 15h35
  4. Automatiser le click sur le bouton d'un msgbox
    Par rootdaoud dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/05/2005, 10h31
  5. click sur le bouton + de jdbnavtoolbar
    Par hamido dans le forum JBuilder
    Réponses: 4
    Dernier message: 28/05/2004, 00h10

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