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 créer un indicateur de déroulement


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut Comment créer un indicateur de déroulement
    Bonjour,
    dans mon appli, on doit appeler un DLL (également écrit en C++) qui effectue des calcul durant 20s environ. Je voudrais créer un indicateur de déroulement pour illustrer à l'utilisateur que le programme fonctionne et qu'il faut attendre un peu. Je ne sais pas comment réaliser cet indicateur. Quelqu'un pourrait me donner des idées?
    Merci d'avance.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Avec une fsStayOnTop (FormStyle) dont on vide tous les BorderIcons (tous à false) on obtient une fenêtre qu'il est impossible de fermer.
    Donc juste avant l'appel à la dll, afficher (Show) cette fenêtre qui va rester figée tant que le calcul ne sera pas terminé !
    Dès que le calcul est terminé il suffit de la masquer (Hide) !

    Il est fort possible qu'entre le Show et l'appel à la dll il faille rajouter Application->ProcessMessages pour que cette fenêtre s'affiche correctement !

    A plus !

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Merci. Si j'ai bien compris, il s'agit d'afficher un Form durant les calculs DLL. Est-ce qu'il est possible d'indiquer le déroulement de la DLL? Par exemple, j'ai un variable dans la DLL, qui est de 1 à 10000. Si je peux sortir et afficher ce variable en temps réel, utilisateur aura une vision du déroulement du programme.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Dans ce cas, peut-être que la fonction de la dll pourrait retourner une valeur.

    Le programme principal peut boucler tant que l'on n'a pas atteint un maximum (ou autre valeur significative pouvant avoir un sens précis).
    Ca peut ressembler à 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
     
    //On signale à la dll d'initialiser la valeur qu'elle retourne
    Raz_dll();
    //on démarre le processus
    int resultat=0;
    while(resultat < 100)
        {
        resultat = Fonction_dll();
        //... quelque chose à montrer
        //... quelque chose à faire
        //...
        // impérativement traiter les messages
        Application->ProcessMessages();
        }
    Dans la dll on aurait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int variable;
     
    void Raz() {variable=0;} 
     
    int Fonction()
    {
    // donc quelque chose qui fait que :
    variable++;
    //ou bien si on est arrivé à la fin sans atteindre le max :
    //variable = 200;
    return variable;
    }
    Donc au sens où la fonction sait reprendre le calcul là où elle l'avait arrêté !

    Il y a sans doute d'autres solutions, parce que la dll doit, dans ce cas, être développée dans ce sens !

    A plus !

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Tu peux aussi ajouter une fonction de callback comme paramètre de ta fonction dans la DLL. A intervalle régulier, la fonction dans la DLL va appeler le callback avec le degré d'avancement:

    Dans la DLL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef void (*ProgressDelegate)(long);
     
    extern "C" __stdcall __declspec(dllexport) int StartCalculation(ProgressDelegate ShowProgress) {
     
      long progress=0;
     
      for (...) {
        // Do some work
        progress=progress+1; 
        if (ShowProgress) ShowProgress(progress);
     
      }
     
    }
    Et dans ton programme principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void UpdateProgress(long value) {
    ...
        Application->ProcessMessages();
    }
     
    void MyWork() {
     
      StartCalculation(UpdateProgress);
     
    }

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Merci tous les deux.
    J'ai un contre temps en ce moment, je testerai vos proposition dans un moi et je vous tiensi au courant.
    Xavier

Discussions similaires

  1. [FLASH 5] Comment créer un lien hypertexte
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 30/03/2006, 12h26
  2. Comment créer des barres de Menu ?
    Par MoKo dans le forum IHM
    Réponses: 5
    Dernier message: 30/07/2003, 14h58
  3. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 07h59
  4. Comment créer et executer un .EXE
    Par maher12 dans le forum Flash
    Réponses: 3
    Dernier message: 26/09/2002, 08h33
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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