Bonjour,
J'ai commencé à créer une petite GUI avec gestion dynamique des boutons mais je bloque un peu pour "lier" les boutons à une action.
En effet, je souhaite que pour chaque fichier (TXT & JPG) situé dans un dossier précis, un bouton apparaisse avec le nom du fichier et qu'en cliquant sur le bouton le fichier s'ouvre.
Voici le bout de code que j'ai fait jusque la :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <Date.au3>
#include <DateTimeConstants.au3>
#include <GUIConstants.au3>
#Include <GuiEdit.au3>
#include <ComboConstants.au3>
#include <Array.au3>
#include <File.au3>
Global $chemin = @UserProfileDir & "\Downloads" ; Chemin où se situe les fichiers
Global $txt = _FileListToArray($chemin, "*.txt", 1, false) ; Récupération des fichiers TXT
Global $jpg = _FileListToArray($chemin, "*.jpg", 1, false) ; Récupération des fichiers JPG
Global $GUI = GUICreate("Liseuse", 617, 439, 1029, 162)
Example()
GUISetState(@SW_SHOW, $GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ; Lorsqu'on clic sur la croix de fermeture, on ferme l'application.
Exit
Case $boutontxt ; Essai de création d'un lien sur chaque bouton...
ShellExecute($chemin & "\" & $txt[$i])
EndSwitch
WEnd
Func Example()
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Mauvais chemin !")
Exit
EndIf
If @error = 4 Then
MsgBox($MB_SYSTEMMODAL, "", "Aucun fichier trouvé.")
Exit
EndIf
Global $totaltxt = $txt[0] + 1 ; Calcul du nombre d'element TXT
Global $totaljpg = $jpg[0] + 1 ; Calcul du nombre d'element JPG
Global $boucletxt = 1 ; Renommage de la sempiternel variable $i
Global $bouclejpg = 1
Global $placementtxt = 10 ; Place du premier bouton qui sera créé
While $boucletxt < $totaltxt ; On fais un tour de boucle par fichier TXT jusqu'au dernier
global $boutontxt = GUICtrlCreateButton($txt[$boucletxt] & @LF, 10, $placementtxt, 200, 20) ; Chaque fichier donne lieu à un bouton
$placementtxt = $placementtxt + 30 ; Chaque bouton est placé 30px en dessous du précédent.
$boucletxt = $boucletxt + 1 ; Incrémentation de la variable
WEnd
Global $placementjpg = $placementtxt ; A la fin de la boucle des fichiers TXT, on donne la valeur de la dernière position (+30) à la position de la premiere image.
While $bouclejpg < $totaljpg
global $boutonjpg = GUICtrlCreateButton($jpg[$bouclejpg] & @LF, 10, $placementjpg, 200, 20)
$placementjpg = $placementjpg + 30
$bouclejpg = $bouclejpg + 1
WEnd
EndFunc
(J'ai récupérer "bêtement" les includes d'un programme beaucoup plus gros que j'avais déjà fait sans savoir les quels m'étaient indispensables.)
J'ai vainement tenter de faire un case afin de "lier" les boutons aux fichiers mais ça ne fonctionne pas.
Si quelqu'un a une piste, j'en serais très reconnaissant.
Cordialement,
Y01
EDIT : Je rajoute le code fonctionnel et corrigé grâce à Mikell
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <File.au3>
Global $chemin = @UserProfileDir & "\Downloads" ; Chemin où se situe les fichiers
Global $files = _FileListToArrayRec($chemin, "*.txt;*.jpg", 1) ; Récupération des fichiers
Global $GUI = GUICreate("Liseuse", 617, 439, 1029, 162)
GUISetState(@SW_SHOW, $GUI)
Local $boutons[$files[0]]
Local $placement = 10
For $i = 1 to $files[0]
$boutons[$i-1] = GUICtrlCreateButton($files[$i] & @LF, 10, $placement, 200, 20)
$placement = $placement + 30
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ; Lorsqu'on clic sur la croix de fermeture, on ferme l'application.
Exit
EndSwitch
For $i = 1 to $files[0]
If $nMsg = $boutons[$i-1] Then ShellExecute($chemin & "\" & $files[$i])
Next
WEnd