Vb6, double clic [Résolu]

mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 20 nov. 2007 à 20:16 - Dernière réponse : mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention
- 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!
Afficher la suite 

Votre réponse

17 réponses

jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 20 nov. 2007 à 21:56
+3
Utile
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...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 22 nov. 2007 à 10:56
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 22 nov. 2007 à 10:58
+3
Utile
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)

++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 22 nov. 2007 à 11:22
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 22 nov. 2007 à 11:30
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 22 nov. 2007 à 11:33
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de mstarsup5
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 20 nov. 2007 à 20:48
0
Utile
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.
Commenter la réponse de jmfmarques
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 20 nov. 2007 à 20:59
0
Utile
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.
Commenter la réponse de mstarsup5
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 20 nov. 2007 à 21:24
0
Utile
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...
Commenter la réponse de mstarsup5
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 20 nov. 2007 à 22:13
0
Utile
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 :)
Commenter la réponse de mstarsup5
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 21 nov. 2007 à 07:20
0
Utile
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
Commenter la réponse de PCPT
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 22 nov. 2007 à 10:33
0
Utile
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.
Commenter la réponse de mstarsup5
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 22 nov. 2007 à 10:42
0
Utile
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!
Commenter la réponse de mstarsup5
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 22 nov. 2007 à 10:56
0
Utile
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))
Commenter la réponse de mstarsup5
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 22 nov. 2007 à 11:16
0
Utile
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
Commenter la réponse de mstarsup5
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 22 nov. 2007 à 11:24
0
Utile
oups j'ai mis 3 ttt dans les déclarations
bonne journée
Commenter la réponse de PCPT
mstarsup5 527 Messages postés lundi 15 octobre 2007Date d'inscription 10 octobre 2013 Dernière intervention - 22 nov. 2007 à 11:26
0
Utile
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.
Commenter la réponse de mstarsup5

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.