Page 1 sur 1

[R] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 12:33
par Xtend
Bonjour,

Je souhaiterais réaliser une GUI avec quelques boutons, jusqu'à la, pas de problème ;)
Cependant, je voudrais que ces boutons soit des images (.jpg, .png ou autres) et que lorsque qu'on passe la souris dessus, l'image change.

En résumé, ça consisterais à afficher une image lorsque la souris n'est pas dessus et à afficher une autre image lorsqu'elle est dessus (on pourrais aussi faire une troisième image lorsqu'on clique dessus).

J'ai vu une UDF capable de faire cela : http://autoitscript.fr/forum/viewtopic.php?f=21&t=3672
Cependant, comme l'auteur le dit lui-même, de nombreux bugs font que le script bug (et en effet, chez moi, ça plante beaucoup ... mais bon, c'est exactement ce que je recherche).

Connaissez-vous le moyen de réaliser ceci ou les étapes à suivre ?


Merci d'avance ;)

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 16:56
par Xtend
Après moult recherches, j'ai finalement trouvé ce topic : http://autoitscript.fr/forum/viewtopic.php?f=21&t=4174

C'est l'UDF qu'il me fallait, j'ai réarranger la ligne 24 en remplaçant AdlibEnable par AdlibRegister mais il m'affiche cette erreur :

► Afficher le texte
Voici le code de l'UDF que j'ai utilisé :
► Afficher le texte
Et mon script (enfin c'est celui du topic ou je l'ai pris ^^) :
► Afficher le texte
Pouvez-vous m'aider à résoudre mon problème ?

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 17:07
par pierrotm777
J'ai l'impression que l'erreur indique un appel à la fonction _On_Over avec 0 objet puis avec un objet .
Il semblerait donc qu'il n'aime pas le Adlibregister car l'objet n'y est pas indiqué .

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 17:24
par Xtend
En effet, c'est bien cela (enfin, je pense)
J'avais essayé en l'enlevant mais ça marchait pas (le script se lançait mais les boutons étaient pas "interactifs").

Savez-vous comment résoudre le problème ?

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 17:28
par pierrotm777
Je pense avoir trouvé une solution :
Dans l'UDF, je vous propose de commenter le Adlibregister
De remplacer :

Code : Tout sélectionner

Global $pic__down[1000], $pic__over[1000]
par:

Code : Tout sélectionner

Global $pic__down[1000], $pic__over[1000],$timer = TimerInit (),$diff,$o_object
 
► Afficher le texte
Puis de modifier votre script ainsi !
► Afficher le texte

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 17:42
par Xtend
Ben dis-donc quel rapidité ! :shock:
Le problème venait bien de la donc je te remercie beaucoup pour ton aide. :wink:

Maintenant, il ne me reste plus, qu'à faire en sorte de rajouter une troisième image pour quand on clique dessus.
J'imagine qu'il faut faire ça avec des "Case", non ?
Si ce n'est pas ça, pourrais-tu m'indiquer comment m'y prendre, ce serait très gentil de ta part ;)

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 17:58
par pierrotm777
Vous avez déjà 4 exemple de boutons créés avec la fonction _GUICtrlCreatePic_Set_On_Over

Vous pouvez donc créer autant de bouton dont vous avez besoin :
Local $boutonnouveau1 = _GUICtrlCreatePic_Set_On_Over("exit.gif", "exitover.gif", 180, 131, 20, 20)
Il faudra juste le placer là où vous en avez besoin :

Code : Tout sélectionner

_GUICtrlCreatePic_Set_On_Over("nom image", "nom image au passage de la souris", position x, position y, taille x en pixel, taille y en pixel)
puis pour chaque nouveau bouton , ajoutez effectivement un nouveau case qui indiquera l'action à réaliser.

Code : Tout sélectionner

case $boutonnouveau1
    MsgBox(0, "HAL Info", "I am sorry Dave, I can't do that !")
:wink:

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 18:04
par Xtend
Si j'ai bien compris, votre méthode consisterai à changer l'image lorsque qu'on clique dessus par un "Case".

Cependant, je pense qu'il est possible de modifier l'UDF de façon à écrire :

Code : Tout sélectionner

_GUICtrlCreatePic_Set_On_Over("nom image", "nom image au passage de la souris", [color=#FF0000][b]"nom image au clic"[/b][/color], position x, position y, taille x en pixel, taille y en pixel)
Mais je sais pas comment m'y prendre :?

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 18:28
par pierrotm777
Ici l'image ne change qu'au passage de la souris sur le bouton !
Je vous conseil de créer deux objets pour un nouveau bouton avec votre éditeur graphique préféré :
Par exemple, copiez next.jpg en bouton1.jpg et nextover.jpg par boutonover1.jpg et éditez les , puis modifiez les selon votre besoin .
Vous pouvez aussi trouver des boutons sur le net un peu partout et les renommer !

Une fois ces deux graphiques créés, il vous reste à créer le bouton.
Si vous regardez bien les boutons, ils sont, ici, espacés de 40 pixels!
Le bouton le plus bas étant le bouton $exit, placé en x=180,y=131 et de taille x=20,y=20

Code : Tout sélectionner

Local $exit = _GUICtrlCreatePic_Set_On_Over("exit.gif", "exitover.gif", 180, 131, 20, 20)
Le nouveau bouton pourrais donc être par exemple décalé de 40 pixels, ce qui donnerais:

Code : Tout sélectionner

Local $bouton1 = _GUICtrlCreatePic_Set_On_Over("bouton1.jpg", "boutonover1.jpgf", 180, 171, 20, 20)

Re: [..] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 18:48
par Xtend
Je crois que vous avez pas compris ma question ou je me suis mal exprimé.
Je ne chercher pas à créer d'autres boutons pour l'instant, je cherche juste à en faire un.

Je vais essayer des résumer ce que je veux faire afin que ce soit plus compréhensible :

Il y a trois étapes importantes chez la vie d'un bouton (en ayant un peu d'imagination ^^) :
- le premier, c'est la création (lors du lancement du script)
- le second, c'est le passage de la souris
- le troisième, c'est le clic par la souris (actionnant donc une action)


Mais bon, j'ai réussi à modifier l'UDF en créant la variable $pic_surover et ça à l'air de marcher.

J'ai rajouté la "Case" avec

Code : Tout sélectionner

Case $msg = $oo_object
GUICtrlSetImage($oo_object, $pic__surover[$oo_object])


Voici le code :
► Afficher le texte
Je passe le problème en résolu.
@ pierrotm777 : je te remercie pour ton aide ;)

Re: [R] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 20:06
par matwachich
Bon, je sais que le sujet est résolu mais je vous donne 2 liens qui m'ont permis de faire exactement ce que tu veut
http://www.autoitscript.com/forum/topic ... hover-udf/
http://www.autoitscript.com/forum/topic ... icons-au3/

Re: [R] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 21:21
par Xtend
matwachich a écrit :Bon, je sais que le sujet est résolu mais je vous donne 2 liens qui m'ont permis de faire exactement ce que tu veut
http://www.autoitscript.com/forum/topic ... hover-udf/
http://www.autoitscript.com/forum/topic ... icons-au3/
Ben, pas tout à fait résolu car je n'arrive pas à faire afficher une background à cette UDF lorsque la souris passe sur le bouton :evil:

J'avais déjà vu le second mais pas le premier, je pense que je vais m'en servir :p
Merci pour ta participation ;)

Re: [R] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 21:43
par matwachich
Ya pas de quoi!
Je comptai faire un UDF de création de boutons exactement comme tu les demandes, sauf qu'il sera basé sur des fichiers icone, et pas png ou jpg, car la transparence est plus simple à gérer.
Grosso-modo, je fais comme cela (exemple 2 de l'UDF icons.au3):

Code : Tout sélectionner

GUICreate('Example2', 216, 128)
$Icon = GUICtrlCreateIcon('', 0, 40, 40, 48, 48)
_GuiCtrlSetOnHover(-1, '_change', '_change')
GUISetState()

_SetIcon($Icon, 'icon_normale', 0, 48, 48)

Do
    Sleep(100)
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _change($hCtrl, $iFlag, $hWin)
    Switch $iFlag
        Case 1
            _SetIcon($hCtrl, 'icon_normale', 0, 48, 48)
        Case 2
            _SetIcon($hCtrl, 'icon_hover', 0, 48, 48)
    EndSwitch
EndFunc

GUIDelete()
PS: j'ai peut être inversé les case de $iFlag (voir la doc. de l'UDF OnHover)

Quand l'UDF sera prêt, je posterai un lien ici!

Re: [R] Réaliser un bouton "interactif"

Posté : lun. 14 mars 2011 22:26
par Xtend
Ok, je te souhaite bonne chance pour ton UDF ;)
Dommage que tu te contente seulement des icônes (ce qui est déjà pas mal faut avouer ^^).

Re: [R] Réaliser un bouton "interactif"

Posté : jeu. 17 mars 2011 20:45
par matwachich
En effet, je me contente d'icones, mais je créer d'abord mon image sous GIMP en png puis j'utilise SimplyIcon (google) qui est pas mal et très simple

Sinon, voici l'UDF

Re: [R] Réaliser un bouton "interactif"

Posté : jeu. 17 mars 2011 21:24
par Xtend
Salut,

Ben j'ai testé ton UDF et il marche pas chez moi.
J'ai donc ouvert les fichiers au3, je me suis rendu compte que :
- 1) tu mettais tes fichiers dans un dossier "perso" (exemple : #include <perso\Icons.au3>) donc j'ai supprimé le dossier "perso" étant donné que j'inclue les UDF directement dans le dossier "Include". Cependant, ça marchait pas non plus.

- 2) Tu mets l'include :
#include <GUICtrlOnHover.au3>
or dans le dossier include de AutoIt, il existe :
#include <GUICtrlSetOnHover.au3>

Est-ce une erreur d'écriture ou une UDF que tu as oubliés de mettre dans zip ?
Je pencherais plutôt pour une UDF car tu l'avais mis dans le dossier "perso". Si tel est le cas, merci de le mettre dans ton zip pour ceux qui comme moi, ne l'ont pas.

- 3) En remplaçant l'include, j'ai l'erreur suivante :
► Afficher le texte
J'espère que tu solutionneras ces bugs ;)