IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

OnMouseDblClick et OnMouseDown


Sujet :

Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Points : 107
    Points
    107
    Par défaut OnMouseDblClick et OnMouseDown
    Sur un TPaintBox, je voudrais provoquer DEUX actions différentes lorsque ces deux évènements surviennent.

    C'est OnMouseDblClick qui me pose problème.
    L'action corrspondante est bien exécutée, mais aussitôt après celle de OnMouseDown.

    Existerait-il un moyen de l'invalider dans le code de OnMouseDblClick

  2. #2
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    bonjour
    il me semble que l'ordre des actions est toujours identique:
    OnmouseDown
    OnmouseClick
    OnMouseUp
    et pour le OnMouseDblClick on refait les 3 actions précédentes..

    donc à mon avis si on veut utiliser le OnmouseClick ou le OnMouseDblClick, il faut utiliser une variable configurée dans le OnmouseDown.

    autre solution: utiliser le bouton de droite par exemple...

    à plus

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    J'ai eu le même problème récemment. J'ai choisi d'utiliser la fonction TimeGetTime de l'unité MMSytem pour mesurer le temps et décider si il s'agit d'un simple clic uniquement si le double clic n'est pas executé. Le seul "souci" avec cette solution, c'est qu'il ya un petit délai entre le clic et l'action de ce clic (l'interval entre les deux clics d'un double-clic). J'ai utilisé 700 ms pour ce délai... Malgré tout ça fonctionne. Si tu as besoin d'un code d'exemple, demande moi.
    De retour parmis vous après 10 ans!!

  4. #4
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Citation Envoyé par Sub0
    Salut!

    J'ai eu le même problème récemment. J'ai choisi d'utiliser la fonction TimeGetTime de l'unité MMSytem pour mesurer le temps et décider si il s'agit d'un simple clic uniquement si le double clic n'est pas executé. Le seul "souci" avec cette solution, c'est qu'il ya un petit délai entre le clic et l'action de ce clic (l'interval entre les deux clics d'un double-clic). J'ai utilisé 700 ms pour ce délai... Malgré tout ça fonctionne. Si tu as besoin d'un code d'exemple, demande moi.
    sub est ce que avec cette méthode vous n'avez pas de problèmes lorsque on change la vitesse du double clique dans les paramètres Windows, je vais me penché la dessus ç'est intéressent comme cas.

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par aityahia
    sub est ce que avec cette méthode vous n'avez pas de problèmes lorsque on change la vitesse du double clique dans les paramètres Windows, je vais me penché la dessus s'est intéressent comme cas.
    Justement. Au départ, pour bien faire, j'ai voulu chercher la valeur du délai du double-clic dans la base de registre, mais finalement, j'ai utilisé 700ms, surtout pour ne pas obtenir la réaction du simple clic trop tardive... Je pense que 700ms est un bon choix. J'ai réalisé des essais en modifiant l'interval du double-clic dans les paramètres de config de la souris et vraissembablement il n'y a pas de bug avec cette méthode; Le programme considère qu'il s'agira d'un simple clic si le double-clic n'est pas effectué avant ces 700 ms (le paramètre de config de windows devient obsolète). Mais malgré tout, il est tout à fait possible de tenir compte du paramètre de config de windows si vous le souhaitez...
    De retour parmis vous après 10 ans!!

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    bonsoir,

    Sub0 a écrit:
    Mais malgré tout, il est tout à fait possible de tenir compte du paramètre de config de windows si vous le souhaitez...
    A ce propos, voir dans windows.pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function GetDoubleClickTime: UINT; stdcall;  // interval en ms
    function SetDoubleClickTime(Interval: UINT): BOOL; stdcall;

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    Citation Envoyé par banban54
    bonjour
    il me semble que l'ordre des actions est toujours identique:
    OnmouseDown
    OnmouseClick
    OnMouseUp
    attention, l'ordre serait plutôt :
    OnMouseDown -> OnMouseUp -> OnClick
    de plus je n'ai vu l'évènement OnMouseClick nulle part parmi les évènements du TControl

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Points : 107
    Points
    107
    Par défaut
    Merci pour vos réponses. Effectivement c'est un cas intéressant
    Je viens de faire un test. Voici ce que j'ai trouvé.

    UN DOUBLECLICK de souris sur un contrôle entraîne effectivement 6 évènements, dans l'ordre:

    --> / DOWN/ CLICK/ UP/ DBLCLICK/ DOWN/ UP

    UN SIMPLE CLICK entraîne dans l'ordre:

    --> / DOWN/ CLICK/ UP/ et le /CLICK/ se produit au moment du /UP/ juste avant lui.

    Hors celle de Sub0, je ne vois donc pas de solution pour différencier deux actions, l'une provoquée par un simple click (qui se produira toujours) et un double click ( en utilisant toujours le même bouton gauche).

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Moi non plus, je ne vois pas d'autre solution, j'ai pourtant pas mal planché sur le problème... Si vous voulez tester le résultat, j'ai utilisé la méthode du TimeGetTime dans mon programme de tchat pour différencier la sélection d'un élément (double-clic) et son action (simple clic). Par exemple, avec les hyperliens ou les pièces jointes...

    ps : A propos, si vous essayez cette démo et que vous rencontrez des bugs, un p'tit MP sera le bienvenu car je suis justement en train de paufiner ce code
    De retour parmis vous après 10 ans!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. FireFox : onmousedown, onmouseup
    Par Auteur dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/01/2006, 12h56
  2. Evènement OnmouseDown/Up: bordure Inset/Outset dans un *.js
    Par Lareine dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/10/2005, 15h54
  3. Lecture data DBgrid onMouseDown
    Par JLGARIOUD dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/06/2005, 21h16
  4. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 16h35
  5. [Kylix] DELPHI6-CLX problème Onmousedown ....
    Par Bodin Yvon dans le forum EDI
    Réponses: 2
    Dernier message: 22/07/2002, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo