Afficher une image grace à un OptionButton [Résolu]

Signaler
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012
-
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012
-
Bonjour à tous,

Grâce à l'ami pcfoutu, son astuce d'indexer des optionbuttons m'a fait gagner du temps et de la place dans mes codes.

Comme chaque bouton avait une caption, en cliquant celui-ci, je faisais afficher le caption dans un label nommé "REP". C'était parfait !
En gros, j'ai fait ça :
Private Sub Q_Click(Index As Integer)
 For i = 0 To 4
   If Q(i).Value = True Then
     Q(i).BackColor = &HFFFF&
     REP = Q(i).Caption
   Else
     Q(i).BackColor = &H8000000F
   End If
 Next
End Sub

Jusque là, tout va bien, mais si je veux faire afficher une image,
voulez-vous me dire comment faire parce que là, je piétine ?


Merci d'avance.

Cordialement, Masterfree

21 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Je trouve que vous vous compliquez bien la vie alors que VB6 est si pratique :
Regarde (avec l'exemple que je t'ai donné dans ton autre discussion) ce que fait ceci, masterfree :

Private Sub Form_Activate()
  Me.KeyPreview = True
  For i = 0 To 3
    Q(i).BackColor = vbYellow
    Q(i).Value = False
  Next
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
  Select Case Val(Chr(KeyAscii))
  Case 0 To 3
   Q(Val(Chr(KeyAscii))).Value = True
  End Select
End Sub

Private Sub Q_Click(Index As Integer)
 For i = 0 To 3
   If Q(i).Value = True Then
     Q(i).BackColor = vbRed
   Else
     Q(i).BackColor = vbYellow
   End If
 Next
End Sub


Et fais ce que tu veux ensuite au clavier (-touches 0 à 3) ou à la souris (comme tu veux tu "choises ")
Ceci étant dit :
1) on mélange ici tout, à traiter deux choses (d'un côté le clavier et de l'autre les images) et ce n'est pas bon du tout, sur un forum
2) pour en revenir au clavier : il y a quand même mieux que de faire tout intercepter par le Form (ce qui peut priver de nombreuses autres choses), non ?
Je préfèrerais quant à moi l'utilisation de l'Ampersand/raccourci, mais alors avec ALT + A à D
Voilà !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour,

Tu peux mettre l'adresse de l'image dans le Tag des CommandButton ou des OptionButton.
Si tu veux afficher une image dans un bouton,
alors intéresses toi aux propriétés Style et Image des boutons.

Cheyenne
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012

J'ai essayé autre chose, càd indexé les images à afficher, et, apparemment, ça marche !
Comme il y autant d'images que d'OptionButton, il n'y a pas eu beaucoup à modifier.
Private Sub Q_Click(Index As Integer)
 For i = 0 To 4
   If Q(i).Value = True Then
     Q(i).BackColor = &HFFFF&
'REP est le cadre où doit s'afficher l'image     
    REP = Img(i)
   Else
     Q(i).BackColor =  &H8000000F
   End If
 Next
End Sub

Par contre, tu me parles de Tag des CommandButton , c'est quoi exactement ça ?

En outre, si je veux combiner les OptionButtons avec le clavier numérique, je n'arrive pas à associer les OptionButtons indexés !
Avant, je faisais Option par Option, et ça marchait très bien.
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyNumpad1
            If Img1 Then
               REP  = Img1
               L = "1"
               Q1.BackColor = &HFFFF&
               Q2.BackColor = &H8000000F
               Q3.BackColor = &H8000000F
               Q4.BackColor = &H8000000F
               Q5.BackColor = &H8000000F
               End If

        Case vbKeyNumpad2
            If Img2 Then
               REP = Img2
...                   

Mais là, c'est un peu plus compliqué pour moi !
Tu peux me dire comment faire ?
Merci d'avance
Cordialement, Masterfree
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonsoir

Grâce à l'ami pcfoutu


pour afficher une image il te faut un picturebox
ou une image control
tu peux garder les addresses des images dans un
tableau dont l'index correspond à l'index
des optionbuttons
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012

C'est ce que j'ai fait ! J'ai indexé autant de fois qu'il y a des OptionButtons !

Cordialement, Masterfree
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
et le problème est résolu ?
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012

Pas du tout, parce que si tout est bien indexé, mon prb de "Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)" n'est pas résolu pour autant !

Je n'arrive pas à le résoudre seul.

Cordialement, Masterfree
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,
Pas parfaitement clair, tout cela ! ==>> Questions :
1)
Tes images sont-elles simplement externes (chemins dans un dossier)
ou
Sont-elles déjà insérées sur ton Form en mode création (propriété picture). Et si oui : dans quels types de contrôles (Image ou PictureBox) et avec propriété Visible = True ou False ?

2) explique le mécanisme : tu veux quoi, en cliquant sur un bouton d'option ? l'afficher là où elle est ou l'afficher ailleurs (et sur quel type de contrôle ? Image ou PictureBox ?)

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

Pour ton autre affaire (utilisation du clavier numérique) :
La règle est toujours la même dans toutes les applis, groupes indexés ou non : déplacements d'un contrôle à l'autre par la touche tab. Clic par la touche ENTER
J'appelle à ce sujet ton attention sur la propriété TabIndex des contrôles (intexés ou non). Elle permet de déterminer l'ordre de "parcours" d'un contrôle à l'autre (et s'appelle tabindex car c'est toujours par touche tab)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Salut,

Ce ne serait pas "Q(1).BackColor &HFFFF&" au lieu de "Q1.BackColor &HFFFF&" ?


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Re,

Le Tag d'un contrôle :
Regardes dans les propriétés de ton contrôle.
Tu as une ligne Tag, tu peux y stocker une chaine de caractères. Si c'est une valeur tu la récupères par Val(objet.Tag) ou autre fonction de conversion.

La solution de ShayW est plus élégante pour récupérer l'adresse de l'image. Mais comme le demande ucfoutu, où se trouve ces images ?

Cheyenne
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012

Ce ne serait pas "Q(1).BackColor = &HFFFF&" au lieu de "Q1.BackColor = &HFFFF&" ?

Pas du tout ! Ca, c'est résolu !

Pour te répondre ucfoutu , l'affichage des images quand une option est cliquée se déroule très bien.

Pour ton autre affaire (utilisation du clavier numérique) :
La règle est toujours la même dans toutes les applis, groupes indexés ou non : déplacements d'un contrôle à l'autre par la touche tab. Clic par la touche ENTER
J'appelle à ce sujet ton attention sur la propriété TabIndex des contrôles (indexés ou non). Elle permet de déterminer l'ordre de "parcours" d'un contrôle à l'autre (et s'appelle tabindex car c'est toujours par touche tab)

Oui, j'ai bien compris ça et c'est de cette manière que je procède.

Seulement, il n'y a que les flèches du clavier qui permettent de passer à l'une ou l'autre OptionButton, mais pas moyen (j'y arrive pas) de faire la même navigation avec les touches numériques (1, 2, 3, 4, 5) pour les OptionButtons indexés (0,1,2,3,4) !
Tu comprends ce que je veux dire ?

Maintenant, je dois jouer avec
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyNumpad1
            If Img1 Then
               REP   = Img1

Je ne sais pas faire pour indexer tout ça, en supposant qu'il y ait 5 images !


Cordialement, Masterfree
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Re,

Ohhhh, où se trouvent ces images ?

Si je regarde ton croquis, je crois comprendre que tu as plusieurs images liées à chaque OptionButton.

Ou n'est-ce qu'un exemple de différents formats d'images, sachant qu'en "appelant" par le clavier numérique un OptionButton, tu n'envoies qu'une seule image dans un contrôle.
(Celle correspondant à l'OptionButton validé)
dont l'adresse de cette iamge est contenue soit dans le Tag de l'OptionButton soit dans un tableau dont l'indice est le même que celui de l'OptionButton "cliqué".
Mais quel est ce contrôle qui reçoit l'image ?
Tu as cité un CommandButton, dans ce cas il faut mettre le Style à 2 - Graphical et indiquer dans la propriété Picture (ou par code) l'adresse de l'image.

Cheyenne
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
mais peut etre explique (pas par code)
ce que tu veux faire
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012

Justement, c'est qu'aucune touche numérique (comme je l'avais mis auparavant) n'est fonctionelle.
Bien que la TabIndex de chaque OptionButton soit bien spécifiée, il n'y a que les flèches qui réagissent.
Et je confirme, les images et les OptionButtons sont dans un tableau.

Le contrôle qui reçoit l'image ?
J'ai pas tout compris là !
C'est simplement un contrôle "image" que j'ai renommé !
C'est ça que tu veux savoir ?

En tout cas, lorsque je clique sur une Option indexée comme les images, tout va bien !

Maintenant, c'est pas primordial mais utile, si je veux faire la même navigation par chiffre comme avec les flèches, la syntaxe de la proc "Form_KeyDown" m'est plus difficile à écrire.

Pour Infos, ce n'est pas moi qui ait parlé de "CommandButton", j'ai simplement relevé ce nom dans un post qui m'a répondu !

Cordialement, Masterfree

Salut,

Pas du tout ! Ca, c'est résolu !

Désolé j'ai pas vu que c'était ton ancien code.

Déjà pour la couleur et gestion de ton pavé numérique j'aurais fait comme ça:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode > 95 And KeyCode < 101 Then Q(KeyCode - 96).SetFocus
End Sub

Private Sub Form_Load()
Me.KeyPreview = True
End Sub

Private Sub Q_GotFocus(Index As Integer)
For i = 0 To 4
   If i = Index Then
      Q(i).BackColor = vbYellow
   Else
      Q(i).BackColor = Me.BackColor
   End If
Next i
End Sub


On continue?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

Ou plutôt, comme t'avais fait:
Private Sub Q_GotFocus(Index As Integer)
For i = 0 To 4
   If i = Index Then
      Q(i).BackColor = vbYellow
      REP = Q(i).Caption
   Else
      Q(i).BackColor = Me.BackColor
   End If
Next i
End Sub


Avec l'évènement "GotFocus" la propriété "Q(i).Value" est forcément à "True" et tu peux les gérer uniquement en lui donnant le focus.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

Salut UC,
  Select Case Val(Chr(KeyAscii))
  Case 0 To 3
   Q(Val(Chr(KeyAscii))).Value = True
  End Select

Bien vu aussi...
Pour le ALT + A à D, je préférerais encore lui ajouter la fonctionnalité de la reconnaissance vocale
Tu n'as pas à appuyer sur quoi que ce soit


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
55
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
14 juillet 2012

Ceci étant dit :
1) on mélange ici tout, à traiter deux choses (d'un côté le clavier et de l'autre les images) et ce n'est pas bon du tout, sur un forum
2) pour en revenir au clavier : il y a quand même mieux que de faire tout intercepter par le Form (ce qui peut priver de nombreuses autres choses), non ?
Je préfèrerais quant à moi l'utilisation de l'Ampersand/raccourci, mais alors avec ALT + A à D


Merci les gars de votre intervention et de votre aide. Ca me touche beaucoup !

Quoiqu'il en soit, comme le souligne ucfoutu, mon 1er problème était l'indexation des OptionButtons et des images.
Cette affaire a été rapidement résolue, malgré tout, je reçois encore de l'aide à ce sujet malgré un autre prb soulevé.
C'est vrai que c'est pas bon pour le forum... et surtout pour moi, parce que j'aurais dû ouvrir un autre post pour ça ! Ca m'éviterait de m'emmêler les pinceaux !
Néanmoins, c'est une très bonne initiative mais qui ne peut plus m'apporter d'aide effective.

Par contre, toujours en relation avec les OptionButton, là où j'avais des lacunes sérieuses, c'était au niveau du pavé numérique (et seulement ça ! )

Acive souligne les fonctions "ALT + A à D" puis enchaîne sur la reconnaissance vocale !
Entre nous, est-ce j'ai demandé votre aide pour ces 2 fonctions ?
Cela serait certainement utile pour un programmeur avancé, mais malheureusement, j'en suis pas à ce niveau. Je me contente de choses qui me sont accessibles et simples.

Mais ce que vous m'avez donné (code pour le pavé numérique), je vais l'intégrer dans mon code et tenter de le faire marcher comme il faut.

Merci encore beaucoup de votre aide.

Cordialement, Masterfree

Bon... juste pour éviter les équivoques:
Acive souligne les fonctions "ALT + A à D" puis enchaîne sur la reconnaissance vocale !
Entre nous, est-ce j'ai demandé votre aide pour ces 2 fonctions ?

La petite discussion "ALT + A à D" concernait uniquement UC (UCfoutu) et moi, c'est marqué.

En ce qui concerne ton 1er problème qui était l'indexation des OptionButtons et des images, je ne peux t'orienter vers nos amis de chez MSDN, car ce sont eux les concepteurs de la plate-forme sur laquelle tu travailles.
Tu ne seras jamais mieux servi que par les concepteurs.

Bon courage

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

je ne peux que t'orienter
Pardon


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique