[R]Détecter le clic droit de la souris sur une étiquette
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.
-
- Niveau 4
- Messages : 53
- Enregistré le : dim. 06 nov. 2011 14:06
- Localisation : Joinville le pont
- Status : Hors ligne
[R]Détecter le clic droit de la souris sur une étiquette
Bonjour,
Développant un Sudoku, j'affiche les candidats (valeurs possibles pour une case) dans des étiquettes.
Un clic sur le candidat permet de le sélectionner.
Il arrive que, pour une case donnée, certains candidats puissent être éliminés même s'ils sont "possibles".
Je voudrais, en cliquant sur le bouton droit, effectuer une action différente de celle réalisée avec le bouton gauche, c'est à dire cacher le candidat.
Je ne pense pas qu'il soit nécessaire d'indiquer le code car mon seul problème est d'avoir une action différente en fonction du bouton (ceci étant, je peux le passer mais il est assez long... et sans doute mal ficelé pour les "pros").
Actuellement, je n'utilise pas la gestion des évènements... (pas assez pointu pour ça !)
J'ai vu que "mouseclick" génère un clic droit... mais ce que je veux, c'est l'inverse...
Merci de votre aide (ou du lien si le sujet a déjà été traité sur le forum, mais je n’ai pas trouvé, d'où ce post)...
Développant un Sudoku, j'affiche les candidats (valeurs possibles pour une case) dans des étiquettes.
Un clic sur le candidat permet de le sélectionner.
Il arrive que, pour une case donnée, certains candidats puissent être éliminés même s'ils sont "possibles".
Je voudrais, en cliquant sur le bouton droit, effectuer une action différente de celle réalisée avec le bouton gauche, c'est à dire cacher le candidat.
Je ne pense pas qu'il soit nécessaire d'indiquer le code car mon seul problème est d'avoir une action différente en fonction du bouton (ceci étant, je peux le passer mais il est assez long... et sans doute mal ficelé pour les "pros").
Actuellement, je n'utilise pas la gestion des évènements... (pas assez pointu pour ça !)
J'ai vu que "mouseclick" génère un clic droit... mais ce que je veux, c'est l'inverse...
Merci de votre aide (ou du lien si le sujet a déjà été traité sur le forum, mais je n’ai pas trouvé, d'où ce post)...
Modifié en dernier par novembrezoulou le dim. 16 juil. 2017 23:54, modifié 2 fois.
L'aviation est un moyen de transport rapide pour gens pas pressés.
Plus on va moins vite, moins le temps est plus court...
Plus on va moins vite, moins le temps est plus court...
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris
Dommage parce que la réponse c'est GUICtrlSetOnEvent()Actuellement, je n'utilise pas la gestion des évènements...
" 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 )
-
- Niveau 4
- Messages : 53
- Enregistré le : dim. 06 nov. 2011 14:06
- Localisation : Joinville le pont
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris
Merci de cette réponse rapide...
En mettant l'option "GUIOnEventMode" à 1, afin d'utiliser la gestion des évènements, mes Switch basés sur "GUIGetMsg()" ne fonctionnent plus.
Je me replonge donc dans l'aide car je vais devoir modifier pas mal de choses !...
J'attends de réussir cette modification avant de clôturer ce post car, si je n'y arrive pas (mais je vais vraiment essayer !), je reviendrai vers ceux qui savent.
En mettant l'option "GUIOnEventMode" à 1, afin d'utiliser la gestion des évènements, mes Switch basés sur "GUIGetMsg()" ne fonctionnent plus.
Je me replonge donc dans l'aide car je vais devoir modifier pas mal de choses !...
J'attends de réussir cette modification avant de clôturer ce post car, si je n'y arrive pas (mais je vais vraiment essayer !), je reviendrai vers ceux qui savent.
L'aviation est un moyen de transport rapide pour gens pas pressés.
Plus on va moins vite, moins le temps est plus court...
Plus on va moins vite, moins le temps est plus court...
-
- Niveau 4
- Messages : 53
- Enregistré le : dim. 06 nov. 2011 14:06
- Localisation : Joinville le pont
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris
Bon... J’essaie mais je n'y arrive guère. Pourtant, ce n'est pas faute d'avoir essayé
Dans "TerminerEtiquettes" (région "fonctions" en fin de script), j'affiche bien le clic gauche, mais pas le droit.
Je viens de regarder toutes les fonctions dans la liste d'aide. Aucune ne semble renvoyer le type d'évènement... Il semble que l'on ne puisse interagir que si on indique un évènement alors que, précisément, je souhaiterais l'identifier dans le traitement.
Je précise que j'ai retiré une grosse partie de la GUI (candidats et boutons) et que je n'affiche que les cases pour gagner de la place. La procédure devrait être la même ensuite avec les 729 candidats possibles...
Encore merci de m'éclairer
Ajout : j'ai trouvé ça sur le forum anglophone
https://www.autoitscript.com/forum/topi ... ntry502117
mais quand je le lance pour voir ce qu'il fait, ça plante...
[code_au3]#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ColorConstants.au3>
Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declaration
Opt("GUIOnEventMode", 1) ; Activation du mode événementiel
#Region Constantes
Const $LargeurCaseNombre = 3 * 21 + 3 ; 65
Const $HauteurCaseNombre = 3 * 21 + 3
Const $LargeurEspacementCasesNombre = 5 + $LargeurCaseNombre ; 70
Const $HauteurEspacementCasesNombre = 5 + $HauteurCaseNombre
Const $LargeurRegion = 3 * $LargeurCaseNombre + 15 ; 210
Const $HauteurRegion = 3 * $HauteurCaseNombre + 15
Const $LargeurEspacementRegion = 8 + $LargeurRegion ; 218
Const $HauteurEspacementRegion = 8 + $HauteurRegion
Const $LargeurMatrice = 3 * $LargeurRegion + 25 ; 669
Const $HauteurMatrice = 3 * $HauteurRegion + 63 ; 699
Const $NombreDeBoutons = 5
#EndRegion Constantes
#Region Déclarations
Global $VerticalCase, $HorizontalCase, $i, $j, $k; pointeurs de boucles
Global $FenetresRegion[9]; permet de tracer les régions
Global $FenetresCase[81], $EtiquettesCase[81]; permet de tracer et d'afficher le contenu des cases
Global $TableauDesValeursCases[81]; stocke la valeur des cases considérées comme bonnes et saisies par le joueur
For $i = 0 To 80
$TableauDesValeursCases[$i] = 0; initialise le tableau ci-dessus
Next
#EndRegion Déclarations
#Region dessin de la matrice
; trace la matrice principale
Global $FenetreMatrice = GUICreate("Bloc note d'aide à la résolution de grilles Sudoku", $LargeurMatrice, $HauteurMatrice, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Terminer")
Global $BQuitter = GUICtrlCreateButton("Quitter", Int($LargeurMatrice / $NombreDeBoutons) * 4 + 1, $HauteurMatrice - 39, Int($LargeurMatrice / $NombreDeBoutons), 38)
GUICtrlSetOnEvent($BQuitter, "Terminer")
GUISetState(@SW_SHOW, $FenetreMatrice)
; trace les fenêtres des régions
For $VerticalRegion = 0 To 2 ; trace les trois lignes
For $HorizontalRegion = 0 To 2 ; trace les régions d'une même ligne
; définit les fenêtres des régions
$FenetresRegion[$HorizontalRegion + 3 * $VerticalRegion] = GUICreate("", $LargeurRegion, $HauteurRegion, 2 + $LargeurEspacementRegion * $HorizontalRegion, $HauteurEspacementRegion * $VerticalRegion + 2, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetreMatrice);whlt
; affiche les fenêtres des régions
GUISetState(@SW_SHOW, $FenetresRegion[$HorizontalRegion + 3 * $VerticalRegion])
Next
Next
; trace les cases
For $Regions = 0 To 8
For $VerticalCase = 0 To 2
For $HorizontalCase = 0 To 2
; définit les fenêtres des cases
$FenetresCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase] = GUICreate("", $LargeurCaseNombre, $HauteurCaseNombre, 2 + $LargeurEspacementCasesNombre * $HorizontalCase, 2 + $HauteurEspacementCasesNombre * $VerticalCase, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetresRegion[$Regions]);whlt
; définit les étiquettes des cases et les crée avec un contenu vide
$EtiquettesCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase] = GUICtrlCreateLabel("", 0, $HauteurCaseNombre / 5, $LargeurCaseNombre, $HauteurCaseNombre, $SS_CENTER) ; ltwh
GUICtrlSetFont(-1, 24, 40, 0, "Arial")
; cache l'affichage de l'étiquette d'une case afin de permettre celui des candidats de cette case
GUICtrlSetState(-1, $GUI_SHOW)
GUICtrlSetOnEvent($EtiquettesCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase], "TerminerEtiquettes")
; affiche la fenêtre de la case
GUISetState(@SW_SHOW, $FenetresCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase])
Next
Next
Next
#EndRegion
While 1
WEnd
#region fonctions
Func TerminerEtiquettes()
Select
Case $GUI_EVENT_PRIMARYDOWN
MsgBox('', "clic_gauche", "clic_gauche_dans " & @GUI_CtrlId)
Case $GUI_EVENT_SECONDARYDOWN
MsgBox('', "clic_droit", "Clic_droit_dans " & @GUI_CtrlId)
EndSelect
EndFunc ;==>TerminerEtiquettes
Func Terminer()
If @GUI_WinHandle = $FenetreMatrice Then Exit
EndFunc ;==>Terminer
#EndRegion[/code_au3]
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ColorConstants.au3>
Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declaration
Opt("GUIOnEventMode", 1) ; Activation du mode événementiel
#Region Constantes
Const $LargeurCaseNombre = 3 * 21 + 3 ; 65
Const $HauteurCaseNombre = 3 * 21 + 3
Const $LargeurEspacementCasesNombre = 5 + $LargeurCaseNombre ; 70
Const $HauteurEspacementCasesNombre = 5 + $HauteurCaseNombre
Const $LargeurRegion = 3 * $LargeurCaseNombre + 15 ; 210
Const $HauteurRegion = 3 * $HauteurCaseNombre + 15
Const $LargeurEspacementRegion = 8 + $LargeurRegion ; 218
Const $HauteurEspacementRegion = 8 + $HauteurRegion
Const $LargeurMatrice = 3 * $LargeurRegion + 25 ; 669
Const $HauteurMatrice = 3 * $HauteurRegion + 63 ; 699
Const $NombreDeBoutons = 5
#EndRegion Constantes
#Region Déclarations
Global $VerticalCase, $HorizontalCase, $i, $j, $k; pointeurs de boucles
Global $FenetresRegion[9]; permet de tracer les régions
Global $FenetresCase[81], $EtiquettesCase[81]; permet de tracer et d'afficher le contenu des cases
Global $TableauDesValeursCases[81]; stocke la valeur des cases considérées comme bonnes et saisies par le joueur
For $i = 0 To 80
$TableauDesValeursCases[$i] = 0; initialise le tableau ci-dessus
Next
#EndRegion Déclarations
#Region dessin de la matrice
; trace la matrice principale
Global $FenetreMatrice = GUICreate("Bloc note d'aide à la résolution de grilles Sudoku", $LargeurMatrice, $HauteurMatrice, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Terminer")
Global $BQuitter = GUICtrlCreateButton("Quitter", Int($LargeurMatrice / $NombreDeBoutons) * 4 + 1, $HauteurMatrice - 39, Int($LargeurMatrice / $NombreDeBoutons), 38)
GUICtrlSetOnEvent($BQuitter, "Terminer")
GUISetState(@SW_SHOW, $FenetreMatrice)
; trace les fenêtres des régions
For $VerticalRegion = 0 To 2 ; trace les trois lignes
For $HorizontalRegion = 0 To 2 ; trace les régions d'une même ligne
; définit les fenêtres des régions
$FenetresRegion[$HorizontalRegion + 3 * $VerticalRegion] = GUICreate("", $LargeurRegion, $HauteurRegion, 2 + $LargeurEspacementRegion * $HorizontalRegion, $HauteurEspacementRegion * $VerticalRegion + 2, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetreMatrice);whlt
; affiche les fenêtres des régions
GUISetState(@SW_SHOW, $FenetresRegion[$HorizontalRegion + 3 * $VerticalRegion])
Next
Next
; trace les cases
For $Regions = 0 To 8
For $VerticalCase = 0 To 2
For $HorizontalCase = 0 To 2
; définit les fenêtres des cases
$FenetresCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase] = GUICreate("", $LargeurCaseNombre, $HauteurCaseNombre, 2 + $LargeurEspacementCasesNombre * $HorizontalCase, 2 + $HauteurEspacementCasesNombre * $VerticalCase, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetresRegion[$Regions]);whlt
; définit les étiquettes des cases et les crée avec un contenu vide
$EtiquettesCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase] = GUICtrlCreateLabel("", 0, $HauteurCaseNombre / 5, $LargeurCaseNombre, $HauteurCaseNombre, $SS_CENTER) ; ltwh
GUICtrlSetFont(-1, 24, 40, 0, "Arial")
; cache l'affichage de l'étiquette d'une case afin de permettre celui des candidats de cette case
GUICtrlSetState(-1, $GUI_SHOW)
GUICtrlSetOnEvent($EtiquettesCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase], "TerminerEtiquettes")
; affiche la fenêtre de la case
GUISetState(@SW_SHOW, $FenetresCase[9 * $Regions + $HorizontalCase + 3 * $VerticalCase])
Next
Next
Next
#EndRegion
While 1
WEnd
#region fonctions
Func TerminerEtiquettes()
Select
Case $GUI_EVENT_PRIMARYDOWN
MsgBox('', "clic_gauche", "clic_gauche_dans " & @GUI_CtrlId)
Case $GUI_EVENT_SECONDARYDOWN
MsgBox('', "clic_droit", "Clic_droit_dans " & @GUI_CtrlId)
EndSelect
EndFunc ;==>TerminerEtiquettes
Func Terminer()
If @GUI_WinHandle = $FenetreMatrice Then Exit
EndFunc ;==>Terminer
#EndRegion[/code_au3]
Je viens de regarder toutes les fonctions dans la liste d'aide. Aucune ne semble renvoyer le type d'évènement... Il semble que l'on ne puisse interagir que si on indique un évènement alors que, précisément, je souhaiterais l'identifier dans le traitement.
Je précise que j'ai retiré une grosse partie de la GUI (candidats et boutons) et que je n'affiche que les cases pour gagner de la place. La procédure devrait être la même ensuite avec les 729 candidats possibles...
Encore merci de m'éclairer
Ajout : j'ai trouvé ça sur le forum anglophone
https://www.autoitscript.com/forum/topi ... ntry502117
mais quand je le lance pour voir ce qu'il fait, ça plante...
L'aviation est un moyen de transport rapide pour gens pas pressés.
Plus on va moins vite, moins le temps est plus court...
Plus on va moins vite, moins le temps est plus court...
-
- Niveau 4
- Messages : 53
- Enregistré le : dim. 06 nov. 2011 14:06
- Localisation : Joinville le pont
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris
Bonjour,
Je reprend ce projet, un peu mis en attente durant ces derniers mois.
Mon souci est de détecter le clic droit sur une étiquette. Si je le fais aisément dans une fenêtre en utilisant "GUISetOnEvent", GUICtrlSetOnEvent ne semble pas réagir à l'identique sur ce point. Est-il possible de récupérer le retour du clic souris afin de le traiter différemment selon qu'il s'agit d'un gauche ou d'un droit ?
Voici mon script initial. J'y ai occulté les "GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitE1")" car, logiquement, ils interagissent avec la fenêtre et appellent leur fonction même en dehors d'un clic sur l'étiquette...
Un grand merci...
PS. Je n'ai toujours pas compris pourquoi l'UDF récupérée sur le forum anglophone (cf. dernier post) plante systématiquement AutoIt ?
Je reprend ce projet, un peu mis en attente durant ces derniers mois.
Mon souci est de détecter le clic droit sur une étiquette. Si je le fais aisément dans une fenêtre en utilisant "GUISetOnEvent", GUICtrlSetOnEvent ne semble pas réagir à l'identique sur ce point. Est-il possible de récupérer le retour du clic souris afin de le traiter différemment selon qu'il s'agit d'un gauche ou d'un droit ?
Voici mon script initial. J'y ai occulté les "GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitE1")" car, logiquement, ils interagissent avec la fenêtre et appellent leur fonction même en dehors d'un clic sur l'étiquette...
Un grand merci...
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
Global $Gui_1 = GUICreate("Fenetre 1", 615, 437, 200, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Gui_1Close")
Global $BQuitter1 = GUICtrlCreateButton("Quitter", 296, 312, 177, 49)
GUICtrlSetOnEvent(-1, "BQuitter1Click")
Global $Etiquette1 = GUICtrlCreateLabel("Etiquette 1", 72, 32, 252, 68)
GUICtrlSetFont(-1, 40, 400, 0, "MS Sans Serif")
GUICtrlSetOnEvent(-1, "Etiquette1Click")
GUISetState(@SW_SHOW)
;~ GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitE1")
Global $Gui_2 = GUICreate("Fenetre 2", 615, 437, 1000, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Gui_1Close")
Global $BQuitter2 = GUICtrlCreateButton("Quitter", 296, 312, 177, 49)
GUICtrlSetOnEvent(-1, "BQuitter1Click")
Global $Etiquette2 = GUICtrlCreateLabel("Etiquette 2", 72, 32, 252, 68)
GUICtrlSetFont(-1, 40, 400, 0, "MS Sans Serif")
GUICtrlSetOnEvent(-1, "Etiquette2Click")
GUISetState(@SW_SHOW)
;~ GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitE2")
#EndRegion ### END Koda GUI section ###
;~ _MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_MousePrimaryDown_Event")
While 1
Sleep(100)
WEnd
Func ClickDroitE2()
MsgBox('','',"clic droit sur étiquette 2")
EndFunc
Func ClickDroitE1()
MsgBox('','',"clic droit sur étiquette 1")
EndFunc
Func BQuitter1Click()
Exit
EndFunc
Func Etiquette1Click()
MsgBox('','',"clic gauche sur étiquette 1 - ctrlId = " & @GUI_CtrlId)
EndFunc
Func Etiquette2Click()
MsgBox('','',"clic gauche sur étiquette 2 - ctrlId = " & @GUI_CtrlId)
EndFunc
L'aviation est un moyen de transport rapide pour gens pas pressés.
Plus on va moins vite, moins le temps est plus court...
Plus on va moins vite, moins le temps est plus court...
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris
Il suffit donc de rendre ces clics sélectifsnovembrezoulou a écrit : ↑ven. 14 juil. 2017 12:27J'y ai occulté les "GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitE1")" car, logiquement, ils interagissent avec la fenêtre et appellent leur fonction même en dehors d'un clic sur l'étiquette
Et tant qu'à faire, tout regrouper dans une seule fonction pour les 2 gui
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroit")
;....
Func ClickDroit()
$a = GUIGetCursorInfo(@GUI_WinHandle)
Switch $a[4]
Case $Etiquette1
MsgBox('','',"clic droit sur étiquette 1")
Case $Etiquette2
MsgBox('','',"clic droit sur étiquette 2")
EndSwitch
EndFunc
;....
Func ClickDroit()
$a = GUIGetCursorInfo(@GUI_WinHandle)
Switch $a[4]
Case $Etiquette1
MsgBox('','',"clic droit sur étiquette 1")
Case $Etiquette2
MsgBox('','',"clic droit sur étiquette 2")
EndSwitch
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 )
-
- Niveau 4
- Messages : 53
- Enregistré le : dim. 06 nov. 2011 14:06
- Localisation : Joinville le pont
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris sur une étiquette
Merci de ta réponse.
Je n'avais pas pensé à "GUIGetCursorInfo"
Je vais appliquer cette solution (qui fonctionne parfaitement sur le petit script que j'ai fourni) sur une maquette de ma matrice SUDOKU et je reviendrai vers toi (et la communauté AutoIt) pour te donner le résultat de mon boulot.
Dans cette matrice (9 * 9), j'ai 729 étiquettes différentes ! (9 candidats par case). Je vais donc voir comment adapter ta solution.
Je n'avais pas pensé à "GUIGetCursorInfo"
Je vais appliquer cette solution (qui fonctionne parfaitement sur le petit script que j'ai fourni) sur une maquette de ma matrice SUDOKU et je reviendrai vers toi (et la communauté AutoIt) pour te donner le résultat de mon boulot.
Dans cette matrice (9 * 9), j'ai 729 étiquettes différentes ! (9 candidats par case). Je vais donc voir comment adapter ta solution.
L'aviation est un moyen de transport rapide pour gens pas pressés.
Plus on va moins vite, moins le temps est plus court...
Plus on va moins vite, moins le temps est plus court...
-
- Niveau 4
- Messages : 53
- Enregistré le : dim. 06 nov. 2011 14:06
- Localisation : Joinville le pont
- Status : Hors ligne
Re: [..]Détecter le clic droit de la souris sur une étiquette
En suivant ton conseil (et en galérant un peu mais c'est la règle du jeu...) je suis venu à bout de mon problème.
Je joins le code modifié pour n'afficher d’une seule région afin de ne pas alourdir le script.
Le clic droit (j'ai viré le code -qui fonctionne- traitant le clic gauche) modifie bien la couleur du candidat.
Je passe donc ce post en résolu.
Encore merci
Je joins le code modifié pour n'afficher d’une seule région afin de ne pas alourdir le script.
Le clic droit (j'ai viré le code -qui fonctionne- traitant le clic gauche) modifie bien la couleur du candidat.
Je passe donc ce post en résolu.
Encore merci
Code : Tout sélectionner
Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declaration
Opt("GUIOnEventMode", 1)
#Region Include
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIButton.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#EndRegion Include
#Region Déclarations
Global $VerticalCase, $HorizontalCase, $i, $j, $k, $VerticalCandidat, $HorizontalCandidat ; pointeurs de boucles
Global $FenetresRegion[9]; permet de tracer les régions
Global $FenetresCase[81], $EtiquettesCase[81]; permet de tracer et d'afficher le contenu des cases
Global $FenetresCandidat[729], $EtiquettesCandidat[729], $TableauDesValeursInitialesCandidats[729]; permet de tracer et d'afficher le contenu des candidats
Global $TableauDesValeursCourantesCandidats; stocke la valeur actualisée des candidats possibles
Global $TableauDesValeursCases[81]; stocke la valeur des cases considérées comme bonnes et saisies par le joueur
For $i = 0 To 80
$TableauDesValeursCases[$i] = 0; initialise le tableau ci-dessus
Next
#EndRegion Déclarations
; Créer et tracer la matrice (Sudoku_Creation_Matrice)
; trace la matrice principale
Global $FenetreMatrice = GUICreate("Aide à la résolution de grilles Sudoku", 222, 260, -1, -1);-1111, 250);whlt
GUISetBkColor($COLOR_BLUE)
GUISetOnEvent($GUI_EVENT_CLOSE, "Terminer")
Global $BQuitter = GUICtrlCreateButton("Quitter", 1, 221, 220, 38);ltwh
GUICtrlSetOnEvent($BQuitter, "Terminer")
GUISetState(@SW_SHOW, $FenetreMatrice)
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitCandidat")
; 3= jaune très clair, 4= fuschia, 5= gris foncé, 6 = vert foncé, 7 vert clair, 8 rose foncé, 9 bleu foncé, 10 gris moyen, 11 vert très clair, 12 bleu très foncé, 13 caca d'oie, 15 rouge vif, 17 bleu ciel, 18 bleu-vert, 19 blanc, 20 jaune citron
; ------------------------------ MsgBox('','',"Hauteur : " & @DesktopHeight & "Largeur : " & @DesktopWidth)
; trace les fenêtres des régions
For $VerticalRegion = 0 To 0 ; trace les trois lignes
For $HorizontalRegion = 0 To 0 ; trace les régions d'une même ligne
; définit les fenêtres des régions
$FenetresRegion[$HorizontalRegion + 3 * $VerticalRegion] = GUICreate("", 210, 210, 2 + 218 * $HorizontalRegion, 218 * $VerticalRegion + 2, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetreMatrice);whlt
; affiche les fenêtres des régions
GUISetState(@SW_SHOW, $FenetresRegion[$HorizontalRegion + 3 * $VerticalRegion])
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitCandidat")
Next
Next
;~ ; trace les cases
For $VerticalCase = 0 To 2
For $HorizontalCase = 0 To 2
; définit les fenêtres des cases
$FenetresCase[$HorizontalCase + 3 * $VerticalCase] = GUICreate("", 65, 65, 2 + 70 * $HorizontalCase, 2 + 70 * $VerticalCase, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetresRegion[0]);whlt
; définit les étiquettes des cases et les crée avec un contenu vide
$EtiquettesCase[$HorizontalCase + 3 * $VerticalCase] = GUICtrlCreateLabel("", 0, 13, 65, 65, $SS_CENTER) ; ltwh
GUICtrlSetFont(-1, 24, 40, 0, "Arial")
GUICtrlSetColor(-1, $COLOR_MAROON)
; cache l'affichage de l'étiquette d'une case afin de permettre celui des candidats de cette case
GUICtrlSetState(-1, $GUI_HIDE)
; affiche la fenêtre de la case
GUISetState(@SW_SHOW, $FenetresCase[$HorizontalCase + 3 * $VerticalCase])
;~ GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitCandidat")
Next
Next
; trace les candidats
For $Cases = 0 To 8
For $VerticalCandidat = 0 To 2
For $HorizontalCandidat = 0 To 2
; définit les fenêtres des candidats
$FenetresCandidat[$HorizontalCandidat + 3 * $VerticalCandidat + 9 * $Cases] = GUICreate("", 21, 21, 21 * $HorizontalCandidat, 21 * $VerticalCandidat, $WS_CHILD, $WS_EX_OVERLAPPEDWINDOW, $FenetresCase[$Cases]);whlt
; Appelle la prodécure de traitement du candidat
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "ClickDroitCandidat")
; affiche les fenêtres des candidats
GUISetState(@SW_SHOW, $FenetresCandidat[$HorizontalCandidat + 3 * $VerticalCandidat + 9 * $Cases])
; définit les étiquettes des candidats
$EtiquettesCandidat[$HorizontalCandidat + 3 * $VerticalCandidat + 9 * $Cases] = GUICtrlCreateLabel(1 + $HorizontalCandidat + 3 * $VerticalCandidat, 5, 5, -1, -1);, -1, -1) ltwh
; initialise la valeur de départ des étiquettes candidats
$TableauDesValeursInitialesCandidats[$HorizontalCandidat + 3 * $VerticalCandidat + 9 * $Cases] = 1 + $HorizontalCandidat + 3 * $VerticalCandidat
GUICtrlSetFont(-1, 9, 900, 0, "Arial")
GUICtrlSetColor(-1, $COLOR_BLACK);YELLOW)
Next
Next
Next
; initialise la valeur courante des étiquettes candidats (sera mise à jour au fur et à mesure du jeu
$TableauDesValeursCourantesCandidats = $TableauDesValeursInitialesCandidats
While 1
WEnd
Func ClickDroitCandidat()
Local $a
$a = GUIGetCursorInfo(@GUI_WinHandle)
GUICtrlSetColor($EtiquettesCandidat[$a[4] - 13], $COLOR_RED)
EndFunc ;==>ClickDroitCandidat
Func Terminer()
Exit
EndFunc ;==>Terminer
L'aviation est un moyen de transport rapide pour gens pas pressés.
Plus on va moins vite, moins le temps est plus court...
Plus on va moins vite, moins le temps est plus court...