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

2 réponses

1 2 3
Avatar
Vincent Guichard
a écrit :
Ahhh ok!!
merci de l'info .......


mais ne t'es tu pas trompé en mettant "lif" au lieu de "if"?
Et le (true, false) en VB6 n'est il pas la valeur par défaut? je dis
ca car Patrice Henrio ne l'a pas mis!

latouffe59




Je n'ai pas mis lif, mais Iif (avec deux i, le premier étant en
majuscule), qui est un opérateur ternaire (l'équivalent du ?: cher au
C). La syntaxe de Iif est :
Iif(Condition, Valeur_si_Vrai, Valeur_si_Faux)



Vincent Guichard
Avatar
Patrice Henrio
en fait le problème est qu'au début du C, le booléen n'existait pas donc on
voyait des choses du genre

If (n>450) then Var_bool=TRUE else Var_boolúLSE

dans lequel TRUE et FALSE étaient des constantes prédéclarées

Maintenant ces constantes (et même ce type) existe donc il est inutile de
passer par cette formule.

Donc comme l'a parfaitement expliqué Vincent Guichard, la ligne
Var_Bool=(n>450) s'évalue ainsi

on évalue n, on évalue n>450, on renvoie le résultat de l'évaluation que
l'on affecte à Var_Bool

donc si n vaut 100, n>450 vaut False et Var_Bool vaut, après évaluation,
False
<boutade>(soit 0 en C ...)</ boutade>

si n vaut 500, (n>450) est évalué à true et Var_Bool vaut donc, après
évaluation, true.

Iif est une fonction qui prend comme premier argument un booléen (un
prédicat en prolog), deuxième argument une valeur ou une fonction à évaluer
qui correspond à la valeur Vrai du premier argument et comme troisième
argument une valeur ou une fonction à évaluer qui correspond à la valeur
false du premier argument. En tout état de cause Iif renvoie une valeur :
c'est une fonction.

L'important surtout c'est de bien comprendre comment fonctionne une variable
booléenne. Le booléen est un type de base comme integer ou long.

Ainsi

if (n<450) then Var_bool = true else Var_Bool = false

va se traduire par une évaluation de n, une évaluation de n<450 (jusque là
pas de différence fondamentale avec ce que je propose) puis selon les cas
une évaluation de true ou de false (eh oui une constante aussi s'évalue)
puis une affectation à Var_Bool. avec la méthode préconisée pour les
booléens on shunte l'évaluation des constantes true ou false.

De plus il ne faut jamais utiliser les valeurs par défaut car on n'est
jamais à l'abri d'une évolution du produit qui fasse que les valeurs par
défaut différent.

Ainsi VB6 prend les paramètres d'une procédure ByRef (par référence) par
défaut et VB2005 les prend ByVal (par valeur)par défaut. Celui qui a pris
soin de définir à chaque fois si ses paramètres sont ByRef ou ByVal pourra
beaucoup plus facilement passer de l'un à l'autre. Pour les autres
programmeurs, il y a au moins 10% des cas ou le résultat sera très différent
de ce qui est attendu.



"Vincent Guichard" a écrit dans le message de
news: 46321e90$0$25932$
a écrit :
Ahhh ok!!
merci de l'info .......


mais ne t'es tu pas trompé en mettant "lif" au lieu de "if"?
Et le (true, false) en VB6 n'est il pas la valeur par défaut? je dis
ca car Patrice Henrio ne l'a pas mis!

latouffe59




Je n'ai pas mis lif, mais Iif (avec deux i, le premier étant en
majuscule), qui est un opérateur ternaire (l'équivalent du ?: cher au C).
La syntaxe de Iif est :
Iif(Condition, Valeur_si_Vrai, Valeur_si_Faux)



Vincent Guichard






1 2 3