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 :

problème avec Application->ProcessMessages()


Sujet :

C++Builder

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut problème avec Application->ProcessMessages()
    Bonjour,

    Afin d'éviter le bloquage de mon application dans une boucle while trés longue, j'ai intercalé dedans un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application->ProcessMessages()
    Cela fonctionne trés bien puisque je peux faire n'importe quoi d'autre dans mon appli qui n'est plus bloquée.
    ...SAUF le bouton quitter de la barre de menu ou la "croix" en haut a droite !

    je n'ai plus moyen de quitter mon appli une fois rentré dans la boucle...je suis bien encore bloqué donc, d'une certaine manière...

    : comment ce fait il que le bouton quitter ne soit pas opérant ?

    ps: la fonction quitter est gérée par une fonction standard dans un ActionList. Mais j'ai essayé en ajoutant un Form1->close(); sur le même bouton quitter et ca fait pareil.


    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Quand vous cliquez la croix, l'événement OnClose est appelé, vous pouvez donc à cette occasion positionner un flag.

    Par exemple, vous déclarez un booléen dans la classe principale.

    Vous mettez ce booléen à true dans l'événement OnClose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    fin=true;
    }
    Et dans la boucle en while, vous testez la condition de la boucle tout en vérifiant que fin ne soit pas passé à true, ce qui par exemple sur une boucle simple ne contenant qu'une incrémentation donnerait une syntaxe de ce genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int i;
    fin=false;
     
    i=0;
    while(i!=100000000 && !fin)
       {
       i++;
       Application->ProcessMessages();
       }
     
    ShowMessage("Terminé!");
    Dans ces conditions, l'événement OnClose est respecté.

    À bientôt
    Gilles

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut
    je vais faire comme ca

    Mais comment se fait il que cette fonction permet de faire toutes les taches sauf celle ci, quitter ?
    Je suppose qu'il y a une bonne raison mais je ne vois pas du tout...

    Merci beaucoup
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Tant que l'événement n'est pas terminé, on ne peut pas quitter. Si l'événement contient une boucle, la boucle sera exécutée entièrement et ensuite seulement on quittera. C'est pourquoi, si on veut rendre prioritaire un autre événement dans une boucle, il faut d'une part, forcer les messages Windows par Application->ProcessMessages() à chaque itération et d'autre part, procéder par flag pour sortir de la boucle si l'événement prioritaire est appelé.

    À bientôt
    Gilles

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut
    voila une trés bonne raison

    Je vais finir par ne plus savoir comment vous remercier !

    Merci beaucoup !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

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

Discussions similaires

  1. petit problème avec Application.ProcessMessages
    Par tornade69 dans le forum Langage
    Réponses: 4
    Dernier message: 09/10/2008, 15h27
  2. Problème avec Application.Dialogs(xlDialogSaveAs).Show
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/12/2007, 18h54
  3. Problème avec Application.OnTime
    Par Uopip dans le forum VBA Outlook
    Réponses: 14
    Dernier message: 09/07/2007, 15h14
  4. Problème avec Application.Minimize
    Par Alchemist dans le forum Delphi
    Réponses: 1
    Dernier message: 27/01/2007, 21h49
  5. [VBA-E] Problème avec Application.StatusBar
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/03/2006, 16h44

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