Page 1 sur 1
[R] Compteur de checkbox
Posté : mer. 19 nov. 2008 17:11
par AlbatorV
Bonjour, j'ai créé un GUI avec creation de checkbox en fonction du nombre de disque reseau trouvé.
Code : Tout sélectionner
$var = DriveGetDrive( "NETWORK" )
$nb = $var[0]
$h = 75
If NOT @error Then
For $i = 1 to $var[0]
GuiCtrlCreateCheckbox("Lecteur " & $var[$i], 25, $h, 200, 20)
$h = $h + 20
Next
EndIf
J'ai un bouton OK et qd je clique sur ce bouton je voudrais supprimer supprimer le lecteur a l'aide de la fonction 'DriveMapDel'.
Code : Tout sélectionner
Func OK()
Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(36,"Alerte...","Voulez-vous vraiment supprimer les lecteurs cochés ?")
Select
Case $iMsgBoxAnswer = 6 ;oui
msgbox(0,"","Nb de checkbox : " & $nb)
;DriveMapDel("X:")
Case $iMsgBoxAnswer = 7 ;Non
Exit
EndSelect
EndFunc
Je ne sais pas comment faire ? Je voudrais faire une boucle de 1 jusqu'au nombre de total de checkbox et si la checkbox est cochée, suppression de disque...
Merci d'avance
Re: Compteur de checkbox
Posté : mer. 19 nov. 2008 17:52
par timmalos
Bonjour ,
Je t'invite à lire
les règles de présentation d'un message au plus vite, afin de faciliter le travail de l'equipe de modération.
Re: Compteur de checkbox
Posté : mer. 19 nov. 2008 18:34
par Tlem
Il vous faudra pour commencer attribuer 'dynamiquement' une variable pour chaque création d'un contrôle
CheckBox (Allez faire un tour par ici pour avoir une idée de comment faire :
http://www.autoitscript.fr/forum/viewto ... f=3&t=1275).
Une fois le handle de chaque contrôle récupéré, vous pourrez intervenir sur celui-ci.
Re: [..] Compteur de checkbox
Posté : mer. 19 nov. 2008 21:45
par AlbatorV
Je pense avoir réussi, je testerai demain au boulot avec des lecteurs reseau...
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
_Main()
Func _Main()
; GUI
GuiCreate("Sample GUI", 100, 400)
$var = DriveGetDrive( "ALL" ) ;NETWORK pour les lecteurs reseau
$nb = $var[0]
$h = 60
If NOT @error Then
For $i = 1 to $var[0]
Assign("chkb"&$i, GuiCtrlCreateCheckbox($var[$i], 25, $h, 200, 20),2)
$h = $h + 20
Next
EndIf
; BUTTON
$OK = GuiCtrlCreateButton("OK", 10, 10, 50, 30)
; GUI MESSAGE LOOP
GuiSetState()
Do
$msg = GUIGetMsg()
If $msg = $OK Then
$iMsgBoxAnswer = MsgBox(36,"Alerte...","Voulez-vous vraiment supprimer les lecteurs cochés ?")
Select
Case $iMsgBoxAnswer = 6 ;oui
For $u=1 to $nb
if GUICtrlRead(eval("chkb"&$u)) = 1 Then
; DriveMapDel($var[$u])
MsgBox(0, "", "Lecteur " & $var[$u] & " coché")
EndIf
Next
Exit
Case $iMsgBoxAnswer = 7 ;Non
Exit
EndSelect
EndIf
Until $msg = $GUI_EVENT_CLOSE
EndFunc
Re: [..] Compteur de checkbox
Posté : mer. 19 nov. 2008 22:49
par Tlem
C'est effectivement une solution qui fonctionne.
Il est vrai aussi que je n'avais pas fait attention que le nombre de ChekBox est déterminé au début du script par la fonction
DriveGetDrive et dans ce cas vous pouvez passer par une autre méthode.
Voici comment j'aurais écris le script :
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$var = DriveGetDrive("ALL")
If IsArray($var) Then
$GUI = GuiCreate("Sample GUI", 170, 400)
; BUTTON
$OK = GuiCtrlCreateButton("OK", 10, 10, 50, 30)
Dim $CB[$var[0] + 1]
Dim $h = 75
If Not @error Then
For $i = 1 To $var[0]
$CB[$i] = GUICtrlCreateCheckbox($var[$i] & " <- CheckBox" & $i, 25, $h, 200, 20)
$h = $h + 20
Next
EndIf
GUISetState(@SW_SHOW)
Else
MsgBox(64, "Stop", "Aucun lecteur réseau trouvé ")
Exit
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $OK
OK()
EndSwitch
WEnd
Func OK()
Switch MsgBox(36, "Alerte...", "Voulez-vous vraiment supprimer les lecteurs cochés ?")
Case 6 ;oui
Local $CBC
For $i = 1 to $Var[0]
If BitAND(GUICtrlRead($CB[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
$CBC &= "$ChkBox" & $i & @CRLF
EndIf
Next
MsgBox(0, "", "Nb de checkbox : " & $var[0] & @CRLF & "Liste des checkbox cochées : " & @CRLF & $CBC)
;DriveMapDel("X:")
Case 7 ;Non
Exit
EndSwitch
EndFunc ;==>OK
Re: [..] Compteur de checkbox
Posté : jeu. 20 nov. 2008 14:07
par AlbatorV
J'ai finalement utilisé votre méthode. Mais il y a 2 chose que je n'arrive pas à faire.
1) Récuperer le texte des checkbox pour les afficher dans le message d'alerte au lieu des lettres de lecteurs.
2) Mettre à jour le GUI après suppression des lecteurs (ne plus afficher les lecteurs supprimés).
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#NoTrayIcon
Global $var = DriveGetDrive("NETWORK")
Main()
Func Main()
If IsArray($var) Then
Dim $h = 75
Dim $hauteur = $var[0] * 20 + 150
GuiCreate("Lecteurs reseau...", 240, $hauteur)
GuiSetIcon(@SystemDir & "\SHELL32.dll", 11)
; LABEL
GuiCtrlCreateLabel("Cochez le(s) lecteur(s) à supprimer et cliquez" &@CRLF & "sur le bouton OK.", 10, 10, 230, 30)
; BUTTON
$Supprimer = GuiCtrlCreateButton("Supprimer", 55, $hauteur - 45, 60, 30)
$Quitter = GuiCtrlCreateButton("Quitter", 135, $hauteur - 45, 60, 30)
; GROUP
GUICtrlCreateGroup("Liste des lecteurs", 10, 50, 220, $hauteur - 110)
Global $CB[$var[0] + 1]
If Not @error Then
For $i = 1 To $var[0]
$dossier = StringReplace(DriveMapGet($var[$i]),"\\","")
$disque = StringSplit($dossier,"\",1)
$CB[$i] = GUICtrlCreateCheckbox(StringUpper($var[$i]) & " ( " & $disque[2] & " sur " & $disque[1] & " )", 25, $h, 200, 20)
$h = $h + 20
Next
EndIf
GUISetState(@SW_SHOW)
Else
MsgBox(64, "Alerte...", "Aucun lecteur reseau installé...")
Exit
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Supprimer
Supprimer()
Case $Quitter
Quitter()
EndSwitch
WEnd
EndFunc
Func Supprimer()
Local $nb = 0
Local $CBC
For $i = 1 to $Var[0]
If BitAND(GUICtrlRead($CB[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
$CBC &= $var[$i] & @CRLF
$nb = $nb + 1
EndIf
Next
If $nb = 0 Then
MsgBox(48,"Erreur","Vous devez d'abord sélectionner au moins un disque reseau.")
EndIf
Switch MsgBox(36, "Confirmation...", "Voulez-vous vraiment supprimer les lecteurs suivant : " & @CRLF & @CRLF & $CBC)
Case 6 ;oui
For $i = 1 to $Var[0]
If BitAND(GUICtrlRead($CB[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
DriveMapDel($var[$i])
EndIf
Next
Exit
Case 7 ;Non
GUISetState(@SW_SHOW)
EndSwitch
EndFunc ;==>OK
Func Quitter()
Exit
EndFunc
Re: [..] Compteur de checkbox
Posté : jeu. 20 nov. 2008 22:09
par Tlem
AlbatorV a écrit :Récuperer le texte des checkbox
Utilisez la commande
GUICtrlRead(controlID[,advanced]) avec advanced à 1 (voir la doc de cette fonction).
AlbatorV a écrit :Mettre à jour le GUI après suppression des lecteurs (ne plus afficher les lecteurs supprimés)
Utilisez la commande
GUICtrlDelete (controlID) après la suppression du lecteur.
Sinon, placez dans une fonction les lignes partant de la lecture des lecteurs, à l'affichage de la GUI.
Après la suppression de vos lecteurs, supprimez votre GUI (
GUIDelete([winhandle]) ) puis relancez votre fonction.