Page 1 sur 1
[R] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 14:22
par EricF
Bonjour,
Je commence l'utilisation de Koda. J4ai réussi à faire une fenêtre retaillable. Comment agrandir le contenu (une zone d'onglet dans mon test) automatiquement ?
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 14:27
par Tlem
Vous devez surveiller la taille de votre GUI en utilisant une méthode simple tel que la comparaison de la taille à un instant T puis T + 1 ou bien de manière plus évoluée, vous devez utiliser une CallBack pour surveiller l'action du redimensionnement et adapter celle des éléments intérieur.
Vous trouverez cela en utilisant le moteur de recherche du forum.
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 14:53
par EricF
MErci, je vais voir ça.
Pour rendre scrollable une zone, faut-il rajouter WS_VSCROLL dans l'inspecteur d'objets de Koda ? J'ai testé, mais l'ascenseur reste fixe.
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 16:03
par mikell
EricF a écrit :Comment agrandir le contenu (une zone d'onglet dans mon test) automatiquement ?
Tu as essayé GUICtrlSetResizing ?
Pour le scroll, ça dépend de ce que tu appelles "une zone"... une gui ? un controle ?
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 16:12
par EricF
En l'occurence, une zone d'onglets. Le callback ne semble pas simple à mettre en place pour l'instant, je préfère donc mettre uen scrollbar au cas où le contenu dépasse la hauteur. Pour l'instant, le résultat n'est pas top :-/
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 18:10
par mikell
Heu, la solution la plus simple reste quand même de faire des boutons plus petits, ou des boutons radio dans un groupe, ça prend moins de place ^^
Une tab scrollable ça risque d'être chaud
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 18:30
par EricF
LA disposition, c plus pour tester, la taille et l'écartement des boutons seront adaptés à la fin. LE problème est que je vais avoir besoin de créer un bon nombre de boutons dynamiquement. Mais je v essayer de les ranger sur plusieurs colonnes, ça devrait être facile en se basant sur le nombre de boutons à générer.
Sinon, si je mets ma zone d'onglets dans un groupe, je peux facilement faire scroller le groupe si j'adapte la hauteur des onglets selon le nombre de boutons ?
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 19:29
par mikell
Facilement, ça j'ai comme un gros doute...
Mais le moment venu si tu postes un script fonctionnel comme exemple on testera et on verra bien si c'est faisable
Re: [..] Agrandir une zone en même temps que la fenêtre
Posté : lun. 23 avr. 2012 19:43
par EricF
Ok, je verrais déjà ce que je peux faire.
Merci poru vos réponses.
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : lun. 30 avr. 2012 19:26
par EricF
Deux problèmes se posent :
1. Problème de déclaration de variables de type Array pour les _FileListToArray(). J'ai zieuté un script qui fait globalement la même chose, la déclaration se faisait après le _FileListToArray(), mais pour ma part, ça semble difficile à faire.
Code : Tout sélectionner
For $i = 1 To $dossiers[0]
; = $liste_fichiers & $dossiers[$i] & @CRLF
$TabSheet[$i] = GUICtrlCreateTabItem($dossiers[$i])
$fichiers = _FileListToArray("./" & $fichiers[$i] & "/", "*.rdp", 1) ;On liste les fichiers RDP
For $j = 1 To $fichiers[0]
;$Button[$j] = GUICtrlCreateButton($fichiers[$j], $pos_haut, 72, 113, 33)
$var = $var & $fichiers[$j] & @CRLF
$pos_haut = $pos_haut+20
Next
Next
2. Comment affecter les actions aux boutons, ou plutôt comment générer les différents case pour mes boutons ?
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : lun. 30 avr. 2012 20:27
par mikell
1 - si tu mets 'Global $fichiers ' en tête de script ça devrait faire l'affaire
2 - La 1ère boucle For liste les dossiers et fait les tabs, la 2ème liste les fichiers et fait les boutons, donc a priori il te faut une array à 2 dimensions, $Button[$i][$j]
Quelle doit être l'action associée aux boutons ?
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : lun. 30 avr. 2012 21:50
par EricF
shellexecute
Maintenant, j'obtiens un "Subscript used with non-Array variable." sur la 3è ligne du code ($tabsheet). $dossiers et $tabsheet sont définis en global
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : lun. 30 avr. 2012 22:04
par TopXm
Hello,
Si j'ai bien pigé tu veux en fait lister puis ouvrir tes fichiers RDP lorsque tu les cliques ?
Dans ce cas passer par des boutons me parait lourd non ? Pourquoi ne pas passer par une list/listview/combo comme ça tu ne galères pas avec la gestion du positionnement des boutons

Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : lun. 30 avr. 2012 22:13
par EricF
TopXm a écrit :Dans ce cas passer par des boutons me parait lourd non ? Pourquoi ne pas passer par une list/listview/combo comme ça tu ne galères pas avec la gestion du positionnement des boutons

Avec sélection multiple ? J'avais aussi penser passer par des checkboxes. A voir si c complexe avec des boutons.
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : mar. 01 mai 2012 09:51
par TopXm
Hello
EricF a écrit :Avec sélection multiple ? J'avais aussi penser passer par des checkboxes. A voir si c complexe avec des boutons.
Le moins lourd à mon avis c'est une ListView avec cases à cocher. J'ai adapté vite fait un bout de code que j'avais dans ma besace
► Afficher le texteLister Fichiers/Dossiers
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <array.au3>
#include <GuiListView.au3>
#include "_FileListToArrayEx.au3"
Global Const $Title = 'Exemple pour Eric'
Global Const $MyFolder = @DesktopDir & '\Dev' ;<= A modifier là c'est pour l'exemple
Global Const $MyFilter = '*.exe' ;<= A modifier là c'est pour l'exemple
Global $nFolder = '', $hFile
Global $ArrFiles[1][2] ;<= Array deux dim Col0=> Dossier / Col1=> Fichier
Global $ArrFolder[1] ;<=Array pour les dossiers
_GuiPrepare()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $hTab
_LoadListview(GUICtrlRead($hTab))
Case $BtSel
_SetSelection(True)
Case $BtUnsel
_SetSelection(False)
EndSwitch
WEnd
Func _GuiPrepare()
; SplashTextOn($Title, 'Chargement GUI, Wait ...')
Global $MyGui = GUICreate("PourEric", 613, 474, 192, 124)
Global $hTab = GUICtrlCreateTab(8, 8, 593, 22)
GUICtrlCreateTabItem("")
Global $hLstV = GUICtrlCreateListView("Nom et chemin du fichier ", 8, 30, 593, 401, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 580)
Global $BtSel = GUICtrlCreateButton("Sélectionner tout", 8, 440, 120, 25)
Global $BtUnsel = GUICtrlCreateButton("Annuler Sélection", 140, 440, 120, 25)
_LoadFilesAndFolders()
_LoadListview(0) ;=>On simule le clic sur le 1er onglet
; SplashOff()
GUISetState(@SW_SHOW)
EndFunc ;==>_GuiPrepare
; On liste les dossiers/fichiers et alimente la barre d'onglets
Func _LoadFilesAndFolders($nFolder = @DesktopDir)
Dim $ArrFile[1][2]
$ArrFile[0][0] = 0
Local $nArr = _FileListToArrayEx($MyFolder, $MyFilter, 0, 2) ;=> Recherche des fichiers + Récursivité
If @error Then
MsgBox(16, $Title, 'Aucun fichier ne correspond')
Return SetError(1)
EndIf
Local $I
Local $J = 0 ;=> Compteur de dossier pour $ArrFolder
Local $K = 0 ;=> Compteur de fichiers pour $ArrFiles
Local $xFolder ;=> Dossier affiché dans l'onglet
Local $aFolder ;=> Reçoit le nom du dossier en cours
Local $hFolder = '' ;=> Mémorise le dernier dossier lu
For $I = 1 To $nArr[0] ;=> On parcours le tableau
$aFolder = StringLeft($nArr[$I], StringInStr($nArr[$I], '\', 0, -1) - 1) ;=> Extrait le nom du dossier
If $aFolder <> $hFolder Then ;=> On est sur un nouveau dossier
$xFolder = StringMid($aFolder, StringInStr($aFolder, '\', 0, -1) + 1, _
StringLen($aFolder))
GUICtrlCreateTabItem($xFolder) ;=> Création d'un onglet
$hFolder = $aFolder ;=> Mémorise le dossier
;On alimente $ArrFolder
$J += 1
ReDim $ArrFolder[$J]
$ArrFolder[$J-1] = $aFolder
EndIf
;Ajout du fichier dans l'array $ArrFiles
$K += 1
$ArrFiles[0][0] = $K
ReDim $ArrFiles[$K+1][2]
$ArrFiles[$K][0] = $aFolder
$ArrFiles[$K][1] = $nArr[$I]
Next
;_ArrayDisplay($ArrFiles)
EndFunc ;==>_LoadFilesAndFolders
; On alimente les fichiers selon l'index de l'onglet cliqué
Func _LoadListview($Index)
;on vide la LSTV
_GUICtrlListView_DeleteAllItems($hLstV)
;on récupère le nom du dossier et on explore $ArrFile pour les fichiers concernés
Local $aFolder = $ArrFolder[$Index]
Local $Ind = _ArraySearch($ArrFiles, $aFolder)
If @error Then Return SetError(1)
Local $I
For $I = $Ind To $ArrFiles[0][0]
If $ArrFiles[$I][0] <> $aFolder Then ExitLoop
GUICtrlCreateListViewItem($ArrFiles[$I][1], $hLstV)
Next
EndFunc
; Coche / Décoches les lignes de la ListView
Func _SetSelection($Checked = True)
Local $I
For $I = 0 To _GUICtrlListView_GetItemCount($hLstV)-1
_GUICtrlListView_SetItemChecked($hLstV, $I, $Checked)
Next
EndFunc
@+
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : mar. 01 mai 2012 10:02
par EricF
Merci, je vais regarder ça. Dommage, je ne peux pas visualiser le résultat.
Re: [R] Agrandir une zone en même temps que la fenêtre
Posté : jeu. 03 mai 2012 11:21
par EricF
J'ai réussi à résoudre tous les problèmes rencontrés.
Pour la définition des arrays, j'ai défini les variables en global avec un élément.
Ensuite, à l'intérieur des boucles, je rajoute des éléments avec _ArrayAdd().
Code : Tout sélectionner
For $i = 1 To $dossiers[0]
_ArrayAdd($TabSheet, $dossiers[$i]) ;On incrémente le nombre d'éléments du tableau
$TabSheet[$i] = Guictrlcreatetabitem($dossiers[$i])
$fichiers = _FileListToArray("./" & $dossiers[$i] & "/", "*.rdp", 1) ;On liste les fichiers RDP
For $j = 1 To $fichiers[0]
_ArrayAdd($checkboxes, $fichiers[$j]) ;On incrémente le nombre d'éléments du tableau
GUICtrlCreateCheckbox($fichiers[$j], 25, $pos_haut)
Les boutons ont été remplacés par des checkboxes, plus faciles à gérer ici. Il reste à récupérer les cases cochées et à gérer les errreurs, plus quelques petites choses. Mais le plus gros est fait
Merci pour vos réponses.