Page 1 sur 1
[R] Checkbox dynamique avec un fichier ini
Posté : jeu. 04 août 2011 08:38
par luxus
Bonjour à tous
Je voudrais générer des checkbox dynamique basé sur un fichier ini.
Je m'explique :
Ce script servira à installer des packages sur des postes clients de plusieurs sites. J'ai regardé un peu partout sur le net et j'ai trouvé ceci :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <file.au3>
$Dir = @ScriptDir & '\Packs\'
$Packs = _FileListToArray($Dir)
Dim $Checks[$Packs[0] + 1]
$Height = ($Packs[0] * 20) + 50
If $Height > @DesktopHeight Then
MsgBox(0x0,"Erreur", "Il y a plus de fichiers que ne peut en contenir la fenêtre ", 3)
$Height = @DesktopHeight - 50
EndIf
GUICreate("Nombre de packs trouvés: " & $Packs[0], 300, $Height)
For $i = 1 To $Packs[0]
$Height = $i * 20
$Checks[$i] = GUICtrlCreateCheckbox($Packs[$i], 5, $Height, 150, 15)
Next
$btn = GUICtrlCreateButton("Start", 200, 30, 60, 30)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $GUI_EVENT_CLOSE
Exit
Case $Msg = $btn
for $x = 1 to $Packs[0]
If _IsChecked($Checks[$x]) Then
;~ do something Run or ??
MsgBox(0x0,"#=" &$x,"control = " & GUICtrlRead($Checks[$x] & " ", 1), 2)
EndIf
Next
EndSelect
WEnd
Func _IsChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Mon problème est que ce bout de code liste les fichiers .exe présent dans un répertoire, ce qui ne me convient pas, mais je n'arrive pas à le modifier pour qu'il me récupère les clés de mon fichier ini.
Si je comprends bien, il faut récupérer dans la variable $packs la liste de toutes les clés de mon fichier ini pour qu'il puisse créer les checkbox.
Dans l'aide d'autoIt je trouve bien les commandes pour pouvoir lire les sections ou les valeurs mais pas les clés… Est-ce normal ou c'est moi qui est loupé quelque chose?
Forme de mon fichier .ini
[Nom du site]
Nom du programme = chemin du programme
Ce que je veux récupérer c'est tous les "Nom du programme" que recense mon fichier ini
J'espère avoir été claire dans mon explication^^
Merci pour vos réponses

Re: [...] Checkbox dynamique avec un fichier ini
Posté : jeu. 04 août 2011 08:41
par Tlem
Ce type de code à déjà été présenté deux ou trois fois par des membres qui voulaient faire des installations automatisées de divers logiciels.
Une bonne recherche sur le forum s'impose !
Re: [...] Checkbox dynamique avec un fichier ini
Posté : jeu. 04 août 2011 10:47
par jl56
Bonjour
j'avais fournit un exemple regarde ici
http://www.autoitscript.fr/forum/viewto ... f=6&t=6347
cela traite de la génération d'un menu mais tu devrais pouvoir l'adapter
A+ JL56
Re: [...] Checkbox dynamique avec un fichier ini
Posté : jeu. 04 août 2011 11:48
par luxus
Du coup je me suis replongé dans la recherche sur forum mais je n'avais pas vu le tien.
Je regarde ça ce midi.
Merci pour le lien

Re: [...] Checkbox dynamique avec un fichier ini
Posté : jeu. 04 août 2011 19:37
par luxus
Effectivement, avec ça je devrais être capable de l'adapter.
Je mettrais le sujet résolu en fin de weekend au cas ou j’aurais une petite question dessus :p
En tout cas merci bien

Re: [...] Checkbox dynamique avec un fichier ini
Posté : jeu. 11 août 2011 13:14
par luxus
J'ai fusionné 2 scripts en 1 pour pouvoir obtenir ce que je veux mais j'ai des erreurs
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
$var = IniReadSection(@ScriptDir & '\menuauto.ini', "site1")
If @error Then
MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
For $i = 1 To $var[0][0]
MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1])
Next
EndIf
Dim $Checks[$var[0] + 1]
$Height = ($var[0] * 20) + 50
If $Height > @DesktopHeight Then
MsgBox(0x0,"Erreur", "Il y a trop pour votre ecran", 3)
$Height = @DesktopHeight - 50
EndIf
GUICreate("Nombre de progs: " & $var[0], 300, $Height)
For $i = 1 To $var[0]
$Height = $i * 20
$Checks[$i] = GUICtrlCreateCheckbox($var[$i], 5, $Height, 150, 15)
Next
$btn = GUICtrlCreateButton("Start", 200, 30, 60, 30)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $GUI_EVENT_CLOSE
Exit
Case $Msg = $btn
EndSelect
WEnd
Func _IsChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Mon erreur se situe à ligne 14 :
► Afficher le texte
C:\Script\Projet\Copie de Test3.au3 (14) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$Height = ($var[0] * 20) + 50
$Height = (^ ERROR
C'est la première fois que je me frotte aux arrays et j'avoue que je galère bien... Si une âme charitable veux bien me donner quelques explications, je suis preneur

Re: [...] Checkbox dynamique avec un fichier ini
Posté : jeu. 11 août 2011 16:32
par Tlem
IniReadSection vous renvoi un tableau 2D, mais vous utilisez un tableau 1D, donc AutoIt ne comprend pas !
Pourtant dans la première boucle vous partez bien, puisque vous faites :
mais on ne sais pas pourquoi, d'un coup d'un seul, vous passez d'un tableau 2D à un tableau 1D.

Re: [R] Checkbox dynamique avec un fichier ini
Posté : jeu. 11 août 2011 21:57
par luxus
Autant pour moi^^ Merci pour votre remarque, j'ai un peu bêtement recopié le script sans m'en inquiété :/
Je ne risque pas de refaire la même bourde de si tôt

Re: [R] Checkbox dynamique avec un fichier ini
Posté : jeu. 11 août 2011 22:23
par luxus
Au cas où qq chercherait ce code :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
$var = IniReadSection(@ScriptDir & '\menuauto.ini', "site1")
If @error Then
MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
For $i = 1 To $var[0][0]
;~ MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1])
Next
EndIf
;~ MsgBox(0, "", "Key: " & $var[0][0])
Dim $Checks[$var[0][0] + 1]
$Height = ($var[0][0] * 20) + 50
If $Height > @DesktopHeight Then
MsgBox(0x0,"Erreur", "Il y a trop pour votre ecran", 3)
$Height = @DesktopHeight - 50
EndIf
GUICreate("Nombre de progs: " & $var[0][0], 300, $Height)
For $i = 1 To $var[0][0]
$Height = $i * 20
$Checks[$i] = GUICtrlCreateCheckbox($var[$i][0], 5, $Height, 150, 15)
Next
$btn = GUICtrlCreateButton("Start", 200, 30, 60, 30)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $GUI_EVENT_CLOSE
Exit
Case $Msg = $btn
EndSelect
WEnd
Func _IsChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED
EndFunc