Page 1 sur 1
GUI changement d'image sur réception du focus
Posté : ven. 13 janv. 2017 14:18
par cdhl
Bonjour
Débutant dans Autoit (et la programmation) je voudrais écrire une GUI avec plusieurs boutons liés chacun à une image différente, changeant en fonction du focus (ou avec les touches flèches du clavier) plutôt qu'un clic ou la touche enter.
Les exemples donnés dans l'aide déclenchent tous l'action sur un clic, ce que je voudrais éviter, mais je ne vois pas comment prendre le problème. En fait, c'est pour ouvrir un menu ultra simplifié ("voir film", "voir photo", "Skype") au démarrage d'un PC que je voudrais recycler et qui puisse être commandé à distance avec une télécommande (type logitech).
Merci d'avance pour votre aide, en espérant que la question est bien posée et n'a pas déjà été traitée ...
Re: GUI changement d'image sur réception du focus
Posté : ven. 13 janv. 2017 17:42
par A2Energie
Salut a toi jeune autoitien
Un exemple du code que tu as actuellement développé serait d'une grande aide pour pouvoir t'aider.
Dnas l'état j'ai un peu de mal à comprendre ce que tu cherche à faire.
Je pense que ta réponse doit se trouver dans la fonction GuiGetMsg :
https://www.autoitscript.fr/autoit3/doc ... GetMsg.htm
Re: GUI changement d'image sur réception du focus
Posté : ven. 13 janv. 2017 23:56
par cdhl
Merci de votre aide.
En fait il s'agit de faire un menu simple de 3 boutons, parcouru avec la touche tabulation ou haut / bas (ce que permet la télécommande), le clic de la souris (ou envoi sur la télécommande) déclenchant un programme. Mais je voudrais lier les boutons à un contrôle image pour changer l'image à chaque tabulation ; une sorte d'aide en plus attachée à chaque bouton .
J'ai fait plusieurs tentatives mais ça ne marche pas et je me demande quelle focntion utiliser
il me semble que GuiGetMsg renvoie à des événements touchant au Gui plutôt qu'à un bouton.
Re: GUI changement d'image sur réception du focus
Posté : sam. 14 janv. 2017 21:27
par mikell
Il y a plusieurs façons de faire ça, avec les fonctions : GUIGetCursorInfo, GUICtrlGetState, ControlGetFocus ...
Pour des infos plus détaillées, tu pourrais poster ton code avec ta gui
Re: GUI changement d'image sur réception du focus
Posté : dim. 15 janv. 2017 15:31
par mdanielm
Je suis curieux de voir d'autres solutions plus simples!
#include <GuiButton.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>Global $hGui, $hBtn[3], $aImg[] = ["blue.bmp", "green.bmp", "red.bmp"]; Les images sont dans c:\program files (x86)\AutoIt3\Examples\GUI\Advanced\ImagesBoutons
()Func Boutons
() $hGUI = GUICreate("Focus avec boutons", 300, 200) for $i=0 to 2 $hBtn[$i] = _GUICtrlButton_Create($hGUI, "Bouton " & $i, 10, 10+50*$i, 90, 40, $BS_BITMAP) next GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUISetState(@SW_SHOW) Do sleep(100) Until GUIGetMsg() = $GUI_EVENT_CLOSEEndFunc ;==>ExampleFunc WM_COMMAND
($hWnd, $iMsg, $wParam, $lParam) Local $iCode = BitShift($wParam, 16) ; Recherche le bouton dont le handle est $lParam local $i=0, $yest=False while not $yest and $i<3 $yest = ($lParam=$hBtn[$i]) $i+=1 WEnd if not $yest Then Return $i-=1 if $iCode = $BN_SETFOCUS Then _GUICtrlButton_SetImage($hBtn[$i], $aImg[$i]) elseif $iCode = $BN_KILLFOCUS Then $hBtn[$i] = _GUICtrlButton_Create($hGUI, "Bouton " & $i, 10, 10+50*$i, 90,40, $BS_BITMAP) endifEndFunc
Re: GUI changement d'image sur réception du focus
Posté : dim. 15 janv. 2017 22:29
par mikell
Il a dit
je voudrais lier les boutons à un contrôle image
donc je pense qu'il voudrait plutôt ça :
(Et ce n'est PAS simple pour quelqu'un qui débute en AutoIt, d'ailleurs il y a probablement des solutions plus simples - pas forcément plus propres, mais plus accessibles pour un débutant)
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $hGui, $hBtn[3], $aImg[3] = ["blue.bmp", "green.bmp", "red.bmp"]
; Les images sont dans c:\program files (x86)\AutoIt3\Examples\GUI\Advanced\Images
GUICreate("Focus avec boutons", 300, 200)
For $i = 0 to 2
$hBtn[$i] = GuiCtrlCreateButton($aImg[$i], 10, 10+50*$i, 90, 40, $BS_NOTIFY)
Next
$pic = GuiCtrlCreatePic("", 110, 10, 180, 150)
GUICtrlSetState($hBtn[0], $GUI_FOCUS)
GuiCtrlSetImage($pic, $aImg[0])
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Do
sleep(10)
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Local $iCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
If $iCode = $BN_SETFOCUS Then
For $i = 0 to 2
If $nID = $hBtn[$i] Then GuiCtrlSetImage($pic, $aImg[$i])
Next
EndIf
Return $GUI_RUNDEFMSG
EndFunc
Re: GUI changement d'image sur réception du focus
Posté : mar. 17 janv. 2017 23:39
par cdhl
Merci pour ces réponses !!!
Je suis parti du code de Mikell qui correspond à ce que je voulais et marche bien (j'ai testé les autres). Bon alors c'est vrai que je ne suis pas sur d'avoir tout compris... et que sans votre aide... j'ai mets quand même le résultat (sans les fonctions que je n'ai pas encore faites et avec les MSGBOX provisoires) ; ça peut servir à d'autres et ça permet de faire comprendre la logique ...
#AutoIt3Wrapper_Icon=Icons.ico#AutoIt3Wrapper_Compile_Both=y#AutoIt3Wrapper_UseX64=y#AutoIt3Wrapper_Res_Language=1036#AutoIt3Wrapper_Res_Icon_Add=Icons.ico#AutoIt3Wrapper_Res_File_Add=Icons.ico#include <ButtonConstants.au3>#include <ColorConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <ProgressConstants.au3>#include <AutoItConstants.au3>#include <MsgBoxConstants.au3>#include <Timers.au3>#include <StaticConstants.au3>; Declaration des var.Global $hGui, $hBtn[3]Global $aTxt[3] = ["Videos", "Photos", "Skype"]Global $aImg[3] = ["c:\program files (x86)\AutoIt3\Examples\GUI\Advanced\Images\blue.bmp", "c:\program files (x86)\AutoIt3\Examples\GUI\Advanced\Images\green.bmp", "c:\program files (x86)\AutoIt3\Examples\GUI\Advanced\Images\red.bmp"]; Les images sont dans c:\program files (x86)\AutoIt3\Examples\GUI\Advanced\ImagesGlobal $Color[3] = [0x000000FF, 0x0033FF00, 0x00FF33CC] ; pour les codes couleurs voir http://www.proftnj.com/RGB3.htm; Creation GUI avec parametres generauxGUICreate("Focus avec boutons", 1900, 1050)GUISetBkColor(0x000000)GUICtrlSetDefBkColor(0x3399CC);Creation des boutonsFor $i = 0 to 2 $hBtn[$i] =GuiCtrlCreateButton($aTxt[$i], 100, 120+300*$i, 700, 200, $BS_NOTIFY) GUICtrlSetColor(-1, $Color[$i]) GUICtrlSetFont(-1, 72, 800, 0, "Open Sans")Next;Creation des images$pic = GuiCtrlCreatePic("", 1200, 120, 500, 200)GUICtrlSetState($hBtn[0], $GUI_FOCUS)GuiCtrlSetImage($pic, $aImg[0])GUISetState(@SW_SHOW)GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")Do sleep(10)Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc WM_COMMAND
($hWnd, $iMsg, $wParam, $lParam) ;Renvoie l'image Local $iCode = BitShift($wParam, 16) Local $nID = BitAND($wParam, 0x0000FFFF); Action sur focus sans clicIf $iCode = $BN_SETFOCUS Then For $i = 0 to 2 If $nID = $hBtn[$i] Then GuiCtrlSetImage($pic, $aImg[$i]) Next EndIf;~ Action sur ClicIf $iCode = $BN_CLICKED Then Select case $nID = "3" Videos
() case $nID = "4" Photos
() case $nID = "5" Skype
() EndSelectEndIfReturn $GUI_RUNDEFMSGEndFunc; Et maintenant les fonctions appellées par le menuFunc Videos
() MsgBox($MB_SYSTEMMODAL,"Appellé :","Videos",10)EndFuncFunc Photos
() MsgBox($MB_SYSTEMMODAL,"Appellé :","Photos",10)EndFuncFunc Skype
() MsgBox($MB_SYSTEMMODAL,"Appellé :","Skype",10)EndFunc
Merci encore.