Page 1 sur 1

variables dynamiques et ...

Posté : ven. 03 sept. 2021 22:25
par Ciol13
Bonsoir à tous, après un certain temps sans activité, pour cause d'infidélité avec du VBA, me voilà de nouveau ici pour une question qui sera probablement facile pour les connaisseurs, mais qui me laisse complètement bloqué dans l'état actuel des choses

allez, entrons dans le vif du sujet. je crée un certains nombre de checkbox de la manière suivante
for $l = 1 to $j -1
Assign("Checkbox" & $l, GUICtrlCreateCheckbox("", 100, 190+17*$l, 20, 17))
Next
tout se passe pour le mieux, mais à l'issue de ma procédure, je souhaite "lire" celle qui ont été cochées, puis les remettre toutes décochées pour passer à la question suivante

j'ai tenté un truc dans le genre :
for $l = 1 to $j-1
Assign("Checkbox" & $l, guictrlsetstate("Checkbox" & $l,$gui_unchecked))
next
pour la lecture des box cochées, je n'ai pas encore cherché, je voulais déjà les mettre à 0, mais si vous avez des idées... je ne suis pas contre un coup de main

Merci à tous, bonne soirée

Re: variables dynamiques et ...

Posté : sam. 04 sept. 2021 10:21
par walkson
Bonjour,
La méthode la plus simple quand on crée des contrôles à la volée est de les enregistrer dans un array. La variable devient $array[$y]
Je vous mets un exemple

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Local $text = ""
Global $Form1 = GUICreate("Form1", 243, 600, 192, 90)
$top = 1
Local $array[21]
Local $arrayL[21] =["coucou1","coucou2","coucou3","coucou4","coucou5","coucou6","coucou7","coucou8","coucou9" _
,"coucou10","coucou11","coucou12","coucou13","coucou14","coucou15","coucou16","coucou17","coucou18","coucou19","coucou20","coucou21"]
For $i = 0 To 20
$array[$i] = GUICtrlCreateCheckbox("", 25, $top, 185, 25)
GUICtrlSetData(-1, $arrayL[$i])
$top += 26
Next
$button = GUICtrlCreateButton("OK",25, 550, 50,50)
$button1 = GUICtrlCreateButton("check",85, 550, 50,50)
GUISetState(@SW_SHOW)

_ArrayDisplay($array,"ID enregistrés")

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
	Case $GUI_EVENT_CLOSE
	   Exit
	Case $button
		For $y = 0 To UBound($array) - 1
                If _IsChecked($array[$y]) Then
                   $text = ControlGetText($Form1,"",$array[$y])
					Switch $text
						Case "coucou1"
							ShellExecute("http://autoitscript.fr/forum/viewtopic.php?f=3&t=13857")
						Case "coucou2"
							ShellExecute("https://google.fr/")
						Case Else
							MsgBox(0,$text,$array[$y],1)
					EndSwitch

                Else
					ConsoleWrite($array[$y] &  " is not checked." & @CR)
                EndIf
		Next
	 Case $button1
		 For $y = 0 To UBound($array) - 1
			 If _IsChecked($array[$y]) <> $GUI_CHECKED Then
				 GUICtrlSetState($array[$y],$GUI_CHECKED)
			 Else
				 GUICtrlSetState($array[$y],$GUI_UNCHECKED)
			 EndIf

		 Next
	 Case $array[0] To $array[20]
		 $text = ControlGetText($Form1,"",$nMsg)
                If _IsChecked($nMsg) Then

					Switch $text
						Case "coucou1"
							ShellExecute("http://autoitscript.fr/forum/viewtopic.php?f=3&t=13857")
						Case "coucou2"
							ShellExecute("https://google.fr/")
						Case Else
							MsgBox(0, "", $text & "  is checked.",1)
					EndSwitch

                Else
                    MsgBox(0, "", $text &  " is not checked.",1)
                EndIf
 EndSwitch
WEnd
Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked

Re: variables dynamiques et ...

Posté : sam. 04 sept. 2021 10:53
par Ciol13
sympa, merci beaucoup, je n'y aurais même pas songé
Il ne reste plus qu'à adapter tout ça au reste du code

merci beaucoup

Re: variables dynamiques et ...

Posté : dim. 05 sept. 2021 11:26
par TommyDDR
Assign et Eval devraient être supprimés de l'aide, trop de gens les utilisent à tort :p

Re: variables dynamiques et ...

Posté : dim. 05 sept. 2021 12:05
par jchd
Devraient même être supprimés tout court. Je cherche encore une situation où l'un ou l'autre soient absolument nécessaires.

Re: variables dynamiques et ...

Posté : dim. 05 sept. 2021 14:17
par Nine
Faut pas jeter le bébé avec l'eau du bain. Assign est un outil parmi d'autres. Je ne me souviens pas l'avoir utilisé mais je ne serais pas prêt à l'abandonner pour quelques lubies que ce soit. La plupart de ceux qui s'en serve à profusion, c'est parce qu'ils n'ont pas encore découvert les arrays. Mais faut bien commencer à quelque part, non ?

Re: variables dynamiques et ...

Posté : ven. 10 sept. 2021 17:20
par TommyDDR
@jchd c'est utile dans un cas !
J'avais fait un UDF "_Inspect.au3" qui permet voir la valeur d'une variable
Comme le nom de la variable est entrée dans un champ texte, Eval est nécessaire (et un assigne dans le cas où on voudrait modifier les variables)
Mis à part ce cas très particulier... je n'en vois pas l'utilité ^^

Re: variables dynamiques et ...

Posté : ven. 10 sept. 2021 18:11
par jchd
Oui, mais si le noms des variables susceptibles d'être choisies sont à sélectionner depuis un combobox, on n'a plus besoin d'Eval.
C'est bien ainsi que se présentent tous les débogueurs typiques en usage.

Re: variables dynamiques et ...

Posté : lun. 13 sept. 2021 18:59
par TommyDDR
Ah oui ?
Je serais curieux de voir comment le mettre en pratique en AutoIt (si tu as un peu de temps :p)

Re: variables dynamiques et ...

Posté : mar. 14 sept. 2021 15:26
par jchd
Fait à l'arrache mais le principe est là :

Code : Tout sélectionner

Local $a = "aaa", $b = Binary(0x43), $c = 567

AdlibRegister(Show, 941)

For $i = 0 To 99
	$a &= 1
	$b += 1
	$c += 3
	Sleep(30000)
Next
Func Show()
	Static $OQP = 0
	If Not $OQP Then
		$OQP = 1
		Local $vars = [$a, $b, $c]
		; faire une combobx pour le choix de la variable à afficher
		; on récupère l'index de la variable choisie
		MsgBox(0, "", _VarDump($var[$k]))
		$OQP = 0
	EndIf
EndFunc

Re: variables dynamiques et ...

Posté : mar. 14 sept. 2021 23:44
par TommyDDR
Humm, ça demande d'ajouter à la main chaque variables dans $vars avant la compilation (contrairement au eval).