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

WinDev Discussion :

afficher un chronometre


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut afficher un chronometre
    Hello tout le monde !

    Question simple mais compliqué visiblement...

    Alors je souhaite afficher un chronomètre dans une fenêtre, pour faire passer le temps à l'utilisateur, pendant un traitement

    Je m'explique, lorsque je clique sur un bouton pour lancer une action qui prends un certain temps,
    je souhaite afficher quelques les différentes étapes ainsi qu'un chronomètre qui tourne pour chaque étape.

    Donc j'ouvre une fenêtre fille libre et ensuite je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    OuvreFille(FEN_Patienter)
     
    ChronoDébut(1)
    TimerSys(Affiche_Chrono, 10, 2)
     
    //ici le traitement qui prend un peu de temps
    POUR i = 1 A 4
        FEN_Patienter.LIB_Info = "etape " + i
        [...]
    FIN
     
    ChronoFin(1)
    FinTimerSys(2)
    Le code de la fonction Affiche_Chrono est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FEN_Patienter.LIB_Chrono = ChronoValeur(1)
    Et bien j'ai rien qui s'affiche dans le LIB_Chrono...
    Par contre j'ai bien les messages dans LIB_Info !! ???

    une idée ??

    Merci bien !!

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour jj,

    Regarde du côté de multitacherepeint() et de multitâche(-1).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    merci pour le tuyaux,

    Je pensais aussi qu'il y a avait une histoire de rendre la main au système pour afficher les infos dans une fenêtre qui n'est pas la principale...



    merci !!

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    De rien,

    Un petit conseil (2 mêmes) :
    - Attention au délai de rafraîchissement, tu as mis un délai un peu trop court, je pense. L'affichage consomme des ressources et ça va peut-être clignoter à mort. Un affichage tous les dixièmes de secondes, c'est déjà pas mal
    - Tu as forcé le N° de timer à 2. Attention, si tu en plusieurs, de ne pas te mélanger les crayons dans tes numéros de timer quand tu les arrêtes. Je préfère utiliser une variable du type nRafraichAffichAttente, nDelaiAttente,...

    Bon dév
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    y a rien à faire, je n'arrive pas à afficher le chronomètre dans la fenêtre.

    Le chrono tourne bien, car c'est seulement à la fin du traitement qu'il s'affiche.

    J'ai enlever les fonctions internes à cette fenêtre pour les mettre dans les fonctions globales au projet.
    ça change rien...

    c'est incroyable ce truc !!!

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Pourquoi utiliser des fonctionnalités antérieures à Windev 10 et ne pas utiliser les procédures automatiques https://doc.pcsoft.fr/?9000072 ?
    J'ai testé, cela fonctionne sans problèmes.
    Après, ValeurChrono est en millisecondes, si l'affichage de ton libellé est en HH:MM:SS, et que le type de valeur retournée n'est pas la bon, on peut avoir un gros pataquès.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Alors je viens de tester la procédure Automatique de type Timer, boucle à l'infini toute les 10 CC.

    elle est appelée à l'ouverture de la fenêtre concernée.

    elle contient ce simple bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCÉDURE Affiche_Chrono()
     
    LIB_SansNom1 = ChronoValeur(1)
    Je cherche même pas encore à formater l'affichage, j'affiche juste la valeur du chrono 1 brute.

    résultat :

    j'ai "0.....1" à l'ouverture puis ça reste figée jusqu’à la fin du traitement pour afficher "0.....498".

    pourquoi je vois pas défiler ce compteur ??

  8. #8
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Je rappelle le scénario car peut-être que le soucis vient de là ?

    1 - ouverture du projet

    2 - à la fin d'init de la fenêtre principale, execution d'une procédure "assez" longue

    dans cette procédure :

    2.1 - ouverture de la fenêtre "patienter"
    2.1.1 - donc c'est son ouverture qui lance le chrono et lance la procédure automatique (timer)
    La procédure automatique est interne à la fenêtre "patienter"

    2.2 - opération N°1
    2.3 - opération N°2
    .....
    2.n - fermeture de la fenêtre "patienter"

  9. #9
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Interessant : je rajoute le commentaire suivant :

    j'utilise OuvreFille(FEN_Patienter)

    si j'utilise Ouvre(FEN_Patienter), je vois le chrono tourner !
    Mais mes instructions dans la fonction appelante sont bloquées

  10. #10
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Il me semble que lorsqu'une fenêtre n'a pas le focus, les instruction sont "gelées". Ilfaudrait éventuellement voir du côté des taches parallèles.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #11
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    bien j'ai essayé de gérer dans un "vrai" thread en parallèle, mais même résultat

    Je vais voir côté des taches parallèles effectivement.

    C'est marrant, j'ai créé un autre chrono que j'affiche dans la fenêtre principale, et là ça marche...
    Mais dès que j'ouvre une autre fenêtre, le temps que la fenêtre appelante se "grise", le chrono se bloque...

    ça me rappelle un bon vieux bug toujours sans solution des Threads qui se figent NETTES si tu ouvre un menu contextuel de l'application ou si tu ouvre un menu tout cours dans la même application...

  12. #12
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    m'en sort pas...

    Résultat identique.

    J'ai essayé de d'externaliser dans une collection de procédure globale la fonction d'affichage :

    Mais si je sors la procedure automatique que je parallélise de "FEN_Patienter", j'ai une erreur qui me dit que le Chrono n'est pas démarré.
    Chose visiblement normale, vu que le chrono est démarré dans une autre fenêtre que la principale.

    ça devient franchement compliqué...

    question parallèle (sans jeux de mots), c'est quoi la différence entre procédures automtiques, Thread et taches parallèles ?
    Franchement, l'aide de Windev n'est pas très clair à ce sujet...

  13. #13
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    1. Threads, tâches parallèles et procédures automatiques
      Ce lien explique tout ou presque https://forum.pcsoft.fr/fr-FR/pcsoft...rence/read.awp
      Le procédure automatique permet des appels régulier aux Threads et aux procédures classiques.
    2. Résolution du problème
      Avec une procédure globale ça tourne sans problèmes
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
       
      PROCÉDURE AfficheChrono(sLibellé est chaîne)
      chLibellé est Champ
      sChronoAffiché est chaîne
      duDuréeChrono est Durée
       
      chLibellé<-{sLibellé,indChamp}
      duDuréeChrono..EnMillisecondes=gTempo
      sChronoAffiché=DuréeVersChaîne(duDuréeChrono,"HH:MM:SS:LLL")
      chLibellé..Libellé=sChronoAffiché
      gTempo est une variable de type chrono globale au projet

      Fin d'initialisation de FEN_Affiche_Chrono
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      AfficheChrono(LIB_Chrono..NomComplet)
      Fermeture de FEN_Affiche_Chrono
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      FinAutomatismeProcédure(AfficheChrono)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  14. #14
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    mille merci pour ton code, malheureusement, j'ai le même résultat, à savoir,

    - affichage du chrono à l'ouverture de la fenêtre.
    - affichage figé durant le traitement qui suit le la commande d'ouverture de la fenêtre
    - à la fin du traitement, affichage de la valeur du chrono qui tourne bien (vu que fin automatisme procédure est executée dans le code de fermeture de la fenêtre)

    Clairement, l'affichage est figée pendant mon traitement.

    Sinon merci pour le lien, je pense faire la différence maintenant :

    Thread : je les utilise par exemple dans les gestions des socket (pour lire, écrire, watchdog, bit de vie, ...)
    Parallèle : je pourrais les utiliser quand par exemple j'ai plusieurs traitement à faire pour afficher des graphique,
    au lieu de les faire un par un, je peux les paralléliser !
    punaise je vais gagner un sacré paquet de temps de cycle là

  15. #15
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Comme précisé dans mon post, la procédure est une procédure globale.
    Si la procédure est locale, elle est propre à la fenêtre donc si la fenêtre n'a pas le focus, la procédure ne tourne plus
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  16. #16
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    oui c'est clair, je l'ai bien mise dans les procédure globale !!

    seule petite différence, je suis en version 23, la variable globale de type chrono n'existe pas encore...
    donc je suis resté avec le Chrono...(1).
    Mais je pense pas que ce soit cela le problème...

  17. #17
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Si le chrono est appelé hors de la procédure, il est préférable de passer le N° du chrono en paramètre de la fenêtre et de la procédure,bien qu'implicitement, si aucun n° de chrono n'est précisé la valeur est 1. Mais là, on va faire ceinture et bretelles.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  18. #18
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    J'ai bien compris,

    Chose faite, lors de l'appel de la procédure globale, je passe donc maintenant, le nom du champs où le chrono doit être affiché ainsi que le N° du Chrono.

    Même résultat

  19. #19
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    c'est dingue ! si j'affiche le chrono dans la fenetre principale, ça fonctionne !!
    mais pas dans la fenetre fille...

  20. #20
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    D'autant plus que chez moi, ça tourne.
    Essaye un Trace(ChronoValeur(nNoChrono)) dans la procédure auto
    Il reste la solution du champ Layout
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

Discussions similaires

  1. [XL-2010] afficher chronometre dans une cellule
    Par chefsun dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2012, 10h24
  2. [Débutant] Chronometre qui s'affiche en continue
    Par seanbean dans le forum C#
    Réponses: 2
    Dernier message: 17/12/2011, 20h43
  3. afficher du texte
    Par Mau dans le forum OpenGL
    Réponses: 10
    Dernier message: 24/06/2003, 15h31
  4. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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