cs_Loonis
Messages postés23Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention30 mars 2007
-
30 mars 2007 à 11:55
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
30 mars 2007 à 19:38
Bonjour,
Voila je voudrai que lors d'un click sur une cible (picturebox) celle ci retrecise jusqu'a disparaitre, je vous donne la portion de code correspondant :
sub click_cible...
For i As Integer = 42 To 0 '42 correspond à la largeur actuel de l'image
For j As Integer = 46 To 0 'idem avec la hauteur
cible.width = i
cible.height = j
Next
Next
cible.visible = False
cible.Enabled = False
Lorsque je clique l'image disparrait instantanement sans retrecir.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 mars 2007 à 12:05
Be oui, celà diminue de 1 à la fois... bien sur..
Le problème n'est pas là mais dans la vitesse de ta machine... qu'il te faut donc ralentir un peu par, par exemple, l'utilisation de la fonction Timer et une boucle sur doevents. Tu peux également marquer une petite pause entre chaque retrécissement par la fonction sleep...
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 30 mars 2007 à 18:58
Salut,
voici le code pour réduire une picturebox en cliquant dessus :
(Pour tester tu as juste mettre une PictureBox s'appelant PictureBox1 et un Timer s'appelant Timer1 et de mettre une image dans PictureBox1)
code :
Public Class Form1
Dim i, j As Integer ' Déclaration des variables integer
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Timer1.Interval = 10 ' on règle le temps entre à chaque rétrécissement de la PictureBox (ici, 10 ms)
Timer1.Enabled = True ' Activation du Timer
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
diminuer_picturebox() ' Toutes les 10 ms on appelle diminuer_picturebox()
End Sub
Sub diminuer_picturebox()
i = i - 1 ' On enlève 1 à la variable i
j = j - 1 ' On enlève 1 à la variable j
PictureBox1.Width = i ' On fixe la nouvelle taille de la picturebox
PictureBox1.Height = j
If i = 0 And j = 0 Then ' Si i = 0 et j = 0
Timer1.Enabled = False ' On désactive le Timer
PictureBox1.Visible = False ' On rends la picturebox invisible
PictureBox1.Enabled = False ' On désactive la picturebox
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = False ' Désactivation du Timer pour être sur qu'il ne démarre pas dés le début
i = PictureBox1.Width ' On initialise la variable i avec la largeur de la picturebox
j = PictureBox1.Height ' On initialise la variable j avec la hauteur de la picturebox
End Sub
End Class, ----
------------------------------------------------------------------------------------------------------------
Si ce message a réglé ton problème >>>>>>>>>> Accepter la réponse
cs_Loonis
Messages postés23Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention30 mars 2007 30 mars 2007 à 12:20
J'ai tester vos 2 hypotheses mais sans succes.Je viens de faire une execution pas à pas et j'ai constater que le programme n'entre même pas même pas dans la boucle.
J'ai donc remplacer mon code par celui ci :
Dim i As Integer = 43
Dim j As Integer = 48
While i > 10
While j > 10
cible.width = i
cible.height = j
i = i - 1
j = j - 1
End While
End While
Celui ci fonctionne par contre comme dit plus haut le programme le fait quasi instantanement.
Je vais essayer l'idée tu timer et je vous dit les resultats.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 30 mars 2007 à 14:25
Tu peux aussi ralentir en trichant dans la boucle :
For i As Integer = 420000 To 10000 '42 correspond à la largeur actuel de l'image
For j As Integer = 460000 To 10000 'idem avec la hauteur
cible.width = Clng(i/10000)
cible.height = Clng(j/10000)
DoEvents
Next
Next
cible.visible = False
cible.Enabled = False
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 mars 2007 à 19:38
Salut à tous,
Comment diable se fait-il qu'avec VB.Net on ne puisse pas faire ce qui, sous VB6 est aussi simple que ceci :
Private Sub Form_Activate()
Me.ScaleMode = vbPixels
End Sub
Private Sub picture1_Click()
Dim couic As Integer, coef As Double
couic = 10
coef = Picture1.Height / Picture1.Width
For i = 1 To Picture1.Width - couic Step couic
On Error Resume Next
Picture1.Move Picture1.Left, Picture1.Top, Picture1.Width - i, Picture1.Height - (i * coef)
start = Timer
While Timer <= start + 0.1
Picture1.Visible = False
Picture1.Visible = True
DoEvents
Wend
If Err Then Picture1.Visible = False: Exit For
Next
End Sub
(Pas de timer et je garde les proportions de ma picturebox)
J'espère que l'équivalent existe avec VB.Net (autrement celà fera une raison de plus pour que je ne l'adopte jamais...)