Pouvez vous m'éclairer sur SetTimer???

cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 - 10 févr. 2009 à 23:45
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 12 févr. 2009 à 22:51
bonsoir
j'ai utilisé l'API settimer, j'aimerai comprendre différente définition de cette fonction dont les traduction sonta pparement aproximative:
Public Declare Function SetTimer Lib "User32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) As Long
hwnd: comment peut il être nul?
niDEvent : idem comment peut on le déclarer égal à 0 ??
lpTimerFunc: représente l'adresse de fonction de rappel qui sera appelée à la fin de la temposrisation c'est bien ça? si oui pourquoi dans la fonction de rappel : Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) on soit obligé retransmettre cette adresse lpTimerFunc??

<!-- / message -->

3 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
11 févr. 2009 à 05:31
toute la doc est dispo sur MSDN...

http://msdn.microsoft.com/en-us/library/ms644906.aspx

http://msdn.microsoft.com/en-us/library/ms644907(VS.85).aspx


je sais pas où tu a été regardé tes infos, mais MSDN reste la référence.

concernant la TimerProc, tu te méprend sur les arguments:
VOID CALLBACK TimerProc(
HWND hwnd,
UINT uMsg,
UINT_PTR idEvent,
DWORD dwTime
);
on ne retransmet donc pas l'adresse de CallBack.

le timer peut fonctionner avec deux moyens de communication.
- soit on donne un hWnd valide et cette fenetre recevra un message WM_TIMER pour indiquer que le délai de tempo est atteint
- soit on lui donne un hWnd vide, mais on renseigne la fonction de rappel.
0
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 1
12 févr. 2009 à 20:14
bonjour
j'ai bien consulté les liens donnés, très bien, j'ai essayé de les traduire, je ne pense pas avoir tout bien compris
j'en ai fait la traduction suivante:
'La fonction SetTimer permet de créer une minuterie qui exécute une fonction au bout de la valeur de délai spécifié.
'Vous pouvez utiliser ces fonctions si vous souhaitez exécuter des événements à des intervalles supérieures _
    à ce que permet le contrôle Timer de Visual Basic. _
    ces fonctions API autorisent de définir un intervalle de 24.86jours .
Public Declare Function SetTimer Lib "User32" (ByVal hwnd As Long, _
                                                ByVal nIDEvent As Long, _
                                                ByVal uElapse As Long, _
                                                ByVal lpTimerFunc As Long _
                                                ) As Long
'hWnd: identifie la fenêtre à associer au timer. Cette fenêtre est détenue par le thread d'appel. _
    Si hwnd est NULL, aucune fenêtre n'est associé à l'horloge et le paramètre suivant nIDEvent est _
    ignoré et ce timer sera remplacé. La valeur de retour de SetTimer donnera l'ID du timer recréé.
'nIDEvent: Spécifie l 'identifiant d'un timer différent de zéro. _
    Si le paramètre hWnd est NULL, ce paramètre est ignoré et un nouveau  timer  est généré. _
    Si le paramètre HWnd n'est pas NULL et la fenêtre spécifiée par hWnd  possède déjà un timer _
    avec une valeur nIDEvent, alors le timer existant est remplacé par un nouveau timer. _
    Lorsque SetTimer remplace un timer, la minuterie est remise à zéro. _
    Par conséquent, un message sera envoyé après que le délais soit écoulé. _
    Si l'appel ne vise pas à remplacer un timer existant, nIDEvent doit être de 0 si le hWnd est NULL.
'uElapse: spécifie la valeur de délai, en millisecondes. _
    Vous pouvez utiliser un type de données Long avec une valeur de 2,147,483,647 millisecondes. _
    Dépassement de valeurs supérieures à ce résultat limite dans une erreur d'exécution de « 6 ». _
    Remarque : Visual Basic ajoute un signe dièse (#) à la fin de la valeur de temps si la valeur dépasse cette limite.
'lpTimerFunc: pointe vers la fonction de "Rappel" lorsque le délai est écoulé. _
    Pour plus d'informations sur la fonction, voir TimerProc. _
    Si lpTimerFunc est NULL, le système envois un WM_TIMER message à la file d'attente d'application. _
'Utilisez l'opérateur AddressOf pour renvoyer un pointeur à la fonction. _
    La fonction de rappel reçoit le RefFen (nWnd), le NIDEvent, les UElapse et paramètres lpTimerFunc _
    à partir de la fonction AddressOf.
'Si la fonction SetTimer réussit,(l'horloge a été installé), _
    la fonction SetTimer renvoie la valeur ID du minuteur pour être utilisée dans un appel à KillTimer.
'Si la fonction ne parvient pas à créer un timer, la valeur de retour est égal à zéro. _
    Pour obtenir des informations d'erreur étendues, appelez GetLastError.

tandisque pour la function TimerProc j'ai l'information à cette adresse: http://www.developpez.net/forums/d685610/autres-langages/general-visual-basic-6-vbscript/vb-6-anterieur/page-internet-totalement-affichee/#post4014567
tu verras la déclaration de la function TimerProc par ProgElect
"PublicSub TimerProc(ByVal hwnd AsLong, ByVal nIDEvent AsLong, ByVal uElapse AsLong, ByVal lpTimerFunc AsLong)"
,et apparement ça fonctionne correctement, c'est parceque je me suis posé la question pourquoi réutilsé lpTimerFunc

encore merci pour cet éclairage
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
12 févr. 2009 à 22:51
concernant la timerProc:

tu peux nommer les paramètres comme tu veux, tant que les parametres et leur type sont respéctés.

sinon, as tu des questions particulières ?
0
Rejoignez-nous