Page 1 sur 1

[R] Génération de variables et GUICtrlOnHover.au3

Posté : mar. 04 févr. 2020 09:39
par pumilio
Bonjour à tous,

J'utilise l'UDF "GUICtrlOnHover.au3" pour mettre des contrôles "label" en surbrillance au passage de la souris mais je me retrouve face à une situation que je n'arrive pas à résoudre (mon tout petit niveau en AutoIt ne me permettant pas d'y voir claire.

Je souhaiterais pouvoir mettre en surbrillance un couple de "label" lorsque je passe la souris sur l'un, ce que je peux faire lorsque les labels sont créés un par un. Mais lorsque j'utilise une boucle fort pour créer mes "label" avec "Assign" je ne vois plus comment m'en sortir.

Mon code permettra de mieux me faire comprendre :
Les premiers "label" fonctionnent, mais je ne trouve pas comment faire pour les suivants :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#Include "GUICtrlOnHover.au3"

$hGUI = GUICreate("test", 230, 200, -1, -1)

$label1= GUICtrlCreateLabel("", 10, 20, 100, 24)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$label2= GUICtrlCreateLabel("", 120, 20, 100, 24)
GUICtrlSetBkColor(-1, 0xFFFFFF)
_GUICtrlSetOnHover($label1, "_1In", "_1Out", "_1Clic", "_1Relache")

$interligne = 60
For $i=1 To 5
	Assign("labelG"&$i,GUICtrlCreateLabel("", 10, $interligne-2, 100, 24), 2)
	GUICtrlSetBkColor(-1, 0xFFFFFF)
	Assign("labelD"&$i,GUICtrlCreateLabel("", 120, $interligne-2, 100, 24), 2)
	GUICtrlSetBkColor(-1, 0xFFFFFF)
	_GUICtrlSetOnHover(Eval("labelG"&$i), "_ligneIn", "_ligneOut", "_ligneClic", "_ligneRelache")
	$interligne = $interligne+25
Next

GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


Func _ligneIn($CtrlID, $Param, $Param2)
		GUICtrlSetBkColor($CtrlID, 0xAAAAAA)
EndFunc
Func _ligneOut($CtrlID, $Param, $Param2)
		GUICtrlSetBkColor($CtrlID, 0xFFFFFF)
EndFunc


Func _1In($CtrlID, $Param, $Param2)
		GUICtrlSetBkColor($CtrlID, 0xAAAAAA)
		GUICtrlSetBkColor($label2, 0xAAAAAA)
EndFunc
Func _1Out($CtrlID, $Param, $Param2)
		GUICtrlSetBkColor($CtrlID, 0xFFFFFF)
		GUICtrlSetBkColor($label2, 0xFFFFFF)
EndFunc
Merci pour votre aide.

Bonne journée,

Pumilio

Re: [..] Génération de variables et GUICtrlOnHover.au3  

Posté : mar. 04 févr. 2020 13:19
par walkson
Bonjour,
Quand vous créez des contrôles "à la volée", il est beaucoup plus simple de les enregistrer dans un tableau
Comme vous souhaitez travailler en couple de labels, je vous propose un array en 2 colonnes où le $CtrlID sera retrouvé par _ArraySearch()
Une fois que la ligne contenant la valeur de l'ID est trouvée, il est facile de lire dans les deux colonnes.
#include <GUIConstantsEx.au3>
#Include "C:\Users\PC\Desktop\GUICtrl_SetOnHover\GUICtrlOnHover.au3"
#include <Array.au3>
$hGUI = GUICreate("test", 230, 200, -1, -1)

$label1= GUICtrlCreateLabel("a", 10, 20, 100, 24)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$label2= GUICtrlCreateLabel("z", 120, 20, 100, 24)
GUICtrlSetBkColor(-1, 0xFFFFFF)
_GUICtrlSetOnHover($label1, "_1In", "_1Out", "_1Clic", "_1Relache")

$interligne = 60
Global $array[5][2]
For $i=0 To 4
   $array[$i][0] = GUICtrlCreateLabel("aa", 10, $interligne-2, 100, 24)
   GUICtrlSetBkColor(-1, 0xFFFFFF)
   $array[$i][1] = GUICtrlCreateLabel("bb", 120, $interligne-2, 100, 24)
   GUICtrlSetBkColor(-1, 0xFFFFFF)
   _GUICtrlSetOnHover($array[$i][0], "_ligneIn", "_ligneOut", "_ligneClic", "_ligneRelache")
   _GUICtrlSetOnHover($array[$i][1], "_ligneIn", "_ligneOut", "_ligneClic", "_ligneRelache")
   $interligne = $interligne+25
Next
_ArrayDisplay($array,"Pour voir");ligne à supprimer
GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


Func _ligneIn($CtrlID, $Param, $Param2)
      $index = _ArraySearch($array,$CtrlID)
         GUICtrlSetBkColor($array[$index][0], 0xAAAAAA)
         GUICtrlSetBkColor($array[$index][1], 0xAAAAAA)
EndFunc
Func _ligneOut($CtrlID, $Param, $Param2)
      $index = _ArraySearch($array,$CtrlID)
         GUICtrlSetBkColor($array[$index][0], 0xFFFFFF)
         GUICtrlSetBkColor($array[$index][1], 0xFFFFFF)
EndFunc


Func _1In($CtrlID, $Param, $Param2)
      GUICtrlSetBkColor($CtrlID, 0xAAAAAA)
      GUICtrlSetBkColor($label2, 0xAAAAAA)
EndFunc
Func _1Out($CtrlID, $Param, $Param2)
      GUICtrlSetBkColor($CtrlID, 0xFFFFFF)
      GUICtrlSetBkColor($label2, 0xFFFFFF)
EndFunc
Func _1Clic($CtrlID, $Param, $Param2)
      GUICtrlSetBkColor($CtrlID, 0xFFFF00)
      GUICtrlSetBkColor($label2, 0xFFFF00)
EndFunc
Func _ligneClic($CtrlID, $Param, $Param2)
      $index = _ArraySearch($array,$CtrlID)
         GUICtrlSetBkColor($array[$index][0], 0xFFFF00)
         GUICtrlSetBkColor($array[$index][1], 0xFFFF00)
EndFunc

N'oubliez pas de modifier l'adresse de l'include

Re: [..] Génération de variables et GUICtrlOnHover.au3

Posté : mar. 04 févr. 2020 14:16
par pumilio
Un grand merci Walkson pour votre réponse :D .
C'est très claire, ça répond exactement à ma demande et ça me sera fort utile pour la suite.

Bonne journée.