Page 1 sur 1

[R] Survol et appui de bouton

Posté : ven. 28 févr. 2014 10:06
par ZDS
Bonjour à tous.

Je cherche à mettre en place un composant de type bouton qui au survol exécute une fonction, et quand on appuye dessus (appui sans relache) effectue qqchose et quand on le relache effectue autre chose. Typiquement : Un bouton au bout d'un input de type password qui :
- quand on le hover : colorie l'input en rouge
- quand on le unhover : redonne la couleur de base à l'input (noir)
- quand on le pousse : affiche le texte en clair
- quand on le relache : cache le texte comme d'habitude (avec les points )

Je sais déjà le faire, mais à la manière crado, c'est à dire avec des boucles moches et du GUIGetCursorInfo. Je souhaiterais donc savoir si quelqu'un saurait comment faire cela proprement, c'est à dire avec un GuiRegisterMsg ($WM_NOTIFY ou $WM_COMMAND ou autre, je ne maîtrise pas vraiment cet aspect :s).

Voici mon code de départ, merci d'avance pour votre aide !
► Afficher le texteCode avec boucles
A bientôt !

PS: D'avance désolé pour la partie dégueulasse du code, je n'ai pas réussi à enlever le style $ES_PASSWORD du champ, donc "obligé" de faire deux inputs qui se chevauchent.

EDIT : Problème [R]ésolu en séparant les deux fonctionnements : généraliste pour le hover/unhover, et spécifique au bouton pour le push/release (cf _GuiCtrlButton_***).

Re: [..] Survol et appui de bouton

Posté : ven. 28 févr. 2014 14:17
par TommyDDR
Il existe pas mal d'UDF sur le hover, je vais en profiter pour vous orienter vers le mien.

Voici un exemple :
► Afficher le textecode

Re: [..] Survol et appui de bouton

Posté : ven. 28 févr. 2014 19:23
par ZDS
Bonjour TommyDDR,

Ce n'est pas ce que je recherche, ton UDF à peu de chose près est basé sur le même type d'algo que mon script. Ce qui change fondamentalement est la multitude des GuiRegisterMsg (avec les listings), l'utilisation du _IsPressed pour l'état du clic (que je suis obligé d'éviter à tout prix, car la présence de cette fonction, me demandez pas pourquoi, déclenche parfois des faux-positifs avec BitDefender, comme avec l'UPX), et le survol en regardant la position d'un bouton et comparer à la position du contrôle avec User32.WindowFromPoint. C'est beaucoup trop consommateur de ressources et complexe pour ce que j'ai à faire.

Voici un canevas de ce à quoi j'en suis, je cherche seulement à capter les hover/unhover/clic/relache dans la partie en rouge :
► Afficher le texteCanevas
Merci d'avance !

Re: [..] Survol et appui de bouton

Posté : ven. 28 févr. 2014 22:37
par mikell
Yo
Tu as regardé (& testé) l'exemple du fichier d'aide pour _GUICtrlButton_Create ?

... yé parie qué noun :mrgreen:

Re: [..] Survol et appui de bouton

Posté : ven. 28 févr. 2014 22:50
par jguinch
@mikell : j'avais cherché un peu cet après-midi et j'étais justement tombé sur l'aide de _GUICtrlButton_Create.
C'est pas mal, il y a du WM_COMMAND et WM_NOTIFY. Avec cet exemple, il y a de quoi gérer le survol du bouton et le clic (mouseup), par contre pour le mousedown sur le bouton, j'ai pas trouvé... Ca m'intéresserais de savoir...

Re: [..] Survol et appui de bouton

Posté : sam. 01 mars 2014 10:06
par ZDS
Je l'ai vu et testé tout ce qui était exemple coté _GUICtrlButton_SetSplitInfo et compagnie (raté, Mikell ^^), j'ai juste oublié de le dire ici, mais j'avais prévenu sur le site anglophone.

Comme dit jguinch, il n'y a pas de push/release, et surtout c'est limité au bouton, alors que je cherche un hover/unhover/push/release quelque soit le contrôle (edit, input, button, progressbar, etc...) J'ai trouvé qqchose qui fonctionne que pour les boutons, mais pas pour les autres types de controles (issu des _guictrlbutton); il doit bien exister un code en GuiRegisterMsg qui soit généraliste, non? Ca serait un comble ^^

Re: [..] Survol et appui de bouton

Posté : sam. 01 mars 2014 10:58
par mikell
@jguinch
Sur un bouton un clic n'est enregistré qu'au mouseup, pour le mousedown on peut tricher en donnant le focus à un autre controle et en surveillant $BN_SETFOCUS

Bon courage pour un GuiRegisterMsg généraliste, ça m'intéressera aussi Image

Re: [..] Survol et appui de bouton

Posté : sam. 01 mars 2014 16:04
par jguinch
Bon, j'ai regardé un peu, mais c'est vrai qu'on trouve pas grand-chose sur les forums...
Du coup, j'ai cherché par moi-même en jouant avec les différents "Windows Messages Codes", bien que je ne suis maîtrise pas du tout GUIRegisterMsg.

Je me suis arrêté sur WM_SETCURSOR qui, je pense, peut être une bonne solution.
Voilà ce que j'ai bricolé :
► Afficher le texte
C'est peut-être un peu brouillon, mais ça a l'air de fonctionner pas trop mal (sauf si on relâche le bouton en dehors de la GUI :( )

Re: [..] Survol et appui de bouton

Posté : sam. 01 mars 2014 18:33
par mikell
Je maintiens que l'exemple de l'aide permet d'avoir le push/release (bouton) même pour un release hors-gui si on joue sur le focus
► Afficher le texte
Quel serait l'intérêt de détecter le push/release pour un contrôle autre qu'un bouton ?

Re: [..] Survol et appui de bouton

Posté : sam. 01 mars 2014 19:59
par jguinch
Ah OK, j'avais pas compris ça.
C'est quand même pas simple... :(

Re: [..] Survol et appui de bouton

Posté : sam. 01 mars 2014 22:50
par ZDS
C'est surtout le hovering multi-controles qui m'interesse, c'est vrai que je pense pouvoir me débrouiller autrement pour le push/release (j'essayerai de délèguer ça selon le controle si c'est pour un drag'n'drop ou autre). Mais le hovering lui, j'aimerai limiter les ressources et le déclencher uniquement lorsque l'event correspondant du GUIRegisterMsg apparait : encore faut il savoir lequel c'est. Pour info, dans le cas d'un bouton c'est CODE = -1249 (FLAG = 17 pour un hover, et FLAG = 33 pour un unhover), mais Mikell l'avait déjà dans son code.

Merci en tout cas pour votre aide, j'ai pas fini d'investiguer ^^

PS@jguinch: la détection d'un clic souris complètement généralisé, c'est de la triche, autant utiliser la fonction de mon premier exemple, elle consommera pas plus ^^

EDIT@Mikell: Si la détection de l'event est possible, c'est que celui-ci est envoyé qu'on le capture ou pas. Donc forcément, ça sera moins consommateur que de rajouter une couche (car si il est envoyé, il l'est aussi lors du script première version et ignoré, donc un truc qui consomme pour rien et part à la poubelle comme lors d'un oubli de passage de pointeur).

Re: [..] Survol et appui de bouton

Posté : dim. 02 mars 2014 00:26
par mikell
Pas vraiment d'accord
Une détection généraliste sera (par nature) forcément gourmande en ressources, et dans ce cas pour le hover le WM_SETCURSOR de jguinch posé avec condition(s) est tout à fait honorable
► Afficher le texte
jguinch a écrit :C'est quand même pas simple... :(
Là on est bien d'accord :mrgreen: