Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pq ma boucle ou Timer ne fonctionne pas?

22 réponses
Avatar
latouffe59
Bonjour,
comme indiqu=E9 dans le titre j'ai un probleme avec un code qui comporte
une fonction Timer...

ce code est cens=E9 , lorsque l'on clique sur une commande et que la
valeur de Label2.Caption (issue d'un Hscroll) <750, lancer un timer
qui fais augmenter progressivement la valeur du Label2.Caption. De l=E0,
j'ajoute dans la boucle un changement de contraste sur l'image qui
d=E9pend de Label2.Caption.

Probleme:Quand le programme se lance il ne change qu'un fois de
valeur (la valeur initiale quadn je clique sur command20)

Qu'est ce qui ne marche pas ?Timer , ma boucle?

---------------------------------------------------------------------------=
----------
Private Sub Command20_Click()

If Label2.Caption < 750 Then
Call Timer1_Timer
Beep
Timer1.Interval =3D i

For i =3D 0 To i =3D 650000 Step 50
Label2.Caption =3D Label2.Caption + i * 250 / 65000
Contraster Form1.ImageCopieOrigine, Form1.ImageOrigine,
Form1.HScroll1.Value
AjusterImageACadre Form1.ImageCopieOrigine,
Form1.ImageAffichee, Form1.ImageContenant
Next i

End If
End Sub
---------------------------------------------------------------------------=
-------------------

Merci d'avance , un pi=E8tre d=E9butant
latouffe

10 réponses

1 2 3
Avatar
Jean-marc
wrote:
Bonjour,
comme indiqué dans le titre j'ai un probleme avec un code qui comporte
une fonction Timer...



Hello,

Il y a plusieurs choses qui ne vont pas.

D'abord la syntaxe de ta boucle.

La syntaxe en VB est :

For i = _start to _end step _step

quand tu écris

For i = 0 To i = 650000 Step 50

Vb évalue ce qui suit le 'to' comme un test logique
donc il évalue (ie0000)

Comme i =0, le test (ie0000) retourne FALSE, ce qui en VB vaut 0
il entre donc une seule fois dans ta boucle.

Il faut donc écrire

For i = 0 To 650000 Step 50

Ensuite il faut déclarer tes variables.

Je ne suis pas sur de la valeur que tu veux utiliser
car tu écris une fois 650000 et une fois 65000. Lequel est le bon ?

Dans les 2 cas de toute façon, il faut un Long

Donc:

Dim i As Long, dans la procédure (c'est une locale).

Mais il y a plus grave:

Tu écris:

Timer1.interval = i

Mais que vaut i??

Ou est la déclaration de la variable ??
Quelle valeur a t'elle quand tu entres dans la boucle ??

Tel quel, impossible de dire ce que peut faire le code, mais une
chose est sure, il ne fait ni ce que tu veux ni ce que tu crois.

Bref, le tout est à reprendre :-)

Il faut aussi commenter (utilement) ton code car à la lecture,
on ne peut absolument pas deviner tes intentions, ce qui rend
tout débuggage difficile (impossible).

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
latouffe59
> Bref, le tout est à reprendre :-)



arggggg
bon j'ai refais un code il est surement plus explicite que le
précédent.
je rappel son but: on doit voir l'image perdre du contraste en
fontion du temps

note1: Quel est la valeur du Timer? j'ai pris Interval mais je corit
bien que c'est faut pourtant je trouve nullepart cette info
note2: pour le calcul de label12.caption c'est pas la valeur qui
m'importe pour l'instant
note3: 65000>> valeur (quasiment) max que peut avoir le Timer

Si quelqu'un peut donc me sauver maintenant...???.........???

Merci d'avance latouffe59
--------------------------------------------------------------------------- ----------------------------------------
'Commande qui décelenche un timer et une décrémentation en fonction
'du temps de la valeur de label12.captation(utilisée pour le
contraste)
--------------------------------------------------------------------------- ------------------------------------------
'
Private Sub Command20_Click()
Dim Interval As Long
Timer1.Enabled = True
'Lance la commande uniquement si le contraste est inférieur à 750

If Label2.Caption < 750 Then



'active le timer
Call Timer1_Timer

Beep
'une boucle For utilise la valeur du timer pour dimunier
'régulièrement la valeur label12.caption >> on doit voir l'image
'perdre du contraste en fontion du temps

For Interval = 0 To 65000 Step 50
'on diminue la valeur de Label12.caption
Label2.Caption = Label2.Caption - Interval * 250 / 65000

'on réaffiche l'image avec la nouvelle valeur de
label12.caption
Contraster Form1.ImageCopieOrigine, Form1.ImageOrigine,
Form1.HScroll1.Value

AjusterImageACadre Form1.ImageCopieOrigine,
Form1.ImageAffichee, Form1.ImageContenant

'arrete le programme si la valeur de label12.caption passe
en dessou de 450
If Label2.Caption < 450 Then Exit For

Next Interval

End If
End Sub
--------------------------------------------------------------------------- ----
Avatar
jean-marc
wrote in message
news:
Bref, le tout est à reprendre :-)



arggggg
bon j'ai refais un code il est surement plus explicite que le
précédent.
je rappel son but: on doit voir l'image perdre du contraste en
fontion du temps

note1: Quel est la valeur du Timer? j'ai pris Interval mais je corit
bien que c'est faut pourtant je trouve nullepart cette info
note2: pour le calcul de label12.caption c'est pas la valeur qui
m'importe pour l'instant
note3: 65000>> valeur (quasiment) max que peut avoir le Timer

Si quelqu'un peut donc me sauver maintenant...???.........???



Ton code ne fait toujours pas ce que tu crois.

L'appel à timer est inutile, le fait de mettre enabled
est suffisant, c'est tout le principe de l'objet timer.

Que fais tu dans ce timer ???

En fait j'ai l'impression que tu penses que le timer va
incrémenter la valeur de interval dont tu tu sers dans
ta boucle ou je ne sais pas quoi.

Honnètement, tu ne vas pas t'en sortir comme ça. Je te
conseille d'acheter un bon bouqin de programmation
Visual Basic, ou à défaut de trouver un site avec un
tutorial VB.

Sur ce site, de nombreux tutoriaux VB:
http://vb.developpez.com/cours/

Pour ton problème en particulier, le principe est de
déclencher le timer dans command_click, comme tu fais.

Puis tout le code qui gère le contraste doit se mettre
dans la procédure évènementielle du timer, en utilisant
une variable statique.

Mais pour comprendre tout ça, il faut comprendre plusieurs
notions:
- l'objet timer
- les procédures évènementielles
- les variables statiques
- etc.

Bon courage!

--
Jean-marc
Avatar
latouffe59
> Mais pour comprendre tout ça, il faut comprendre plusieurs
notions:
- l'objet timer
- les procédures évènementielles
- les variables statiques
- etc.




Ouai je me doute mais pour ca il faut avoir du tems et mon stage ne me
le permet pas! (et pourtant j'aimerais bien)

En fait je pensais trouver facilement un code du type:
---------------------------------------------------------------------------
Private Sub commande()
Timer.Enable= True 'démare un Timer


For i =X To Y Step Z 'une boucle qui augmente en fonction
du temps, avec i la valeur du temp

A=A-i 'une procédure
next i
End sub
--------------------------------------------------------------------------- ---

Mais bon j'ai pas trouver et j'ai pas réussi à le
faire ......................

Merci quand meme pour ton aide
latouffe59
Avatar
Driss HANIB
Salut latouffe59

le principe est qu'il faut que tu mettes ta partie qui modifie ton label
dans la procedure Timer1_Timer de ton timer.
Si la valeur 'numérique' de ton label est < 750 alors tu déclenche ton timer
et sinon tu bloques (enabledúlse) ton timer

dans ton timer tu définis la proriété 'interval' à ce que tu veux : comme
dit JMarc, i n'a aucune valeur définie dasn ton prog : elle doit
correspondre au temps que tu veux laisser entre deux çncrémentations de ton
label.
Ceci dit quelles sont les parties qui modifient auparavant ton label..?

Driss






a écrit dans le message de
news:
Mais pour comprendre tout ça, il faut comprendre plusieurs
notions:
- l'objet timer
- les procédures évènementielles
- les variables statiques
- etc.




Ouai je me doute mais pour ca il faut avoir du tems et mon stage ne me
le permet pas! (et pourtant j'aimerais bien)

En fait je pensais trouver facilement un code du type:
---------------------------------------------------------------------------
Private Sub commande()
Timer.Enable= True 'démare un Timer


For i =X To Y Step Z 'une boucle qui augmente en fonction
du temps, avec i la valeur du temp

A=A-i 'une procédure
next i
End sub
----------------------------------------------------------------------------
--

Mais bon j'ai pas trouver et j'ai pas réussi à le
faire ......................

Merci quand meme pour ton aide
latouffe59
Avatar
latouffe59
>
dans ton timer tu définis la proriété 'interval' à ce que tu veux : comme
dit JMarc, i n'a aucune valeur définie dasn ton prog : elle doit
correspondre au temps que tu veux laisser entre deux çncrémentations de ton
label.



Ouai j'ai pas défini i mais c'était juste un code" brouillon" pour
l'idée ...


Ceci dit quelles sont les parties qui modifient auparavant ton label..?

Driss


Ah que ?qui? doù? dont? quoi???...???

je n'ai pas compris ce que tu me demandais ....Pourrais tu etre plus
explicitite?

Mais on m'a conseillié d'aller chercher la valeur de l'heure, de
choper la valeur en numérique et de faire un boucle For avec:

--------------------------------------------------------------------
'On trouve l'heure
'On la change en valeur numérique

Dim X as long
DimZ as long
Dim Y as long

X=valeur_numérique
Z=valeur_numérique+durée_totale
Y=durée_entre_chaque_action

For X=valeur_numérique to Z Step Y
action
'On retrouve l'heure
'On la rechange en valeur numérique
Next X
-------------------------------------------------------


Vous pensez qu'un tel code peut fonctionner?
si oui il me reste plus qu'as trouver comment faire >> 'On trouve
l'heure

'On la change en valeur numérique

Cordiallement,
latouffe59
Avatar
latouffe59
>
dans ton timer tu définis la proriété 'interval' à ce que tu veux : comme
dit JMarc, i n'a aucune valeur définie dasn ton prog : elle doit
correspondre au temps que tu veux laisser entre deux çncrémentations de ton
label.



Ouai j'ai pas défini i mais c'était juste un code" brouillon" pour
l'idée ...


Ceci dit quelles sont les parties qui modifient auparavant ton label..?

Driss


????????????????????
je n'ai pas compris ce que tu me demandais ....Pourrais tu etre plus
explicitite?


Mais on m'a conseillé d'aller chercher la valeur de l'heure, de choper
sa valeur en numérique et de faire un boucle For avec:

--------------------------------------------------------------------
'On trouve l'heure
'On la change en valeur numérique

Dim X as long
DimZ as long
Dim Y as long

X=valeur_numérique
Z=valeur_numérique+durée_totale
Y=durée_entre_chaque_action

For X=valeur_numérique to Z Step Y
action
'On retrouve l'heure
'On la rechange en valeur numérique
Next X
-------------------------------------------------------


Mais je suis un peu dubitatif....,Vous pensez qu'un tel code peut
fonctionner?
si oui il me resterait (enfin c'est plus vite dit que fait) plus qu'à
trouver comment faire >> 'On trouve l'heure

'On la change en valeur numérique

Cordiallement,
latouffe59
Avatar
latouffe59
>
dans ton timer tu définis la proriété 'interval' à ce que tu veux : comme
dit JMarc, i n'a aucune valeur définie dasn ton prog : elle doit
correspondre au temps que tu veux laisser entre deux çncrémentations de ton
label.



Ouai j'ai pas défini i mais c'était juste un code" brouillon" pour
l'idée ...


Ceci dit quelles sont les parties qui modifient auparavant ton label..?

Driss


Ah que ?qui? doù? dont? quoi???...???

je n'ai pas compris ce que tu me demandais ....Pourrais tu etre plus
explicitite?

Mais on m'a conseillié d'aller chercher la valeur de l'heure, de
choper la valeur en numérique et de faire un boucle For avec:

--------------------------------------------------------------------
'On trouve l'heure
'On la change en valeur numérique

Dim X as long
DimZ as long
Dim Y as long

X=valeur_numérique
Z=valeur_numérique+durée_totale
Y=durée_entre_chaque_action

For X=valeur_numérique to Z Step Y
action
'On retrouve l'heure
'On la rechange en valeur numérique
Next X
-------------------------------------------------------


Vous pensez qu'un tel code peut fonctionner?
si oui il me reste plus qu'as trouver comment faire >> 'On trouve
l'heure

'On la change en valeur numérique

Cordiallement,
latouffe59
Avatar
latouffe59
>
dans ton timer tu définis la proriété 'interval' à ce que tu veux : comme
dit JMarc, i n'a aucune valeur définie dasn ton prog : elle doit
correspondre au temps que tu veux laisser entre deux çncrémentations de ton
label.



Ouai j'ai pas défini i mais c'était juste un code" brouillon" pour
l'idée ...


Ceci dit quelles sont les parties qui modifient auparavant ton label..?

Driss


Ah que ?qui? doù? dont? quoi???...???

je n'ai pas compris ce que tu me demandais ....Pourrais tu etre plus
explicitite?

Mais on m'a conseillié d'aller chercher la valeur de l'heure, de
choper la valeur en numérique et de faire un boucle For avec:

--------------------------------------------------------------------
'On trouve l'heure
'On la change en valeur numérique

Dim X as long
DimZ as long
Dim Y as long

X=valeur_numérique
Z=valeur_numérique+durée_totale
Y=durée_entre_chaque_action

For X=valeur_numérique to Z Step Y
action
'On retrouve l'heure
'On la rechange en valeur numérique
Next X
-------------------------------------------------------


Vous pensez qu'un tel code peut fonctionner?
si oui il me reste plus qu'as trouver comment faire >> 'On trouve
l'heure

'On la change en valeur numérique

Cordiallement,
latouffe59
Avatar
latouffe59
On 23 avr, 12:53, "Driss HANIB" wrote:

dans ton timer tu définis la proriété 'interval' à ce que tu veux : comme
dit JMarc, i n'a aucune valeur définie dasn ton prog : elle doit
correspondre au temps que tu veux laisser entre deux çncrémentations de ton
label.



oui je comptais bien le faire mais je n'ai paspenser à le mettre dans
ce "code brouillon"

Ceci dit quelles sont les parties qui modifient auparavant ton label..?

Driss



???????????????????????????????
Euuhhhh tu pourrais être un peu plus explicite car là j'ai strictement
rien compris à ta question !
1 2 3