[R] Survol et appui de bouton

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

[R] Survol et appui de bouton

#1

Message 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_***).
Modifié en dernier par ZDS le lun. 21 avr. 2014 02:18, modifié 1 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Survol et appui de bouton

#2

Message 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
Fichiers joints
UDFs.zip
(2.1 Kio) Téléchargé 279 fois
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Survol et appui de bouton

#3

Message 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 !
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Survol et appui de bouton

#4

Message par mikell »

Yo
Tu as regardé (& testé) l'exemple du fichier d'aide pour _GUICtrlButton_Create ?

... yé parie qué noun :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Survol et appui de bouton

#5

Message 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...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Survol et appui de bouton

#6

Message 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 ^^
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Survol et appui de bouton

#7

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Survol et appui de bouton

#8

Message 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 :( )
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Survol et appui de bouton

#9

Message 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 ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Survol et appui de bouton

#10

Message par jguinch »

Ah OK, j'avais pas compris ça.
C'est quand même pas simple... :(
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Survol et appui de bouton

#11

Message 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).
Modifié en dernier par ZDS le lun. 03 mars 2014 13:59, modifié 1 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Survol et appui de bouton

#12

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre