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 ...
GUI changement d'image sur réception du focus
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
Re: GUI changement d'image sur réception du focus
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
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
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.
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.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: GUI changement d'image sur réception du focus
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
Pour des infos plus détaillées, tu pourrais poster ton code avec ta gui
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: GUI changement d'image sur réception du focus
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\Images
Boutons()
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_CLOSE
EndFunc ;==>Example
Func 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)
endif
EndFunc
#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\Images
Boutons()
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_CLOSE
EndFunc ;==>Example
Func 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)
endif
EndFunc
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: GUI changement d'image sur réception du focus
Il a dit
(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)
donc je pense qu'il voudrait plutôt ça :je voudrais lier les boutons à un contrôle image
(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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: GUI changement d'image sur réception du focus
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 ...
Merci encore.
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\Images
Global $Color[3] = [0x000000FF, 0x0033FF00, 0x00FF33CC] ; pour les codes couleurs voir http://www.proftnj.com/RGB3.htm
; Creation GUI avec parametres generaux
GUICreate("Focus avec boutons", 1900, 1050)
GUISetBkColor(0x000000)
GUICtrlSetDefBkColor(0x3399CC)
;Creation des boutons
For $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_CLOSE
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) ;Renvoie l'image
Local $iCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
; Action sur focus sans clic
If $iCode = $BN_SETFOCUS Then
For $i = 0 to 2
If $nID = $hBtn[$i] Then GuiCtrlSetImage($pic, $aImg[$i])
Next
EndIf
;~ Action sur Clic
If $iCode = $BN_CLICKED Then
Select
case $nID = "3"
Videos()
case $nID = "4"
Photos()
case $nID = "5"
Skype()
EndSelect
EndIf
Return $GUI_RUNDEFMSG
EndFunc
; Et maintenant les fonctions appellées par le menu
Func Videos()
MsgBox($MB_SYSTEMMODAL,"Appellé :","Videos",10)
EndFunc
Func Photos()
MsgBox($MB_SYSTEMMODAL,"Appellé :","Photos",10)
EndFunc
Func Skype()
MsgBox($MB_SYSTEMMODAL,"Appellé :","Skype",10)
EndFunc
#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\Images
Global $Color[3] = [0x000000FF, 0x0033FF00, 0x00FF33CC] ; pour les codes couleurs voir http://www.proftnj.com/RGB3.htm
; Creation GUI avec parametres generaux
GUICreate("Focus avec boutons", 1900, 1050)
GUISetBkColor(0x000000)
GUICtrlSetDefBkColor(0x3399CC)
;Creation des boutons
For $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_CLOSE
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) ;Renvoie l'image
Local $iCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
; Action sur focus sans clic
If $iCode = $BN_SETFOCUS Then
For $i = 0 to 2
If $nID = $hBtn[$i] Then GuiCtrlSetImage($pic, $aImg[$i])
Next
EndIf
;~ Action sur Clic
If $iCode = $BN_CLICKED Then
Select
case $nID = "3"
Videos()
case $nID = "4"
Photos()
case $nID = "5"
Skype()
EndSelect
EndIf
Return $GUI_RUNDEFMSG
EndFunc
; Et maintenant les fonctions appellées par le menu
Func Videos()
MsgBox($MB_SYSTEMMODAL,"Appellé :","Videos",10)
EndFunc
Func Photos()
MsgBox($MB_SYSTEMMODAL,"Appellé :","Photos",10)
EndFunc
Func Skype()
MsgBox($MB_SYSTEMMODAL,"Appellé :","Skype",10)
EndFunc