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

VB 6 et antérieur Discussion :

Créer un Timer (ou équivalent) dans un projet sans Form [FAQ]


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut Créer un Timer (ou équivalent) dans un projet sans Form
    Bonjour.
    Je construit un programme qui dois générer des entrées au clavier. J'ai créé un premier programme (avec une Form) dans lequel j'utilisais un Timer. La feuille ne s'affiche jamais (aucune utilité), je souhaite donc l'enlever et passer par un Sub Main. Mon problème est que j'ai tout de même besoin du Timer, or je ne sais pas comment en créer un. J'ai été voir dans la FAQ et j'ai trouver cela :
    http://vb.developpez.com/faq/?page=Form#ctl_dynamique
    Mais apparament cela ne peut pas fonctionner sans feuille (du moins c'est ce que j'en ai déduis du message d'erreur de VB : "Valide seulement dans un module d'objet" en surlignant WithEvents).
    Que dois-je faire ?
    Merci d'avance pour toute information
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Un petit bout de code a metre dans un module, et demarrer le projet (sans aucune form) sur la sub Main

    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
    Option Explicit
    Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    Dim hTimer As Long
    Private Sub Main()
      Dim Freq As Long
      Dim Fin As Date
      Fin = DateAdd("s", 30, Now)
      Freq = 1000 'en millisecondes
      hTimer = SetTimer(0, 0, Freq, AddressOf TimerProc)
      Do While Now < Fin
        DoEvents
      Loop
      KillTimer 0, hTimer
      MsgBox "Terminé"
    End Sub
    Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
      Static Basc As Boolean
      If Basc Then
        Basc = False
        Debug.Print "Tic"
      Else
        Basc = True
        Debug.Print "Tac"
      End If
    End Sub
    Voilou, j'espere que çà t'aideras
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  3. #3
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    nickel, je regarde si ca me convient et je te tiens au courant
    Merci beaucoup
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  4. #4
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Je viens d'essayer c'est impecable, par contre il faut bien fait attention à certaines choses :
    Il ne faut pas oublier de faire des boucles d'attente, sinon le contenu des variables est effacé. Perso je n'avais qu'un Main et les sub de timer, et au début je n'avais pas fait de boucle à la fin du Main, je ne comprenais pas pourquoi j'avais des erreurs, de plus l'erreur était qu'un variable servant d'indice dans un tableau était "hors de la plage d'indice", et dès que l'erreur était générée VB quittait tous seul En effet mon tableau avait pour indice minimum 1, et ma variable étant réinitialisée passait à 0.
    Donc voila, prudence mais cela fonctionne très très bien
    Un GRAND MERCI à toi Delbeke
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  5. #5
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    De rien.
    Effectivement, si tu ne mets pas de boucle d'attente à la fin de la sub main, ton programme s'arrete quand la sub main est terminée parceque ton projet n'a pas de form !
    Comme tu as une call back(TimerProc), le timer que tu as créé tente d'acceder à la call back qui n'est plus en memoire: CRAC BOUM HUE !

    Derniere recommandation, Il ne faut surtout pas oublier de killer le timer avant de quitter
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  6. #6
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    En effet Merci encore, sujet résolu
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/01/2012, 15h09
  2. Réponses: 13
    Dernier message: 08/03/2010, 19h31
  3. Réponses: 2
    Dernier message: 16/01/2009, 18h11
  4. Créer une clé d'activation dans un projet
    Par BXDSPORT dans le forum EDI
    Réponses: 4
    Dernier message: 28/09/2007, 22h56
  5. ActiveX dans un projet sans interface graphique
    Par Nalfouille dans le forum MFC
    Réponses: 6
    Dernier message: 04/01/2006, 17h30

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