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 :

Thread + Timer + Boucle (Affichage numérique)


Sujet :

WinDev

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut Thread + Timer + Boucle (Affichage numérique)
    Bonjour,

    J'ai un cas particulié que je n'ai jamais expérimenté;

    Je dois afficher differentes images dans plusieurs champ image avec un timer.


    Par exemple,

    Je crée un gabarit contenant 3 champ Images.
    J'affiche mes images en boucle pour chacunes des zones avec interval en secondes.
    J'attend un paramètre. (SOIT Fin des boucles d'images ou Timer globale définie par l'utilisateur)
    *Je change de gabarit, j'ai maintenant 5 champs images*
    J'affiche mes images en boucle pour chacunes des zones avec interval en secondes.

    *Je RE-crée mon gabarit 3 champs images*
    ...
    Recommence et boucle jusqua la fermeture du soft





    En fait, je dois avoir ;
    -minimum 1 timer pour le changement de gabarit
    - 1 timer par champ Image


    Donc, j'utilise les thread, timer, je boucle, un mélange de tout? Mon soft ne dois pas gélé en attentant la fin d'un temporisation.

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pour moi il faut passer par des timers: la procédure est lancée dans le thread principal, ainsi elle a accès à l'interface utilisateur.
    Tu peux sans problème lancer "dynamiquement" de nouveau timer lorsqu'un nouveau champ image est affiché.
    Dixit l'aide en ligne, on ne peut pas passer de paramètres à la fonction appelée par le timer.
    Par contre on peut appeler une méthode d'un objet.
    Tu peux donc utiliser une classe dont un membre contient le nom du champ image, et une méthode qui s'occupe de la modification des images.

    A chaque ajout d'un champ image, tu crée une nouvelle instance de la classe, tu lui indiques le nom du champ image (à mon avis il faut le nom complet), et tu lances un nouveau timer en lui indiquant de lancer la méthode idoine de l'instance.

    J'imagine assez bien stocker la liste des instances dans un tableau associatif, dont la clé sera le nom du champ image, et ajouter à la classe un membre qui "contient" le numéro du timer, ou alors laisser à l'instance le soin de lancer le timer (et l'arrêter) via des méthodes publiques.
    Bref il y a pas mal de pistes.

    Tatayo.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 283
    Points : 263
    Points
    263
    Par défaut
    Bonjour tatayo,

    C'est ce que j'ai fait le soir-même, j'ai créer une classe qui gère le changement d'image. J'appel une méthode par timer qui incrémente l'indice en cours de mon tableau (où son stocké les images) et une autre méthode automatique qui appel un changement de valeur de mon champ si l'indice a augmenté.

    Je peux initialiser cette classe pour chacun des mes champs images dont je veux afficher un diaporama.


    Apercu du code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    ViewImageLibrary est une Classe
     
    m_sNomChamp est une chaîne
    m_tabImage est un tableau de STListeImageLibrary
     
    m_nIndiceEnCours est un entier
    m_nDernierIndice est un entier
     
    m_nNumeroTimer est un entier
    m_nSuffixeTimer est un entier
     
    FIN
     
    PROCÉDURE Constructeur()
     
     
     
    PROCÉDURE Destructeur()
     
     
    PROCÉDURE Initialise(p_sChamp est une chaîne,p_tabImage est un tableau de STListeImageLibrary)
     
    :m_sNomChamp = p_sChamp
    :m_tabImage = p_tabImage
    m_nNumeroTimer = 0 
    SI :m_tabImage..Occurrence = 0 ALORS libérer objet
     
     
    // Procédure automatique :
    // La procédure est exécutée manuellement, lors d'un appel dans le code
    // Elle s'exécutera dans un thread (sans avoir besoin d'appeler la fonction ThreadExecute), sans utilisation de HFSQL
    // Elle sera répétée en boucle, en attendant 3 secondes entre chaque appel
    // 
     
    PROCÉDURE VerifieChangement()
     
    SI m_nDernierIndice = m_nIndiceEnCours ALORS
    	RETOUR
    FIN
     
    ExécuteThreadPrincipal(FEN_AFFICHAGES.ChangeValeurImage,m_sNomChamp,m_tabImage[m_nIndiceEnCours].sCheminImage)
     
    Trace("CHANGE IMAGE : "+m_sNomChamp)
    m_nDernierIndice = m_nIndiceEnCours
     
     
     
    PROCÉDURE PasseProchain()
     
    m_nIndiceEnCours ++
     
    SI m_nIndiceEnCours > :m_tabImage..Occurrence ALORS
    	m_nIndiceEnCours = 1 
    FIN
     
    SI :m_nNumeroTimer <> 0 ALORS
    	FinTimer(m_nNumeroTimer)
    SINON
    	:m_nNumeroTimer = Random(1,99999)
    FIN
     
    Timer(PasseProchain,(m_tabImage[m_nIndiceEnCours].nFin-m_tabImage[m_nIndiceEnCours].nDebut)*100,m_nNumeroTimer)
     
    PROCÉDURE Lance()
     
    m_nDernierIndice = 0 
    m_nIndiceEnCours = 0 
     
    PasseProchain()
     
     
     
    VerifieChangement()
    Merci pour ton temps,

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

Discussions similaires

  1. Timers, boucles d'affichage et Thread.sleep
    Par Silk_do_Nadear dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 28/07/2007, 01h49
  2. [CR XI] format affichage numérique
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 09/02/2007, 18h32
  3. Multi Thread et boucle infini...
    Par mickael777 dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 05/01/2006, 20h53
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. boucle affichage enregistrements
    Par Pau dans le forum ASP
    Réponses: 3
    Dernier message: 06/12/2004, 11h30

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