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 :

Comment fermer par programme un dialog affiché avec execute [IDE]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Comment fermer par programme un dialog affiché avec execute
    Bonjour,
    un petit problème qui semble tout bête à la base !!
    J'ai un TSaveDialog que j'affiche avec un "execute".
    Je voudrai dans certain cas pouvoir fermer ce dialog par programme.
    Comment faire ??? y'a pas de Close()...

    merci de votre aide !!
    Pascale38

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Vu que le Execute est bloquant cela semble difficile
    Faudrait un thread qui via un SendMessage soit simule le Clic soit envoi WM_CLOSE
    Une bidouille Delphi 100% API Win32 pour écrire dans un Dialogue Ouvrir (là c'est celui de NotePad) pour envoyer sa propre valeur
    Voir aussi Modifier un champ d'un TSaveDialog

    Autre solution, voir si tu peux fournir ta propre WndProc et via un bool, tu pourrais forcer la fermeture, par contre, cela ne réagi que lors d'une action utilisateur, peut-être dès le déplacement de la souris mais je pense que WM_NOTIFY n'arrive que sur un VRAI action comme un clic sur un élément
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    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 ShaiLeTroll !

    ni SendMessage(monDialog->Handle, WM_CLOSE, 0,0);
    ni PostMessage(monDialog->Handle, WM_CLOSE, 0,0);
    ne ferme le dialogue...

    Je vais regarder du côté de ton code pour simuler le clic sur ok.
    merci !
    Pascale38

  4. #4
    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
    J'ai bien compris l'idée de faire un
    SendMessage(HwndButton, BM_CLICK, 0, 0);

    mais je n'arrive pas à récupérer le HwndButton.
    Tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    lpszClass := 'Button';
    lpszWindow := 'OK';
    HwndButton  := FindWindowEx(HwndParent, HwndChildAfter, lpszClass, lpszWindow);
    'OK' c'est la caption de ton bouton???
    Ce qui veut dire que ça marche pas si le PC is in english ???
    En ce cas pas la peine que je cherche plus loin dans cette solution, vu que appli internationale...

    Arghhhh comment récupérer le handle de ce bouton !!!???

  5. #5
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut pour le bouton OK je crois que tu peux utiliser un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HWND HwndButton = GetDlgItem(HwndParent, IDOK);

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Voici un exemple plus complet qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
        SaveDialog1->Execute();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::SaveDialog1Show(TObject *Sender)
    {
        HWND HwndParent = GetParent(((TSaveDialog*)Sender)->Handle);
        HWND HwndButton = GetDlgItem(HwndParent, IDCANCEL); // Bouton Annuler
        SendMessage(HwndButton, BM_CLICK, 0, 0); // Envoie un Click sur le bouton Annuler
    }
    //---------------------------------------------------------------------------
    J'ai mis le code dans le OnShow du TSaveDialog juste pour faire le teste. Je te fais confiance pour le mettre à la bonne place.

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

Discussions similaires

  1. Comment fermer un programme en barre des tâches ?
    Par chris-57 dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 19/11/2009, 12h56
  2. Comment fermer un programme ouvert avec la fonction Shell
    Par nicolas2603 dans le forum VBA Access
    Réponses: 13
    Dernier message: 08/02/2008, 20h01
  3. Comment modifier par programmation une form crée lors de l'execution
    Par Fab.asia dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/07/2007, 14h47
  4. Comment fermer un programme en execution
    Par Nik_Meilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2007, 17h33
  5. Réponses: 1
    Dernier message: 18/02/2007, 20h30

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