Différencier le simple du double clique sur un Component
RURUInc
Messages postés42Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention21 octobre 2008
-
2 oct. 2008 à 12:08
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDerniè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.
A voir également:
Différencier le simple du double clique sur un Component
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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.
RURUInc
Messages postés42Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention21 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.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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 !).