Retrecir une image lors d'un click

Résolu
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007 - 30 mars 2007 à 11:55
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 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.

Merci de votre aide

12 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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...
3
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
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, ----

(Coloration syntaxique automatique par Kenji)

------------------------------------------------------------------------------------------------------------
Si ce message a réglé ton problème >>>>>>>>>> Accepter la réponse  
3
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
30 mars 2007 à 12:00
Question con mais quand tu fais next, t'es sur que i = i - 1 et j = j -1
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
30 mars 2007 à 12:01
A désolé mais tu vas jusqu'à 0 aussi, alors une taille de 0 c'est,     bah rien
0

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

Posez votre question
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 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.
0
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007
30 mars 2007 à 12:40
L'idée du sleep est correct mais pas adapté à ma situation car elle bloque tout le programme alors qu'il faudrai qu'il continue de tourner en fond.

Merci à vous :)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
30 mars 2007 à 14:23
Juste un mot : je n'ai en aucun cas parlé du timer, qui est un contrôle, mais de la fonction Timer, qui est autre chose
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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 #
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
30 mars 2007 à 14:26
Salut,


Public Class Form1


       Dim i As Integer

       Dim j As Integer


sub click_cible...

                i = 42

                j = 42

                Timer1.Interval = 100

                Timer1.Enabled = True
End Sub


Sub diminuer_picturebox()

         i = i - 1
        
j = j - 1
        
cible.width = i

         cible.height = j

         if i 0 And j 0 Then

              Timer1.Enabled = False

              cible.Visible = False

              cible.Enabled = False

         End If

End Sub


Public Sub Timer_Tick...

        diminuer_picturebox()

End Sub


--------------------------------------------------------------------------------


Si ce message a réglé ton problème >>>>>>>>>>> Accepter la réponse    
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 mars 2007 à 14:26
Pardon, faudrait mettre To 4900 pour arriver jusqu'à 0 pour la taille de l'image

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
30 mars 2007 à 14:31
Bonjour

Utilise un thread ou un Application.doevents.

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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...)
0
Rejoignez-nous