HSrollBar avec PictureBox

cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005 - 27 mai 2004 à 21:28
cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005 - 28 mai 2004 à 20:47
salut à tous
:( J'ai une image plus grande que ma pictureBox je veux donc mettre un HSrollBar et un VScrollBar mais je ne sais pas quel code leur donner pour faire bouger l'image. Je pense que le début de code est bon mais je ne sais pas la fin.

Private Sub HScroll1_Change()
HScroll1.Min = 0
HScroll1.Max=1000
HScroll1.LargeChange=100 HScroll1.SmallChange = 1
???
End Sub

Qui en pense quoi ?
Doumai60

9 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 mai 2004 à 21:36
Moi pour cela je met deux pictureboxes l'une dans l'autre et je charge l'image dans la picturebox intérieur.
Ensuite, il n'y à plus qu'a faire des 'Move' de la picturebox intérieur sur les EVT des scrollbars

Christophe R.
0
cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005
27 mai 2004 à 21:56
Merci Christophe je vais essayer :big)
Doumai60
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
28 mai 2004 à 01:57
Effectivement avec 2 picture box c plus facile, mais ca alourdi le code!!
je te conseille d'utiliser la méthode paintpicture et d'utiliser un objet StdPicture afin de stocké l'image en mémoire.
Ensuite tu attriubue le max de la HScroll1 en fonction de la largeur de l'image en mémoire - la largeur du picturebox
Apres dans l'événement Change de la HScroll1 : il suffit de redessiner l'image en fonction de sa valeur!!!

Ci dessous un petit exemple avec la bar Horizontale, c'est peu etre pas evident a prendre en main, mais une fois que tu aura bien compris le code, cela te fera gagner du temp, et ton code sera plus claire

Dim Pic As StdPicture 'Stocke l'image

Private Sub Form_Load()
Picture1.ScaleMode = 6 'mm car stdpicture/100 donne des mm
Picture1.AutoRedraw = True
Set Pic = LoadPicture("c:\image.jpg") 'charge l'image dans pic
Picture1.PaintPicture Pic, 0, 0 'affiche image taille réel
HScroll1.Max = (Pic.Width / 100) - Picture1.ScaleWidth 'attribue le max de la bar
End Sub

Private Sub HScroll1_Change()
Picture1.Cls 'efface l'image
Picture1.PaintPicture Pic, -HScroll1.Value, 0 'redessine en fonction de la value de la bar
End Sub



++
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
28 mai 2004 à 02:04
Ci dessous un exemple avec 2 pictures Box au cas ou!!!!
Tj avec la baer Horizontale et picture 2 doit etre insérer dans picture1!!

Private Sub Form_Load()
'Place picture2 dans picture1Picture2.Left 0: Picture2.Top 0
Picture2.AutoSize = True 'Taille reel de l'image au chargement
Picture2.Picture = LoadPicture("c:\image.jpg") 'charge l'image dans picture2
HScroll1.Max = Picture2.Width - Picture1.ScaleWidth  'attribue le max de la bar
End Sub

Private Sub HScroll1_Change()
'deplace picture2 dans picture1
Picture2.Left = -HScroll1.Value
End Sub


voila ++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005
28 mai 2004 à 10:31
Merci pcpunch
Qu'entends-tu par " Picture2 doit être inseré
dans Picture1"?
Tu veux dire par dessus picture1?
Doumai60
0
cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005
28 mai 2004 à 13:33
Pcpunch
1) Annule la dernière question.

2) J'ai réussi comme tu m'as dis avec 2 pictureBox.

3) Le problème que j'ai maintenant, c'est que l'image étant trop grande, je ne vois sur mon écran que son côté gauche (j'entends de l'image) et si j'utilise le HScrollBar ce n'est pas le côté droit de l'image qui défile vers la gauche, mais le côté gauche qui défile vers la droite. En claire je ne vois pas le reste de l'image puisque le défilement est du mauvais côté.

Donc au défilement avec le HScrollBar je vois apparaître à gauche la PictureBox1

Suis-je claire :approve) :question)
Doumai60
0
cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005
28 mai 2004 à 15:54
Pcpunch
J'ai essayé ta méthode PainPicture et c'est exactement ce que je veux. Je l'ai essayé avec ton HScroll1 et ça fonctionne super.
Mais moi étant compliqué :clown) j'ai encore un hic, car j'ai voulu rajouter une VScroll1 mais là elle prend les valeurs de HScroll1. c'est à dire quelle fait défiler horizontalement à la place de verticalement
Dans Private Sub Form_Load j'ai rajouté cette ligne:

VScroll1.Max = (Pic.Height / 100) - Picture1.ScaleHeight

Et j'ai créée un:

Private Sub VScroll1_Change()
Picture1.Cls
Picture1.PaintPicture Pic, -VScroll1.Value
End Sub

mais comme je te dis, ça ne défile pas verticalement. :sad)
Aurais-tu une idée
Doumai60
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
28 mai 2004 à 19:58
Evidement !!! dans la sub de la Vscroll1 il faut jouer avec l'axe y et non x, (axe Y c le top)

Picture1.PaintPicture Pic, 0, -VScroll1.Value

de plus il faut aussi gerer l'axe x car si tu deplace a droite, et ensuite tu descend ben l image sera redessiner a partir de sa gauche !!!!

voila le code rectifier, avec les 2 barres de défilements!!!

Dim Pic As StdPicture 'Stocke l'image

Private Sub Form_Load()
Picture1.ScaleMode = 6 'mm car stdpicture/100 donne des mm
Picture1.AutoRedraw = True
Set Pic = LoadPicture("c:\image.jpg") 'charge l'image dans pic
Picture1.PaintPicture Pic, 0, 0 'affiche image taille réel
HScroll1.Max = (Pic.Width / 100) - Picture1.ScaleWidth 'attribue le max de la bar
VScroll1.Max = (Pic.Height / 100) - Picture1.ScaleHeight
End Sub

Private Sub HScroll1_Change()
Picture1.Cls 'efface l'image
Picture1.PaintPicture Pic, -HScroll1.Value, -VScroll1.Value 'redessine en fonction de la value de la bar
End Sub

Private Sub VScroll1_Change()
Picture1.Cls 'efface l'image
Picture1.PaintPicture Pic, -HScroll1.Value, -VScroll1.Value 'redessine en fonction de la value de la bar
End Sub


++ bon coding
0
cs_Doumai60 Messages postés 45 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 19 janvier 2005
28 mai 2004 à 20:47
8-) 8-) Merci à toi Pcpunch tout fonctionne bien :big) :big)
Doumai60
0
Rejoignez-nous