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
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 :
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).