IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Problème selection d'une picturebox


Sujet :

VB 6 et antérieur

  1. #1
    Invité
    Invité(e)
    Par défaut Problème selection d'une picturebox
    Bonjour,
    j'ai un problème au niveau de la sélection des picturebox que je crée via le code.

    Pour les selectionner je pensé que de mettre se code marcherai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If X >= cielc(cieln).Left And X <= (cielc(cieln).Left + 375) And Y > cielc(cieln).Top And Y <= (cielc(cieln).Top + 375) Then
    cielc(cieln).Visible = False
    End If
    End Sub
    Sauf que form_mousedown marche uniquement si je clique sur la form et non un autre objet mis sur la form...

    Ce que je voudrai c'est que lorsque je clique sur une picturebox au hazard je puisse lui faire une action, comme par exemple la faire disparaitre...

    Quelqu'un pourrait m'aider?

    Voici le code qui génère les picturebox:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim L As Integer
    Dim T As Integer
    Dim cieln As Integer
    Dim cielc(0 To 99) As Control
     
    Public Function ciel()
     
    cieln = cieln + 1
     
       Set cielc(cieln) = Controls.Add("VB.PictureBox", "Ciel" & cieln)
        cielc(cieln).Visible = True 'on rend visible la picturebox généré
        cielc(cieln).Height = 375 'taille de la picturebox
        cielc(cieln).Width = 375 'taille de la picturebox
        cielc(cieln).Left = L '
        cielc(cieln).Top = T
        cielc(cieln).FillStyle = 0 'Aspect esthétique de la picturebox
        cielc(cieln).FillColor = &HFE7941 'Aspect esthétique de la picturebox
        cielc(cieln).BackColor = &HFE7941 'Aspect esthétique de la picturebox
        cielc(cieln).BorderStyle = 0 'Aspect esthétique de la picturebox
    End Function
    "cieln" est le numero de la picturebox, qui porte en même temps le numero de la variable.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Cielc_Mousedown(Cieln As Integer,Button As Integer, Shift As Integer, x As Single, y As Single)
     
    End Sub
    Non ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci d'avoir répondu.
    Le code ne marche pas, cela ne viendrai pas de ma condition qui serait peu être fausse?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If X >= cielc(cieln).Left And X <= (cielc(cieln).Left + 375) And Y > cielc(cieln).Top And Y <= (cielc(cieln).Top + 375) Then
    Merci

    Edit: Quand je break sur ton code, il n'y passe pas dessus même si je clique sur la picturebox...
    Dernière modification par Invité ; 31/05/2011 à 20h57.

  4. #4
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Bonjour,

    ca veut dire quoi "le code ne marche pas" ? Tu as une erreur ? Tu n'obtiens pas le resultat attendu ?

    Personnellement je recommande d'utiliser la variable "Index" par defaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Cielc_Mousedown(Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single)
     
    End Sub
    Montre nous le code complet de ta sub, plutot qu'une ligne qui vient d'on ne sait ou
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour ohmonbato,
    quand je dis que le code ne marche pas c'est à dire qu'il ne se passe rien, et que lorsque je break sur le code mousedown il ne s'y arrête pas dessus même si je clique sur l'image.

    Voici le code en entier, j'ai reformuler les variables et commenté pour plus de lisibilité et de compréhension. (quand je parle du "carré" c'est la picturebox)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Dim n As Integer 'recupere le numero de "pierre" en cour. le (0 to 1000)
    Dim pierre(0 To 1000) As Control
    Dim L As Integer 'variable left du carré
    Dim T As Integer 'variable top du carré
     
     
    Private Sub Command1_Click()
    Timer1.Enabled = True 'active le timer
    End Sub
     
    Private Sub form_load()
    L = 120 'position d'origine du carré en left
    T = 120 'idem en top
    End Sub
     
    Private Sub Timer1_Timer()
    roche ' on apelle la fonction roche
    Text1.Text = n 'on recupere le total des cube générés
    If T >= 7320 Then 'si on descend trop bas on coupe
    Timer1.Enabled = False
    End If
    End Sub
     
    'Ce qui ne va pas
    Private Sub pierre_Mousedown(n As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
     If x >= pierre(n).Left And x <= (pierre(n).Left + 375) And y > pierre(n).Top And y <= (pierre(n).Top + 375) Then
    pierre(n).Visible = False
    End If
    End Sub
     
    Function roche() 'fonction qui genere les pierres
     
    n = n + 1 'compteur permettant de recuperer la variable en cour. n = 0 to 1000
     
       Set pierre(n) = Controls.Add("VB.PictureBox", "rocher" & n)
     
        With pierre(n)
     
        .Visible = True 'visible dés le depart
        .Height = 375 'taille du carré
        .Width = 375 'taille du carré
        .Left = L 'placement abscisse
        .Top = T 'placement en ordonée
        .FillStyle = 0 'estetique
        .FillColor = &HFE7941 'estetique
        .BackColor = &HFE7941 'estetique
        .BorderStyle = 0 'estetique
        .Picture = LoadPicture(App.Path & "\textroche1.jpg")
     
        End With
     
        If pierre(n).Left >= 11640 Then 'Si on depasse à droite alors on remet à zero et on descend d'un cran
        L = 120
        T = T + 375
        Else
        L = L + 375
        End If
    End Function
    Merci

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    J'avoue que je comprends deja mieux avec le code complet.

    Tu ne creais pas des picturebox appelees rocher(index) mais des picturesbox appelles pierre1, pierre2, etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Dim n As Integer 'recupere le numero de "pierre" en cour. le (0 to 1000)
    Dim L As Integer 'variable left du carré
    Dim T As Integer 'variable top du carré
     
     
    Private Sub Command1_Click()
    Timer1.Enabled = True 'active le timer
    End Sub
     
    Private Sub form_load()
    L = 120 'position d'origine du carré en left
    T = 120 'idem en top
    End Sub
     
    Private Sub Timer1_Timer()
    DoEvents
    roche ' on apelle la fonction roche
    Text1.Text = n 'on recupere le total des cube générés
    If T >= 7320 Then 'si on descend trop bas on coupe
    Timer1.Enabled = False
    End If
    End Sub
     
    'Ce qui ne va pas
    Private Sub rocher_Mousedown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
     If x >= rocher(Index).Left And x <= (rocher(Index).Left + 375) And y > rocher(Index).Top And y <= (rocher(Index).Top + 375) Then
    rocher(n).Visible = False
    End If
    End Sub
     
    Function roche() 'fonction qui genere les pierres
     
    n = n + 1 'compteur permettant de recuperer la variable en cour. n = 0 to 1000
     
       Load rocher(n)
     
        With rocher(n)
     
        .Visible = True 'visible dés le depart
        .Height = 375 'taille du carré
        .Width = 375 'taille du carré
        .Left = L 'placement abscisse
        .Top = T 'placement en ordonée
        .FillStyle = 0 'estetique
        .FillColor = &HFE7941 'estetique
        .BackColor = &HFE7941 'estetique
        .BorderStyle = 0 'estetique
        .Picture = LoadPicture(App.Path & "\textroche1.jpg")
     
        End With
     
        If rocher(n).Left >= 11640 Then 'Si on depasse à droite alors on remet à zero et on descend d'un cran
        L = 120
        T = T + 375
        Else
        L = L + 375
        End If
    End Function
    Par contre je ne suis pas sur que tu puisses creer plus de 256 controles avec le meme nom, n'ayant pas VB sur cette machine, je n'ai pas verifie.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  7. #7
    Invité
    Invité(e)
    Par défaut
    merci pour ta réponse, je crée des picturebox appelées rocher1, rocher2, rocher3... pour que les noms ne se ressemblent pas et que je puisse en faire plusieurs c'est pour çela.

    Parcontre je suis pas sur de tout comprendre à ton code. Tu as mis: Load rocher(n)

    vis à vis de mon code original c'est de pierre(n) ou de rocher(n) que tu parle?

    Ducoup tu ne crée plus de picturebox car rocher(n) n'est plus définie.
    Donc pour savoir de quelle variable tu parle, si c'est du nom de la picturebox ou si c'est du nom du control?

    Car il manque quelques lignes du code que je t'ai fournis qui fait qu'il ne marche pas. Donc pour pas m'embrouiller.

  8. #8
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    sur la feuille en mode creation, j'ai un controle picturebox appele "rocher" (ce serait mieux d'ailleurs de l'appeler PicRocher pour eviter toute confusion) avec sa propriete index = 0
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  9. #9
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 078
    Points : 17 040
    Points
    17 040
    Par défaut
    Salut

    Voir cette discussion Définir un événement à un contrôle créé dynamiquement
    En conclusion il n'est pas possible d'attribuer plus d'un d'évènement pour un objet ajouté dynamiquement avec Controls.Add

    Le plus simple, comme le laisse entendre OhMonBato, places un contrôle Image avec Index = 0 et dans ton code tu en ajoutes par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Load MonImage(MonImage.Count)
    Reste que dans les évènements de l'image, il ne sera pas évident de savoir que pour l'image N°index il faut faire tel ou tel chose.

    Motif de l'édit: je suis arrivé trop tard, mais j'ai cherché des solutions ce qui explique le temps passé à trouver une solution avec .Add plutôt que par index (plus de 3/4 heure)
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Invité
    Invité(e)
    Par défaut
    ok ok, maintenant c'est bon ça les génères. J'ai pu en generer 640 (j'ai pas fait plus)
    Parcontre la sélection ne marche toujours pas mais cette fois ci il break dessus! On avance, ce qui ne va pas c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If x >= picrocher(Index).Left And x <= (picrocher(Index).Left + 375) And y > picrocher(Index).Top And y <= (picrocher(Index).Top + 375) Then
    Pourtant là je ne vois pas ce qui cloche dans la condition...le scalemod de la picture est en twip et pareil pour la form donc soit 375 par coté.

    edit: progelect, merci d'avoir cherché une solution, tout comme ohmonbato ou encore Geo2A. ça fait déjà quelques jours que je planche dessus sans trouver de réponse... ça titille pas mal ce genre de situation je doit dire... ^^'
    Dernière modification par Invité ; 31/05/2011 à 23h09.

  11. #11
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 078
    Points : 17 040
    Points
    17 040
    Par défaut
    dans quel Sub évènement as tu cette ligne de code ? peux tu nous mettre sa déclaration.
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  12. #12
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Le X et Y sont relatifs au controle picture, donc commencent a 0.
    Tu n'as pas a tester si les coordonnees de ta souris sont dans le picture box puisque si l'evenement se declenche c'est que tu as clique dedans.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  13. #13
    Invité
    Invité(e)
    Par défaut
    progelect, le code ce situe ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub picrocher_mousedown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
     If x >= picrocher(Index).Left And x <= (picrocher(Index).Left + 375) And y > picrocher(Index).Top And y <= (picrocher(Index).Top + 375) Then
    picrocher(n).Visible = False
    End If
    End Sub
    j'ai juste renommer rocher par picrocher (voir code de ohmonbato).

    Ohmonbato, je suis d'accord avec toi, mais je pensé qu'en faisant ceci il ferai la liaison entre les coordonnées qu'il clique et celles d'un des picrocher... Comme ça on peut relever sur quel picrocher on clique et lui faire une action.

  14. #14
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Mais tu sais sur lequel tu cliques puisque tu as la propriete Index !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub picrocher_mousedown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
    msgbox "J'ai clique sur la picrocher numero " & index
    End Sub
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je viens de comprendre ma grosse erreur avec ma condition. Ducoup ça marche enfin!
    Merci beaucoup à vous 3 de m'avoir aidé. Je vais pouvoir avancer maintenant.

    Bonne soirée, et à bientot

  16. #16
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    si ton probleme est resolu, merci de cliquer sur le bouton en bas de cette page.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Problème selection d'une ligne
    Par rob1son76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/03/2015, 16h14
  2. Problème select selon une date datagridview
    Par nawaraa dans le forum VB.NET
    Réponses: 14
    Dernier message: 07/05/2013, 11h56
  3. problème Select dans une classe
    Par sky88 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/10/2010, 14h03
  4. Réponses: 5
    Dernier message: 18/02/2008, 13h48
  5. Problème SELECT sur une vue sous FB 2.0
    Par Pepere72 dans le forum SQL
    Réponses: 18
    Dernier message: 20/10/2006, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo