[R] ListView adapter les colonnes

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

[R] ListView adapter les colonnes

#1

Message par Ks10 »

Bonjour à tous !

Je but sur un petit soucis d'esthétique au niveau de la listview.
Observer cette image :
► Afficher le texte
Comme vous avez pu le constater, j'ai plusieurs colonnes test mais après ces colonnes, il y a un grand vide blanc.
Je voudrais savoir si il était possible, d'adapter les colonnes pour faire en sorte qu'il comble l'espace blanc ? Qu'il se redimensionne automatiquement.

Ps : J'ai tenter de mettre des espaces comme ça :
GuiCtrlCreateListView("test |test |", $list1) etc...

Mais cela laisse 3 petits points à un moment.

Merci d'avance
Modifié en dernier par Ks10 le mar. 06 mai 2014 12:01, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] ListView adapter les colonnes

#2

Message par jguinch »

Regarde dans la doc, la fonction _GUICtrlListView_SetColumnWidth :)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [..] ListView adapter les colonnes

#3

Message par Ks10 »

Cette commande répond totalement à mes besoins. Merci :)

Sujet résolu.

EDIT : Je me permet d'éditer pour rajouter quelques petites précisions :

Cette commande permet d'ajuster manuellement la largeur des colonnes. Cependant elle n'est pas automatique.
Voici un petit bout de code qui va vous permettre d'ajuster tous sa un peu plus facilement.

Donc on crée notre liste view :

Code : Tout sélectionner

GuiCtrlCreateListView("Colonne1|Colonne2|etc...", 0, 0, 785, 600)
Ensuite on effectue le calcul qui va nous permettre d'ajuster automatiquement les colonnes et on déclare tous sa dans une
variable :

Code : Tout sélectionner

$autosize = 785 (785 étant la largeur de la liste view) / 3 (3 étant égale au nombre de colonne) + 10 (10 étant une valeur d'ajustement final si il y a encore de l'espace dans votre colonne de fin)
Ce qui donne au final :

Code : Tout sélectionner

$list1 = GuiCtrlCreateListView("Colonne1|Colonne2|etc...", 0, 0, 785, 600)

$autosize = 785 / 3 + 10
_GUICtrlListView_SetColumnWidth($List1, 0, $autosize)
_GUICtrlListView_SetColumnWidth($List1, 0, $autosize)
_GUICtrlListView_SetColumnWidth($List1, 0, $autosize)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] ListView adapter les colonnes

#4

Message par mikell »

Ks10 a écrit :Cette commande permet d'ajuster manuellement la largeur des colonnes. Cependant elle n'est pas automatique.
ça dépend de ce que tu appelles automatique... ça l'est si tu utilises un de ces paramètres
$LVSCW_AUTOSIZE - Automatically sizes the column.
$LVSCW_AUTOSIZE_USEHEADER - Automatically sizes the column to fit the header text.


Par contre ta méthode n'est pas de l'automatisme, c'est un pré-calcul qui n'est valable que si on souhaite que toutes les colonnes aient la même largeur (ce qui en pratique est rarement le cas)
Je suggère aussi de tenir compte dans ce calcul des ~30 px de la barre de scroll vertical :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [R] ListView adapter les colonnes

#5

Message par Ks10 »

ça dépend de ce que tu appelles automatique... ça l'est si tu utilises un de ces paramètres
$LVSCW_AUTOSIZE - Automatically sizes the column.
$LVSCW_AUTOSIZE_USEHEADER - Automatically sizes the column to fit the header text.
J'ai essayer ces deux commandes à la fin mais sa n'a pas marché, enfin sa a redimentionné mais les colonnes était plus petit que la normal.
Oui dans mon cas je voulait que toutes les colonnes avait la même largeur, car les données qui s'y trouvent ne sont pas de taille variable.

Je me suis mal exprimer, ce pré-calcul permet effectivement d'attribuer la même largeur à toutes les colonnes.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [R] ListView adapter les colonnes

#6

Message par GaRydelaMer »

Bonjour

j'ai cette fonction pour réaliser ce que tu souhaite:

Code : Tout sélectionner

Func My_GUICtrlListView_AutoSizeColumns($hWnd, $iMini = 80)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Local $hHeader = _GUICtrlListView_GetHeader($hWnd), $iHeader_Width, $iData_Width
    _GUICtrlListView_BeginUpdate($hWnd)
    For $iIndex = 0 To _GUICtrlListView_GetColumnCount($hWnd) - 1
        If _GUICtrlListView_GetColumnWidth($hWnd, $iIndex) = 0 Then ContinueLoop
        _GUICtrlListView_SetColumnWidth($hWnd, $iIndex, $LVSCW_AUTOSIZE_USEHEADER)
        $iHeader_Width = _GUICtrlListView_GetColumnWidth($hWnd, $iIndex)
        If @OSVersion = "WIN_XP" And $iIndex < _GUICtrlListView_GetColumnCount($hWnd) - 1 Then
            If _GUICtrlHeader_GetItemFlags($hHeader, $iIndex) / 2 > 1 Then $iHeader_Width += 30
        EndIf
        _GUICtrlListView_SetColumnWidth($hWnd, $iIndex, $LVSCW_AUTOSIZE)
        $iData_Width = _GUICtrlListView_GetColumnWidth($hWnd, $iIndex)
        If $iHeader_Width > $iData_Width Then
            _GUICtrlListView_SetColumnWidth($hWnd, $iIndex, $iHeader_Width)
        EndIf
        If _GUICtrlListView_GetColumnWidth($hWnd, $iIndex) < $iMini Then
            _GUICtrlListView_SetColumnWidth($hWnd, $iIndex, $iMini)
        EndIf
    Next
    _GUICtrlListView_EndUpdate($hWnd)
EndFunc   ;==>My_GUICtrlListView_AutoSizeColumns
 
Avatar du membre
Ks10
Niveau 6
Niveau 6
Messages : 282
Enregistré le : mer. 25 avr. 2012 20:38
Status : Hors ligne

Re: [R] ListView adapter les colonnes

#7

Message par Ks10 »

Ah c'est gentil pour cette fonction. Désolé du retard en passant.
Répondre