Dernièrement je suis tombé sur ce post : http://www.autoitscript.com/forum/index ... 55120&st=0
C'était exactement ce dont j'avais besoin pour gérer une image dans ma GUI comme un bouton avec le remplacement de l'image (hover) quand la souris survole l'image.
La dernière version de l'UDF est la 1.8 mais j'ai dû modifier l'UDF pour qu'il fonctionne correctement car une erreur n'a pas été corrigé avec la version 3.3 de Autoit.
Remplacez : (Ligne 15)
Code : Tout sélectionner
Opt("OnExitFunc", "__GUICtrl_SetOnHover_OnAutoItExit")
Code : Tout sélectionner
OnAutoItExitRegister( "__GUICtrl_SetOnHover_OnAutoItExit")
Dans mon script j'ai créer un menu avec "_GUICtrlMenu_CreateMenu ()".
Et je gère la sélection dans le sous-menu avec la fonction "WM_COMMAND".
Seulement voilà, dès que je déclare la fonction avec 'GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")' la gestion du clique ne fonctionne plus

Et si vous mettez en commentaire cette ligne le clique re-fonctionne....
Il y a donc quelque chose qui coince l'UDF dès que l'on déclare une fonction 'WM_COMMAND' mais quoi ?
Je vous ai fait un petit exemple sommaire de mon script mais fonctionnel (Sauf le Menu + clique) :
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
#include <GUIListBox.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GUICtrlSetOnHover_UDF.au3>
; Variable pour le menu
Global Enum $idAddRec = 1000, $idExit, $idAbout ; $idOpen, $idSave, $idCut, $idCopy, $idPaste
Global $hGUI, $hFile, $hHelp, $hMain ; $hEdit,
Local $listview, $hImage
Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_ONECLICKACTIVATE, $LVS_EX_INFOTIP )
Global $ImageIsClicked = False
$INTERFACE = GUICreate("OnHover sur IMAGE", 644, 439, -1, -1)
$Image1 = GUICtrlCreatePic(@ScriptDir & "\Play_Button.jpg", 521, 109, 83, 83)
_GUICtrl_SetOnHover(-1, "_Hover_Proc", "_Leave_Hover_Proc", "PrimaryDown_Proc", "PrimaryUp_Proc")
; Create File menu
$hFile = _GUICtrlMenu_CreateMenu ()
_GUICtrlMenu_InsertMenuItem ($hFile, 0, "&SousMenu", $idAddRec)
_GUICtrlMenu_InsertMenuItem ($hFile, 1, "", 0)
_GUICtrlMenu_InsertMenuItem ($hFile, 2, "E&xit", $idExit)
; Create Help menu
$hHelp = _GUICtrlMenu_CreateMenu ()
_GUICtrlMenu_InsertMenuItem ($hHelp, 0, "&About", $idAbout)
; Create Main menu
$hMain = _GUICtrlMenu_CreateMenu ()
_GUICtrlMenu_InsertMenuItem ($hMain, 0, "&Configurations", 0, $hFile)
_GUICtrlMenu_InsertMenuItem ($hMain, 1, "&Aide", 0, $hHelp)
; Set window menu
_GUICtrlMenu_SetMenu ($INTERFACE, $hMain)
;ICI la déclaration de la fonction $WM_COMMAND à mettre en commentaire pour que le clique fonctionne
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState(@SW_SHOW, $INTERFACE)
; Handle menu commands
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch _WinAPI_LoWord ($iwParam)
Case $idAddRec
;Suite du script à partir du menu.....
ConsoleWrite( "Menu selectionné" & @CRLF)
Case $idExit
Exit
Case $idAbout
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
While 1
$nMsg = GUIGetMsg()
If $ImageIsClicked Then
$ImageIsClicked = False
ConsoleWrite( "LANCEMENT du SCRIPT" & @CRLF)
EndIf
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Func _Hover_Proc($iCtrlID)
Switch $iCtrlID
Case $Image1
GUICtrlSetImage($iCtrlID, @ScriptDir & "\Play_Button_Hover.jpg")
EndSwitch
EndFunc
Func _Leave_Hover_Proc($iCtrlID)
Switch $iCtrlID
Case $Image1
GUICtrlSetImage($iCtrlID, @ScriptDir & "\Play_Button.jpg")
EndSwitch
EndFunc
Func PrimaryDown_Proc($iCtrlID)
ConsoleWrite( "DOWN_proc" & @CRLF)
Switch $iCtrlID
Case $Image1
GUICtrlSetImage($iCtrlID, @ScriptDir & "\Play_Button_Click.jpg")
EndSwitch
EndFunc
Func PrimaryUp_Proc($iCtrlID)
ConsoleWrite( "UP_Proc" & @CRLF)
Switch $iCtrlID
Case $Image1
GUICtrlSetImage($iCtrlID, @ScriptDir & "\Play_Button_Hover.jpg")
$ImageIsClicked = True
EndSwitch
EndFunc