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

C++Builder Discussion :

Fermer automatiquement un MessageBoxA


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut Fermer automatiquement un MessageBoxA
    Bonjour !

    j'ai un messageBox que j'utilise comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (MessageBoxA(0, message.c_str(), "Warning",
    				MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2) == IDYES)
    {
    				// je fais ce qu'il y a à faire
    }
    et je voudrai qu'au bout d'un certain temps ce messageBox se ferme automatiquement si l'utilisateur ne fait rien.
    Je ne sais pas comment faire ? Commet je peux connaitre le handle de la messageBox ?
    Et d'ailleurs à quoi sert le premier paramètre de cette fonction qui est un HWND ? Je n'arrive pas à trouver de la doc sur cette fonction...

    merci !!!
    Pascale38

  2. #2
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Personnellement je crée ( pour des raisons de qualité graphique ) mes propres MessagesBox à partir d'une TForm avec un TTimer qui me ferme ma "TFormMessageBox" au bout d'un certain temps ( ou pas suivant paramètre passé dans le constructeur ).

    L'avantage est que tu peux mettre des MessageBox de formes diverses et variées grace à un TImage avec couleur transparente, et pas seulement faire du "rectangulaire moche".

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Le HWND indique le parent de la boîte de dialogue. Cela évite que la MessageBox ne s'affiche sous la fenêtre appelante.
    Pour toutes les références à l'API Win32 il faut aller sur le site de Microsoft qui est très bien fait:
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Par contre il n'est pas possible de fermer une MessageBox de façon native.
    3 contournements possibles:
    - Subclass de la MessageBox pour pouvoir avoir accès à sa liste de message. On peut alors envoyer le WM_CLOSE après un temps défini.
    - Utiliser les TaskDialog qui sont des MessageBox évoluées apparues avec Vista. Il existe aussi des implémentations custom qui fonctionnent sous XP.
    - Ou avoir sa propre classe de MessageBox comme Argol_Medusa le suggère.

    Il y a sur ce forum au moins une discussion sur comment subclasser une MessageBox. Il s'agissait d'ajouter une case à cocher mais le principe est le même. Je te laisse chercher.

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut Pascale38
    cela peut se faire assez facilement, il faut lorsque la boite de dialogue est ouverte recuperer a l'aide d'un utilitaire tel que SPY++ (il y a un equivalent BCB je ne me souvient plus du nom) le Handle et le Titre de la MessageBox, le Titre pour la detection le Handle pour control pour le premier teste ceci ne marchera a condition qu'il n'y a pas plusieurs Titres identiques
    pour le teste j'ai utilise deux TButtons
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    String message = "message";
    if (MessageBoxA(0, message.c_str(), "Warning",
        MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2) == IDYES)
    {
        // je fais ce qu'il y a à faire
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    // fermer le MessageBox
    HWND hwnd = FindWindow("#32770","Warning");
    EndDialog(hwnd, 0);
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Salut Argol_Medusa,

    c'est exactement ce que je suis en train de faire, en plus ça va résoudre d'autres problèmes que je rencontre avec les messageBox (centrage dans la fenêtre, caption, bouton par défaut, etc...)

    merci à tous !
    Pascale38

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Pour positionner, et redimensionner le MessageBox c'est peut etre possible avec " MapDialogRect "

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/09/2007, 14h51
  2. Réponses: 9
    Dernier message: 15/06/2007, 14h57
  3. Réponses: 6
    Dernier message: 28/04/2007, 09h58
  4. comment lancer/fermer automatiquement un script Perl?
    Par megapacman dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2006, 15h10
  5. Réponses: 5
    Dernier message: 16/06/2006, 12h18

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