Différencier le simple du double clique sur un Component

RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008 - 2 oct. 2008 à 12:08
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 4 oct. 2008 à 10:36
J'ai parcouru pas mal de forum et commentaire divers.

Ma problématique :
Pouvoir différencier sur un TPanel le clique du double clique

J'ai un évenement OuMouseDown (qui me permet d'initialiser l'evenement OnMousemouve) et divers recherche dans des base de donnés + quelques autres paramétres.
J'ai également l'evenement OnDblCLick sur ce panel qui me permet d'ouvrir une fenêtre (une form)

Lorsque je doubleclique ma fenetre s'ouvre bien, mais à la fermeture il réalise l'évenement OuMousedown.

Je n'arrive pas à empecher d'aller dans l'evenement OuMouseDown lorsqu'il y à un Double clique.

Apparement j'ai pu voir des commentaires sur l'evenement WM_LBUTTONDBLCLK de windows ou l'on pourrais detecter le double clique en comparant le temps entre 2 cliques.

Mais je sais pas du tout comment m'y prendre. Il y à-t-il des spécialistes dans le coin ?

Merci.

5 réponses

L_art_ment Messages postés 302 Date d'inscription vendredi 21 septembre 2007 Statut Membre Dernière intervention 6 février 2013
2 oct. 2008 à 13:17
         Cordial bonjour à toi également..

   Différencier le clique du double-clique d'un Panel ? Bein utilise les evenement OnClick et OnDblClick, non ?

<hr />
L'Armand joue, l'arme en joug... Mon site
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
2 oct. 2008 à 17:32
Le TPanel est descendant de TCustomPanel, lui même descendant de TWinControl, qui descend de TControl. Voici un schema :

TObject // Contrôle de base de tous les objets existants
|
TPersistent // Classe persistente
|
TComponent // Composant (plutôt prendre ce type pour composant non-visuel)
|
TControl // Contrôle visuel (TGraphicControl pour composants graphiques)
|
TWinControl // Composant Windows
|
TCustomPanel // Classe de base TPanel
|
TPanel // Composant évolué TPanel

A partie de TControl, les composants descendants possèdent des évenements protégés OnClick, OnDblClick, OnMouseMove, OnMouseUp, OnMouseDown, etc ... automatiquement gérés. Tu n'as pas à t'en préoccuper.
Il suffit de les affecter correctement.

Cordialement, Bacterius !
0
RURUInc Messages postés 42 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 21 octobre 2008
4 oct. 2008 à 00:22
Bonjour,

Alors evidement il y a les deux evenement connu Onclick et doubleclique mais cela ne change pas ma problématique.

Je doit pouvoir redimensionner un panel par exemple, ou le mouvoir (moveandresaize) et en même temps pour faire un double clique pour ouvrir une form.
Le problème c'est qu'apres le double clique, il retourne dans l'evenement Down et UP forcement. Et là je me chop une erreur. Car dans mon Down j'ouvre un query + calcul mathématique.
Bref il ne faut surtout pas revenir dans mon down.
Donc comment faire... a part pouvoir detecter un doubleclique dans levenement down pour lui dire de passer son chemin si double clique mais faire l'evenement down si simple clique pour le moveandresize.
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 oct. 2008 à 10:33
Ben, tu peux procéder de la façon suivante.
Tu déclares quelques variables globales Boolean.

Quand l'évenement OnDown est déclenché, tu fais par exemple :
BoolOnDown := True;

Pareil pour UP :
BoolOnUp := True;

Et dans DblClick :
BoolOnDown := False;
BoolOnUp := False;

Et dans un thread (ou autre evenement), tu checke ces 2 variables, et tu ouvres ton query si il y a besoin (comme ça tu n'es plus pris en traître par les evenements souris. Et lors d'un double-click, on remet tout ça à 0.
A toi d'adapter, je t'ai donné le truc, pas question de faire un copier-coller, réflechis à la technique et essaye de la mettre en oeuvre.

Cordialement, Bacterius !
0

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

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 oct. 2008 à 10:36
Sinon il existe une solution plus bâtarde :
Tu attends, lors d'un évènement OnDown, un certain temps (tu peux même récupérer le temps défini par l'utilisateur pour le double-click, voir API SystemParametersInfo), et si il ne reçoit pas un UP + un down + un UP dans un certain laps de temps, tu ouvres ton query, sinon tu ouvres ta form.
Mais c'est compliqué à gérer. (je préfère celle du haut !).

Cordialement, Bacterius !
0
Rejoignez-nous