OVH Cloud OVH Cloud

Maximum de .top

4 réponses
Avatar
Daniel AUBRY
Bonjour à tous,

soit un formulaire contenant :
1 Ascenseur
1 image nommée Conteneur
1 image nommée SupportVignette contenue par Conteneur
x images nommée Vignette(x) contenues par SupportVignette
(loadées au besoin)

Conteneur a les dimensions du formulaire.
SupportVignette à la largeur de Conteneur.
La hauteur de SupportVignette est fonction du x

Ensuite je parametre l'ascenseur :
dans le formulaire :
Ascenceur.Max = -SupportVignette.Height + Conteneur.Height

Private Sub Ascenceur_Change()
SupportVignette.Top = Ascenceur.Value
End Sub

Le déplacement de l'ascenseur donne donc une valeur négative à
SupportVignette.Top et les vignettes montent !!!!
Impeccable SAUF que, quand la propiété .top atteint une valeur
d'envron - 32000, cela plante : Dépassement de capacité !!!

J'espère avoir été assez clair et si quelqu'un avait une p'tite idée
malgré les grosses chaleurs...........

Bon week et merci de m'avoir lu.

4 réponses

Avatar
Picalausa François
"Daniel AUBRY" a écrit dans le message de news:
44c20aa6$0$9376$
Bonjour à tous,

soit un formulaire contenant :
1 Ascenseur
1 image nommée Conteneur
1 image nommée SupportVignette contenue par Conteneur
x images nommée Vignette(x) contenues par SupportVignette
(loadées au besoin)

Conteneur a les dimensions du formulaire.
SupportVignette à la largeur de Conteneur.
La hauteur de SupportVignette est fonction du x

Ensuite je parametre l'ascenseur :
dans le formulaire :
Ascenceur.Max = -SupportVignette.Height + Conteneur.Height

Private Sub Ascenceur_Change()
SupportVignette.Top = Ascenceur.Value
End Sub

Le déplacement de l'ascenseur donne donc une valeur négative à
SupportVignette.Top et les vignettes montent !!!!
Impeccable SAUF que, quand la propiété .top atteint une valeur
d'envron - 32000, cela plante : Dépassement de capacité !!!



Hello,

Je n'ai pas de reproduction du problème sur la propriété .Top:
Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.Top = -1000000
End Sub
Fonctionne parfaitement!

Par contre, ça m'étonnerais moins que tu ais l'erreur sur la propriété Max
de ta VScrollbar (il s'agit d'un Integer dont son range est de -32768 à
32767)
Une technique fort simple pour palier à ce problème est d'ajuster le
défilement à l'aide d'une constante multiplicative. Pour que l'application
soit la plus agréable à l'utilisation, il faudra ajuster cette constante
"correctement" (qui n'a jamais connu le problème "je click sur la flèche et
rien ne se passe avant un quart d'heure"?)

Voici un exemple qui calcule une telle constante "pour que ça marche", mais
pas pour que ce soit agréable:
Option Explicit

Private mScrollScale As Single

Private Sub Form_Load()
Me.ScaleMode = vbTwips
Picture1.Height = 64535

'En supposant que ça ne dépasse pas la valeur d'un long
Dim MaxRange As Long
Dim MinRange As Long
MaxRange = Picture1.Height
MinRange = 0

If (MaxRange - MinRange) <= 32767 Then
VScroll1.Max = MaxRange - MinRange
mScrollScale = 1
Else
VScroll1.Max = 32767
mScrollScale = (MaxRange - MinRange) / 32767
End If

End Sub

Private Sub VScroll1_Change()
'Rmq : pour une valeur max, top < -32768
Picture1.Top = -mScrollScale * VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
VScroll1_Change
End Sub

--
Picalausa François
Avatar
Daniel AUBRY
Merci François

effectivement quand je fais comme toi dans un projet
vierge : ça marche.

Par contre dans mon projet j'ai écrit :
SupportVignette.Top = Ascenceur.Value * 10
et ça plante

j'ai déclaré une variable :
Dim PositionSupportVignette as Long
et j'ai corrigé :
PositionSupportVignette = Ascenceur.Value * 10
SupportVignette.Top = PositionSupportVignette
et ça plante encore

et j'ai encore corrigé :
PositionSupportVignette = Ascenceur.Value
PositionSupportVignette = PositionSupportVignette * 10
SupportVignette.Top = PositionSupportVignette
et CA MARCHE !!

par contre je ne vois pas pourquoi !!!!!!

Merci du coup de main.

"Picalausa François" a écrit dans le message de news:

"Daniel AUBRY" a écrit dans le message de news:
44c20aa6$0$9376$
Bonjour à tous,

soit un formulaire contenant :
1 Ascenseur
1 image nommée Conteneur
1 image nommée SupportVignette contenue par Conteneur
x images nommée Vignette(x) contenues par SupportVignette
(loadées au besoin)

Conteneur a les dimensions du formulaire.
SupportVignette à la largeur de Conteneur.
La hauteur de SupportVignette est fonction du x

Ensuite je parametre l'ascenseur :
dans le formulaire :
Ascenceur.Max = -SupportVignette.Height + Conteneur.Height

Private Sub Ascenceur_Change()
SupportVignette.Top = Ascenceur.Value
End Sub

Le déplacement de l'ascenseur donne donc une valeur négative à
SupportVignette.Top et les vignettes montent !!!!
Impeccable SAUF que, quand la propiété .top atteint une valeur
d'envron - 32000, cela plante : Dépassement de capacité !!!



Hello,

Je n'ai pas de reproduction du problème sur la propriété .Top:
Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.Top = -1000000
End Sub
Fonctionne parfaitement!

Par contre, ça m'étonnerais moins que tu ais l'erreur sur la propriété Max
de ta VScrollbar (il s'agit d'un Integer dont son range est de -32768 à
32767)
Une technique fort simple pour palier à ce problème est d'ajuster le
défilement à l'aide d'une constante multiplicative. Pour que l'application
soit la plus agréable à l'utilisation, il faudra ajuster cette constante
"correctement" (qui n'a jamais connu le problème "je click sur la flèche
et rien ne se passe avant un quart d'heure"?)

Voici un exemple qui calcule une telle constante "pour que ça marche",
mais pas pour que ce soit agréable:
Option Explicit

Private mScrollScale As Single

Private Sub Form_Load()
Me.ScaleMode = vbTwips
Picture1.Height = 64535

'En supposant que ça ne dépasse pas la valeur d'un long
Dim MaxRange As Long
Dim MinRange As Long
MaxRange = Picture1.Height
MinRange = 0

If (MaxRange - MinRange) <= 32767 Then
VScroll1.Max = MaxRange - MinRange
mScrollScale = 1
Else
VScroll1.Max = 32767
mScrollScale = (MaxRange - MinRange) / 32767
End If

End Sub

Private Sub VScroll1_Change()
'Rmq : pour une valeur max, top < -32768
Picture1.Top = -mScrollScale * VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
VScroll1_Change
End Sub

--
Picalausa François



Avatar
Picalausa François
Hello,

Quand tu écris
Ascenceur.Value * 10
Tu écris:
Effectuer la somme d'un Integer (Ascenceur.Value) par un Integer (10), ce
qui donne pour résultat un... Integer (-32768 à 32767) sauf en cas de
dépassement de capacité (et VB se plaint!)

Donc, ça plante tout comme le plus classique
Dim a As Long
a = 1000*1000

Pour corriger l'erreur, il faut signifier à VB que tu veux que l'opération
se fasse sur un type de donnée plus grand. Par exemple:
SupportVignette.Top = Ascenceur.Value * 10&
(10 est un Long)

--
Picalausa François

"Daniel AUBRY" a écrit dans le message de news:
44c25b1c$0$21621$
Merci François

effectivement quand je fais comme toi dans un projet
vierge : ça marche.

Par contre dans mon projet j'ai écrit :
SupportVignette.Top = Ascenceur.Value * 10
et ça plante

j'ai déclaré une variable :
Dim PositionSupportVignette as Long
et j'ai corrigé :
PositionSupportVignette = Ascenceur.Value * 10
SupportVignette.Top = PositionSupportVignette
et ça plante encore

et j'ai encore corrigé :
PositionSupportVignette = Ascenceur.Value
PositionSupportVignette = PositionSupportVignette * 10
SupportVignette.Top = PositionSupportVignette
et CA MARCHE !!

par contre je ne vois pas pourquoi !!!!!!

Merci du coup de main.

"Picalausa François" a écrit dans le message de
news:
"Daniel AUBRY" a écrit dans le message de news:
44c20aa6$0$9376$
Bonjour à tous,

soit un formulaire contenant :
1 Ascenseur
1 image nommée Conteneur
1 image nommée SupportVignette contenue par Conteneur
x images nommée Vignette(x) contenues par SupportVignette
(loadées au besoin)

Conteneur a les dimensions du formulaire.
SupportVignette à la largeur de Conteneur.
La hauteur de SupportVignette est fonction du x

Ensuite je parametre l'ascenseur :
dans le formulaire :
Ascenceur.Max = -SupportVignette.Height + Conteneur.Height

Private Sub Ascenceur_Change()
SupportVignette.Top = Ascenceur.Value
End Sub

Le déplacement de l'ascenseur donne donc une valeur négative à
SupportVignette.Top et les vignettes montent !!!!
Impeccable SAUF que, quand la propiété .top atteint une valeur
d'envron - 32000, cela plante : Dépassement de capacité !!!



Hello,

Je n'ai pas de reproduction du problème sur la propriété .Top:
Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.Top = -1000000
End Sub
Fonctionne parfaitement!

Par contre, ça m'étonnerais moins que tu ais l'erreur sur la propriété
Max de ta VScrollbar (il s'agit d'un Integer dont son range est de -32768
à 32767)
Une technique fort simple pour palier à ce problème est d'ajuster le
défilement à l'aide d'une constante multiplicative. Pour que
l'application soit la plus agréable à l'utilisation, il faudra ajuster
cette constante "correctement" (qui n'a jamais connu le problème "je
click sur la flèche et rien ne se passe avant un quart d'heure"?)

Voici un exemple qui calcule une telle constante "pour que ça marche",
mais pas pour que ce soit agréable:
Option Explicit

Private mScrollScale As Single

Private Sub Form_Load()
Me.ScaleMode = vbTwips
Picture1.Height = 64535

'En supposant que ça ne dépasse pas la valeur d'un long
Dim MaxRange As Long
Dim MinRange As Long
MaxRange = Picture1.Height
MinRange = 0

If (MaxRange - MinRange) <= 32767 Then
VScroll1.Max = MaxRange - MinRange
mScrollScale = 1
Else
VScroll1.Max = 32767
mScrollScale = (MaxRange - MinRange) / 32767
End If

End Sub

Private Sub VScroll1_Change()
'Rmq : pour une valeur max, top < -32768
Picture1.Top = -mScrollScale * VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
VScroll1_Change
End Sub

--
Picalausa François







Avatar
Daniel AUBRY
Merci et bon dimanche.

"Picalausa François" a écrit dans le message de news:
%
Hello,

Quand tu écris
Ascenceur.Value * 10
Tu écris:
Effectuer la somme d'un Integer (Ascenceur.Value) par un Integer (10), ce
qui donne pour résultat un... Integer (-32768 à 32767) sauf en cas de
dépassement de capacité (et VB se plaint!)

Donc, ça plante tout comme le plus classique
Dim a As Long
a = 1000*1000

Pour corriger l'erreur, il faut signifier à VB que tu veux que l'opération
se fasse sur un type de donnée plus grand. Par exemple:
SupportVignette.Top = Ascenceur.Value * 10&
(10 est un Long)

--
Picalausa François

"Daniel AUBRY" a écrit dans le message de news:
44c25b1c$0$21621$
Merci François

effectivement quand je fais comme toi dans un projet
vierge : ça marche.

Par contre dans mon projet j'ai écrit :
SupportVignette.Top = Ascenceur.Value * 10
et ça plante

j'ai déclaré une variable :
Dim PositionSupportVignette as Long
et j'ai corrigé :
PositionSupportVignette = Ascenceur.Value * 10
SupportVignette.Top = PositionSupportVignette
et ça plante encore

et j'ai encore corrigé :
PositionSupportVignette = Ascenceur.Value
PositionSupportVignette = PositionSupportVignette * 10
SupportVignette.Top = PositionSupportVignette
et CA MARCHE !!

par contre je ne vois pas pourquoi !!!!!!

Merci du coup de main.

"Picalausa François" a écrit dans le message de
news:
"Daniel AUBRY" a écrit dans le message de news:
44c20aa6$0$9376$
Bonjour à tous,

soit un formulaire contenant :
1 Ascenseur
1 image nommée Conteneur
1 image nommée SupportVignette contenue par Conteneur
x images nommée Vignette(x) contenues par SupportVignette
(loadées au besoin)

Conteneur a les dimensions du formulaire.
SupportVignette à la largeur de Conteneur.
La hauteur de SupportVignette est fonction du x

Ensuite je parametre l'ascenseur :
dans le formulaire :
Ascenceur.Max = -SupportVignette.Height + Conteneur.Height

Private Sub Ascenceur_Change()
SupportVignette.Top = Ascenceur.Value
End Sub

Le déplacement de l'ascenseur donne donc une valeur négative à
SupportVignette.Top et les vignettes montent !!!!
Impeccable SAUF que, quand la propiété .top atteint une valeur
d'envron - 32000, cela plante : Dépassement de capacité !!!



Hello,

Je n'ai pas de reproduction du problème sur la propriété .Top:
Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.Top = -1000000
End Sub
Fonctionne parfaitement!

Par contre, ça m'étonnerais moins que tu ais l'erreur sur la propriété
Max de ta VScrollbar (il s'agit d'un Integer dont son range est
de -32768 à 32767)
Une technique fort simple pour palier à ce problème est d'ajuster le
défilement à l'aide d'une constante multiplicative. Pour que
l'application soit la plus agréable à l'utilisation, il faudra ajuster
cette constante "correctement" (qui n'a jamais connu le problème "je
click sur la flèche et rien ne se passe avant un quart d'heure"?)

Voici un exemple qui calcule une telle constante "pour que ça marche",
mais pas pour que ce soit agréable:
Option Explicit

Private mScrollScale As Single

Private Sub Form_Load()
Me.ScaleMode = vbTwips
Picture1.Height = 64535

'En supposant que ça ne dépasse pas la valeur d'un long
Dim MaxRange As Long
Dim MinRange As Long
MaxRange = Picture1.Height
MinRange = 0

If (MaxRange - MinRange) <= 32767 Then
VScroll1.Max = MaxRange - MinRange
mScrollScale = 1
Else
VScroll1.Max = 32767
mScrollScale = (MaxRange - MinRange) / 32767
End If

End Sub

Private Sub VScroll1_Change()
'Rmq : pour une valeur max, top < -32768
Picture1.Top = -mScrollScale * VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
VScroll1_Change
End Sub

--
Picalausa François