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
---------------------------------------------------------------------------=
-------------------
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
latouffe59@gmail.com 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)
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
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
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" <vg.bleuciel.sa@wanadoo.fr> a écrit dans le message de
news: 46321e90$0$25932$ba4acef3@news.orange.fr...
latouffe59@gmail.com 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)
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)