Page 1 sur 1
[R] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 10:30
par Y01
Bonjour,
J'ai créé une petite application qui récupère les fichiers TXT et JPG d'un dossier et qui créé dynamiquement un bouton par fichier permettant d'ouvrir ce dernier.
Je souhaite que la taille de la GUI se modifie dynamiquement afin de s'agrandir ou se rétrécir en fonction du nombre de fichiers et avec une taille maximum pour ne pas avoir un problème lorsqu'il y en a trop (des fichiers).
Lorsque la taille maximum est atteinte, j'aurais aimé qu'une seconde GUI soit créé avec les boutons ne pouvant être afficher dans la première GUI.
Et enfin, je souhaite pouvoir passer d'une GUI à l'autre grâce à des boutons "Flèche droite" ou "Flèche gauche".
Voici le code en question :
► 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")
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
J'ai regardé du coté du Guictrlsetdata comme indiqué
ici mais ça ne correspond pas à ce que je cherche.
J'ai pensé aussi à mettre une condition sur la taille de la variable $placement pour créer la seconde GUI mais je ne sais pas comment mettre cette idée en place.
Si quelqu'un à une piste, je suis preneur.
EDIT :
Oops, je viens de voir que j'ai mis mon poste au mauvais endroit, si quelqu'un peut le déplacer, je l'en remercie.
EDIT2 :
Voici le code final :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.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", 220, 250, 100, 200)
Local $idListview = GUICtrlCreateListView("Liste", 10, 10, 200, 220) ;,$LVS_SORTDESCENDING)
_GUICtrlListView_SetColumnWidth($idListview, 0, 170)
GUISetState(@SW_SHOW, $GUI)
Opt("GUIResizeMode", $GUI_DOCKALL)
Local $boutons[$files[0]]
Local $placement = 10
Local $droite = 10
For $i = 1 to $files[0]
$boutons[$i-1] = GUICtrlCreateListViewItem($files[$i], $idListview)
$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
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 10:56
par jguinch
WinMove permet de redimensionner une GUI
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 11:53
par Y01
En effet, j'ai modifié mon code en ajoutant un WinMove mais il y a un phénomène que je ne comprends pas.
En effet, si je met un grand nombre de fichier, l'écart entre chaque bouton s'agrandit et il y a toujours autant de bouton affiché quelque soit la taille de la GUI.
Code avec la modification :
► 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")
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
ConsoleWrite($files[$i] & @LF)
Next
Local $Longueur = $placement + 200
Local $Largeur = $placement + 100
winmove($GUI, "", "" , "" ,$Largeur , $Longueur)
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
Exemple avec la modification :
► Afficher le texte

- Exemple avec la modification
Exemple sans la modification :
► Afficher le texte

- Exemple sans la modification
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 14:11
par mikell
L'idée de la gui qui grandit avec le nombre de boutons + gui de secours en cas de surnombre c'est franchement pas un bon plan
2 suggestions vite fait :
1/ mettre une barre de scroll dans la gui
2/ ou mieux - et bien plus simple - utiliser une listview avec des items qui réagissent au clic
Le forum est bourré d'exemples
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 15:40
par TommyDDR
+1 avec l'idée de mikell, vous vous en sortirez mieux avec une listview.
Pour l'écart entre vos boutons qui s'agrandit c'est parcequ'uil y a un redimensionnement par défaut, si vous voulez l'éviter :
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 16:16
par Y01
Merci pour ces indices !
J'ai donc modifié mon code pour faire une listview. ça marche du tonnerre mais j'ai encore un petit soucis d'affichage.
En effet, je n'utilise que la première colonne mais elle ne s'affiche qu'à moitié par défaut. Il faut que je la redimensionne à la main et je trouve ça dérangeant.
Une idée ?
► Afficher le texte

- listeview.PNG (7.21 Kio) Vu 1739 fois
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 16:25
par jguinch
_GUICtrlListView_SetColumnWidth()
Re: [..] Taille dynamique d'une GUI
Posté : mar. 18 nov. 2014 16:27
par Y01
Merci jguinch, j'ai trouvé quelques secondes avant que tu ne postes une réponse
Je vais pouvoir clore cette demande.
Merci à tous.