Vb6, double clic

Résolu
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 - 20 nov. 2007 à 20:16
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 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!

17 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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...
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 nov. 2007 à 10:56
salut,

tu utilises tes 2 timers comme des variables, ils sont inutiles!

et à la relecture, jmfmarques a bien mis en évidence la FONCTION timer, pas le control

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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)

++
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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&
    
    iOldButtton = iNewButtton: iNewButtton =
Button
    lOldTimer = lNewTimer: lNewTimer = Fix(Timer)
    
    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
3

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 nov. 2007 à 11:30
déclaration = dim XXX
typage = as YYY

un non typé l'est implicitement en Variant

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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.
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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...
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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.

Merci pour la réponse si rapide en tout cas :)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 nov. 2007 à 07:20
salut,
mets des debug.print sur les evènements down up click dblclick, tu verras pourquoi çà bloque

en attendant et plus simplement tu peux aussi modifier (options régionales par code) le temps de sensibilité du dblclick

si tu veux vraiment passer uniquement par le up tu seras en effet obligé de... bricoler
++

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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 :/

Merci.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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

Merci pour l'aide!
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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))
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 nov. 2007 à 11:24
oups j'ai mis 3 ttt dans les déclarations
bonne journée
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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.
0
Rejoignez-nous