neotechno69
Messages postés4Date d'inscriptiondimanche 10 décembre 2000StatutMembreDernière intervention22 mai 2008
-
20 mai 2008 à 18:37
neotechno69
Messages postés4Date d'inscriptiondimanche 10 décembre 2000StatutMembreDernière intervention22 mai 2008
-
22 mai 2008 à 17:23
Bonjour a tous, voila j ai une petite question:
jaimerai effectuer une operation ( ici un bete label.caption pour
l exemple) lorsque une touche est enfoncée,donc juste apres
que l on appuie dessu et que l operation s'arrete lorsque la touche n
est plus pressée.
Private Sub form_Keydown(KeyCode As Integer, Shift As Integer)
'quand on presse sur la touche
Select Case KeyCode
Case vbKeyQ
Label5.Caption = "touche Q enfoncée."
Case vbKeyZ
Label6.Caption = "touche Z enfoncée"
Case vbKeyS
Label7.Caption = "touche S enfoncée"
Case vbKeyD
Label8.Caption "touche D enfoncée"> voila j arrive a f aire lorsqu'on appuie, mais pas quand la touche reste enfoncée.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 20 mai 2008 à 19:43
Salut
Et non, je ne pense pas que tu puisses le détecter.
KeyUp ne se déclenche qu'à la disparition, logique.
Tu peux créer autant de variable dans ton programme que de Touche, mettre à True lors du KeyDown et à False lors du KeyUp, et afficher l'état de ces touches dans ton Label grace à un Timer
Je pense qu'il va falloir t'inspirer des "keylogger" ou "keyploger" que tu trouveras parmi les sources.
Là, cycliquement avec un Timer, tu vas interroger l'état de chaque touche.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 mai 2008 à 01:08
Re
Oui, à la limite, si ce n'est que pour afficher quelle touche est appuyée.
Pas besoin de "Select Case" : un seul Label3.Caption = "" suffira - à toi de voir si l'effacement de ce Label peut aussi intervenir lors du retrait du doigt d'une autre touche non listée.
Mais je pense que ton but n'est pas d'afficher des textes ...
Donc, tu voudras surement tester quelle touche est actuellement appuyée, et ce, autre part dans ton programme, non ?
Exemple :
Dans la partie déclaration de ta forme :
Dim maTouche As Integer
Dans ton KeyDown :
Select Case KeyCode
Case vbKeyQ, vbKeyZ, vbKeyS, vbKeyD
maTouche = KeyCode
Case Else
maTouche = 0
End Select
Dans ton KeyUp :
maTouche = 0
Dans ton programme, quelque part où tu as besoin de savoir quelle touche est actuellement appuyée :
If maTouche = vbKeyQ Then ...
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
neotechno69
Messages postés4Date d'inscriptiondimanche 10 décembre 2000StatutMembreDernière intervention22 mai 2008 22 mai 2008 à 17:23
Merci a vous de vos réponse, j'ai trouvé la solution pour mon problème grâce a vous.Enfaite je me suis rendu conte que je devais faire un événement quand j appuyai sur la touche, et faire cet événement inverse quand je relâchai la touche.Par exemple
afficher la touche "z" est enfoncée, puis quand la touche remonte afficher "". et ceci fonctionne pour mon programme( j ouvre et je ferme une sortie d une carte d interface).
Private Sub form_Keydown(KeyCode As Integer, Shift As Integer)
'quand on presse sur la touche
Select Case KeyCode
Case vbKeyQ
Label5.Caption = "touche Q enfoncée"
SetIOchannel (1)
Case vbKeyZ
Label6.Caption = "touche Z enfoncée"
SetIOchannel (2)
Case vbKeyS
Label7.Caption = "touche S enfoncée"
SetIOchannel (3)
Case vbKeyD
Label8.Caption = "touche D enfoncée"
SetIOchannel (4)
End Select
End Sub
Private Sub form_KeyUp(KeyCode As Integer, Shift As Integer)
'quand la touche remonte
Select Case KeyCode
Case vbKeyQ
ClearIOchannel (1)
Label5.Caption = ""
Case vbKeyZ
ClearIOchannel (2)
Label6.Caption = ""
Case vbKeyS
ClearIOchannel (3)
Label7.Caption = ""
Case vbKeyD
ClearIOchannel (4)
Label8.Caption = ""
End Select
End Sub
Donc on peut fermer ce sujet, et merci grâce a vos idées je suis parvenu exactement a faire ce que je voulais.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 mai 2008 à 10:35
PS : Pour que ta forme continue à 'voir' les touches avant les composants qui sont dessus (boutons, list ...), pense à mettre la propriété KeyPreview de ta forme à True
Pour facilité la recherche d'autres membres qui rechercheraient la même info, merci de valider (avec le bouton Réponse acceptée) la ou les réponses qui te semblent correctes et t'ont aidées.