mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 2013
-
20 nov. 2007 à 20:16
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 2013
-
22 nov. 2007 à 11:33
Bonjour, question un peu couillon, j'aimerais savoir comment doubler le temps du double clic sur une image s'il vous plait.
Pas trouvé la commande, il doit y en avoir une quand même, ça serait bête sinon, quelqu'un la connait et pourrait me la passer, s'il vous plait?
(j'aimerais empecher de faire un double clic, parce que si on clique 2 fois de suite rapidement sur une image, c'est le double clic qui est pris en compte, et mon 2ème mouse_down est foutu en l'air :) donc je voudrais régler ce temps de double clic à très très court, pour que ça n'arrive jamais quoi :p
Merci!
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 20 nov. 2007 à 21:56
J'ai écrit plus haut :
cantone-toi aux évènements mouseDown et MouseUp en utilisant une variable static et la fonction Timer.
Il va te falloir faire un peu d'acrobatie.
Peut-être y ajouter une variable booléenne, également
Essaye...
Sinon :
Je peux par exemple te donner un code (dont tu devras t'inspirer et que tu devras adapter...) pour distinguer un simple-click d'un double-click.
Il te faudra alors t'en inspirer, pas simplement le copier...
si tu es intéressé, tu dis...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 nov. 2007 à 10:58
oh, et revois tes déclarations, elles ne sont pas toutes typées. très génant pour tes arguments BYREF
(ajoute option explicit en entête de code et tu verras de quoi je parle)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 nov. 2007 à 11:22
option explicit sert à déclencher une erreur pour une variable non déclarée
mais ici avec ton mousedown et (par exemple) xtemp2 en variant pour un single attendu tu devrais avoir un "impossible de passer l'argument ByRef" ou "type byref attendu" ou qqc du genre
bref, voici une proposition sachant que je n'ai que survolé ce topic....
Private Sub Picture2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static iOldButtton%, iNewButtton%
Static lOldTimer&, lNewTimer&
If (iOldButtton = iNewButtton) And (lNewTimer - lOldTimer =
0) Then '******
GoCaption iNewButtton
iNewButtton = 0
End If
'**** zéro c'est peut-être limite.
sinon mettre <=1
'**** et le pb de Timer
est qu'il revient à 0 à minuit donc possible de louper un évènement au changement de jour
End Sub
Sub GoCaption(Button As Integer)
Select Case Button
Case vbLeftButton: Me.Caption = "double
click gauche"
Case vbRightButton: Me.Caption = "double
click droit"
Case vbMiddleButton: Me.Caption = "double
click milieu"
Case Else: Me.Caption = "double
click autre"
End Select
End Sub
++
PCPT [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Vous n’avez pas trouvé la réponse que vous recherchez ?
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 22 nov. 2007 à 11:33
Merci infiniment pour l'aide.
J'ai mis:
Dim xtemp As Single
Dim ytemp As Single
Dim DernierBoutonLeve As Integer
Private Sub Picture2_DblClick()
Picture2_MouseDown DernierBoutonLeve, 0, xtemp, ytemp
End Sub
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.Caption = Trim(Str(Val(Label2.Caption) + 1))
End Sub
Private Sub Picture2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
DernierBoutonLeve = Button
xtemp = X
xtemp = Y
End Sub
Le option explicit est très utile, je pense que je vais l'écrire dès que je commence un nouveau programme, merci beaucoup pour la commande!
Je vais aussi arreter d'écrire des trucs genre dim x,y as integer ou autre, sachant que ce n'est pas propre, et ça plante apparament si on fait byref dessus.
Merci infiniment pour toute cette aide et le temps que vous m'avez accordé, j'ai beaucoup appris, vous etes vraiment super.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 20 nov. 2007 à 20:48
N'utilise donc pas l'évènement double-click, ni même le simple click et cantone-toi aux évènements mouseDown et MouseUp en utilisant une variable static et la fonction Timer.
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 20 nov. 2007 à 20:59
Je n'utilise pas l'évènement double clic du tout justement, cependant si je clique 2 fois assez vite, vb a l'air de le prendre comme si j'avais double cliqué, et mon 2ème mouse_down ne s'execute pas, d'où le problème.
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 20 nov. 2007 à 21:24
exemple simple:
dim compteur as integer
Private Sub picture_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
compteur=compteur+1
Label_Compteur.caption=trim(str(compteur))
End Sub
Si je clique 2 fois sur l'image, assez rapidement, même si je fais un doevents, ou ce que tu veux, il ne me prendra pas en compte mon 2ème clic.
J'aimerais virer ce problème, donc je me disais que le temps, la période de doubleclick devait pouvoir se régler, mais je ne sais pas avec quoi.
Ps: avec MouseUp, ça marche, parce qu'il ne considère pas ça comme un double clic, mais ce que je veux faire, c'est avec MouseDown, pas avec MouseUp...
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 20 nov. 2007 à 22:13
S'il n'y a pas de commande toute faite, je préfère essayer de trouver une solution par moi même dans ce cas, mais je reviendrai dans quelques temps, soit pour dire que j'ai réussi, soit pour te demander, si tu veux bien, des tips :)
Mais pour l'instant, je vais chercher, puisqu'apparament il n'y a pas de commande vb élémentaire pour le faire.
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 22 nov. 2007 à 10:33
Bonjour, désolé pour l'absence, je viens juste de lire ton post PCPT
PCPT: je ne sais pas comment utiliser debugprint, mais je vais chercher sur le site ou sur internet, ça devrait être facile à trouver :)
tu dis aussi qu'on peut diminuer le temps de sensibilité du dblclick, tu sais comment on fait? dans ce cas là, est ce que mon mousedown s'exécutera si l'utilisateur clique deux fois rapidement?
jmfmarques: j'ai essayé de faire un truc qui me renvoie sur mon mousedown si on double clique, comme je pensais le faire au début s'il n'existait pas de méthode pour régler le temps de double clic, mais j'ai un problème il semble, de type:
Il faut que quand on double clique, ca me renvoie sur mousedown, avec le bouton cliqué (important), shift (je ne sais pas ce que c'est, j'ai mis 0 :/), et la position du curseur (sachant que c'est un double clic, je mets la dernière position enregistrée)
Il y a:
-picture2: l'élément sur lequel on clique,
-deux timer (Timer1 et Timer2): qui sont activés pendant un temps très court (que j'essaierai de calquer sur le temps de double clic)
-des variables: - xtemp1,ytemp1 qui donne la position du curseur la dernière fois qu'on a cliqué sur le bouton gauche
- xtemp2,ytemp2 qui donne la position du curseur la dernière fois qu'on a cliqué sur le bouton droit
- Alevebouton1 et Alevebouton2 qui disent si on a relevé le bouton 1, ou le bouton2
ça donne:
Dim xtemp1, ytemp1, xtemp2, ytemp2 As Single
Dim AleveBouton1, Alevebouton2 As Boolean
Private Sub Picture2_DblClick()
If Timer1.Enabled Then Picture2_MouseDown 1, 0, xtemp1, ytemp1
If Timer2.Enabled Then Picture2_MouseDown 2, 0, xtemp1, ytemp2
End Sub
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.Caption = Trim(Str(Val(Label2.Caption) + 1))
If Button = 1 Then
xtemp1 = X
ytemp1 = Y
AleveBouton1 = False
Timer1.Enabled = False
Timer1.Enabled = True
ElseIf Button = 2 Then
xtemp2 = X
ytemp2 = Y
Alevebouton2 = False
Timer2.Enabled = False
Timer2.Enabled = True
End If
End Sub
Private Sub Picture2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
AleveBouton1 = True
ElseIf Button = 2 Then
Alevebouton2 = True
End If
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False
End Sub
Private Sub Timer2_Timer()
Timer2.Enabled = False
End Sub
Cependant quand je compile et double clicke, ça me fait une erreur de type sur le xtemp1 quand il essaie de me renvoyer:
Picture2_MouseDown 1, 0, xtemp1, ytemp1
et ce, alors que je l'ai bien mis en single, et que sa valeur soit directement prise de la position du curseur.
Tu vois pourquoi ça ne marche pas? :/
A la limite, je peux copier ce qu'il y a dans mousedown dans mon dblclick sub, mais sachant que dans mon programme à la base, ce qu'il y a dans mousedown est déjà assez énorme, je préfère éviter et renvoyer dessus plutôt :/
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 22 nov. 2007 à 10:42
Ps: j'ai essayé, sinon ça marche impec si je copie mon mousedown à l'intérieur su sub dblclick, mais comme je l'ai dit, dans le vrai pgme que je suis entrain de faire (pas le code que j'ai copié ci-dessus bien sur), c'est assez gros, donc j'aimerais pouvoir renvoyer sur le mousedown à la place de recopier dans le sub dblclick
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 22 nov. 2007 à 10:56
Oups, j'avais oublier de signaler que j'avais oublié ceci:
Private Sub Picture2_DblClick()
If Timer1.Enabled And AleveBouton1 Then
Picture2_MouseDown 1, 0, xtemp1, ytemp1
End If
If Timer2.Enabled And Alevebouton2 Then
Picture2_MouseDown 2, 0, xtemp2, ytemp2
End If
End Sub
et pour le test sans renvoyer sur mousedown, j'ai remplacé par
Me.Caption = "dbl clic 1 (ou 2, selon le bouton cliqué) "
Label2.Caption = Trim(Str(Val(Label2.Caption) + 1))
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 22 nov. 2007 à 11:16
pour les "timer", tu as complètement raison, j'ai fait vraiment n'importe quoi... (je me dégoute moi même sur le coup d'ailleurs...)
Dim xtemp1, ytemp1, xtemp2, ytemp2 As Single
Dim DernierBoutonLeve As Integer
Private Sub Picture2_DblClick()
If DernierBoutonLeve = 1 Then
Me.Caption = "dbl clic 1"
Label2.Caption = Trim(Str(Val(Label2.Caption) + 1))
' #### Picture2_MouseDown 1, 0, xtemp1, ytemp1
End If
If DernierBoutonLeve = 2 Then
Me.Caption = "dbl clic 2"
Label2.Caption = Trim(Str(Val(Label2.Caption) + 1))
' #### Picture2_MouseDown 2, 0, xtemp2, ytemp2
End If
End Sub
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.Caption = Trim(Str(Val(Label2.Caption) + 1))
If Button = 1 Then
xtemp1 = X
ytemp1 = Y
ElseIf Button = 2 Then
xtemp2 = X
ytemp2 = Y
End If
End Sub
Private Sub Picture2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
DernierBoutonLeve = Button
End Sub
J'ai été super débile...
Sinon, je viens de voir, si on met dim x,y as single, x ne sera pas typé, je viens de voir?
(ça fait un mois que je connais vb, un mois que j'utilise cette notation parce que je l'ai vue sur des programmes ici, et c'est maintenant que je me rends compte qu'en fait ça marche pas... il était temps...)
Sinon, a quoi sert le option explicit? je viens d'essayer de mettre:
option explicit
Dim xtemp1, ytemp1, xtemp2, ytemp2 As Single
mais ça ne marche pas non plus.
Ca ça marche par contre:
Dim xtemp1 As Single
Dim ytemp1 As Single
Dim xtemp2 As Single
Dim ytemp2 As Single
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 22 nov. 2007 à 11:26
J'ai essayé sur un autre programme, j'ai compris, donc que le option explicit m'envoie des erreurs lorsqu'un type n'est pas défini (m'a renvoyé une erreur sur une boucle, je n'avais pas mis le dim i as integer)
par contre ça ne m'envoyait pas d'erreur lorsque j'ai dim x,y as single, alors que le programme n'aime pas ça apparament.