[R] Masquer des lignes dans une listview

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

[R] Masquer des lignes dans une listview

#1

Message par eric »

Bonjour,

J'essaie de faire un petit bout de programme avec une liste de fichiers dans une listview.

2 Colonnes, le nom du fichier et son format. (doc ou xls)

2 checkbox en bas, une nommée doc, une autre nommée xls.

J'aimerais pouvoir réaliser un filtre, quand la checkbox doc est cochée j'aimerais afficher les fichiers doc et si elle est décochée que les fichiers doc disparaissent de la liste.

Même chose pour les xls.

Est ce possible ?

Merci

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

GUICreate("liste", 200, 200)
$listview = GUICtrlCreateListView("Nom|Format", 10, 10, 180, 150)
GUICtrlCreateListViewItem("fichier1|doc", $listview)
GUICtrlCreateListViewItem("fichier2|xls", $listview)
GUICtrlCreateListViewItem("fichier3|doc", $listview)
GUICtrlCreateListViewItem("fichier4|doc", $listview)
GUICtrlCreateListViewItem("fichier5|xls", $listview)

$doc = GUICtrlCreateCheckbox("doc", 10, 170)
GUICtrlSetState ($doc,$GUI_CHECKED)
$xls = GUICtrlCreateCheckbox("xls", 70, 170)
GUICtrlSetState ($xls,$GUI_CHECKED)

GUISetState(@SW_SHOW)

_GUICtrlListView_RegisterSortCallBack($listview)

While 1
    $msg = GUIGetMsg()

    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $listview
            ; reclasser les colonnes
            _GUICtrlListView_SortItems($listview, GUICtrlGetState($listview))
        Case $msg = $doc

        Case $msg = $xls


    EndSelect
WEnd

_GUICtrlListView_UnRegisterSortCallBack($listview)
Modifié en dernier par eric le sam. 05 juin 2010 16:23, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#2

Message par Tlem »

Pour faire cela, je vous conseil de mettre tous les fichiers dans un tableau, puis en fonction de votre/vos sélections, de peupler votre ListView. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#3

Message par eric »

Bonjour Tlem,

Alors l'idée serait de mettre le contenu de la listview dans un tableau, puis de faire le ménage dans le tableau et de le réinjecter dans la listview.

Alors question bête mais comment met on le contenu d'une listview dans un tableau ?
Pour l'inverse ça va il y a _GUICtrlListView_AddArray

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#4

Message par Tlem »

Hé bien, vous partez de l'idée d'un ListView que vous avez peuplé.
Mais si au lieu de cela vous travaillez directement avec le tableau ... :roll:

Donc vous partez d'un tableau existant et avec celui-ci, vous peuplé le contrôle ListView. ;)

Par contre, est-ce que le fait de séparer le nom de fichier et son extension est indispensable ?
On peut faire avec, mais ça complique sensiblement la gestion. :mrgreen:
► Afficher le texte
Une fois le tableau obtenu, vous en faites ce que vous voulez. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#5

Message par eric »

Oui mais si je part directement depuis le tableau c'est une image un peu figée

Je m'explique : Les lignes peuvent être réordonnées en cliquant sur la colonne, du coup l'ordre n'est plus le même que dans le tableau d'origine.
Et puis il se peut aussi que j'ajoute un bouton pour supprimer une ligne, donc la aussi la listview ne correspondra plus au tableau.

En même temps mon idée de faire l'inverse n'est pas simple non plus parce que transférer une listview dans un tableau, nettoyer ce tableau puis le reinjecter dans la listview fonctionne la première fois mais pour la deuxième fois si je met la listview dans le tableau j'aurais perdu les élements masqués.

Je part peut être sur une mauvaise piste.

Pour l'extension séparée ça permet à l'utilisateur de classer les lignes par format, c'est à dire tous les doc d'abord puis les xls après ou l'inverse (en cliquant sur la colonne des formats).
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#6

Message par Tlem »

eric a écrit :Oui mais si je part directement depuis le tableau c'est une image un peu figée
Pas plus que si vous entrez les noms directement dans le code de création du ListView.
J'ai pour les besoin de l’explication créé les tableaux directement en entrant leurs nom, mais la logique voudrait que ce tableau soit créé à partir d'un fichier externe ou d'une liste contenue ou extraite à partir d'un dossier. ;)

L'avantage d'un tableau, c'est que vous pourrez effectuer des tas d'opérations divers en dehors du contrôle ListView, ensuite une simple opération de mise à jour affichera le contenu du tableau dans le ListView.

Le fait de faire un tri avec les colonnes du ListView ne change rien. Vous pourrez continuer à le faire, mais travailler directement sur un ListView pour effectuer des opérations de filtrage, de suppression ou d'ajout, est plus 'compliqué' en terme de code que de travailler sur un tableau.

Maintenant, comme je l'ai déjà dit à d'autre, c'est votre script, donc c'est vous qui voyez. :lol:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#7

Message par eric »

Les fichiers entrés manuellement dans la listview c'est pour l'exemple mais par la suite il seront ajoutés à partir d'une boite de dialogue de sélection de fichiers :wink:

Je suis bien conscient que travailler dans un tableau apporte une souplesse mais reste que si je supprime une ligne dans la listview à l'aide d'un bouton cela ne correspondra plus au tableau.

Et si je fais un tri dans la listview mais que je traite le tableau et que je le réinjecte après, l'ordre ne sera plus le même. (bon ça c'est un détail encore)

Mais pour l'instant je ne vois pas plus simple que cette idée donc je vais essayer.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#8

Message par SagePourpre »

Voici un bout de code fonctionnant à partir d'un tableau :
► Afficher le texte

Si l'utilisateur supprime une entrée ou utilise d'hypothétiques flèches 'monter' 'descendre' pour changer
l'ordre des éléments, il n'y a qu'à utiliser les fonctions correspondantes pour les bouger en même temps
dans le tableau.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [..] Masquer des lignes dans une listview

#9

Message par eric »

Ok ça fonctionne.

Merci à vous deux.
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [R] Masquer des lignes dans une listview

#10

Message par eric »

Je le mets quand même.

J'avais entre temps trouvé une autre méthode certainement moins élégante mais au moins c'est rigolo :oops:

Le principe est de créer une deuxième listview invisible et de transférer les doc ou les xls dans cette deuxième liste lorsque l'on décoche la case à l'aide de la fonction _GUICtrlListView_CopyItems et de les remettre dans la première lorsque l'on recoche la case.
► Afficher le texte
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Masquer des lignes dans une listview

#11

Message par Tlem »

eric a écrit :Le principe est de créer une deuxième listview invisible
En fait, selon l'utilisation de votre ListView, c'est l'idée de base que j'ai voulu transmettre, mais au lieu de passer sur une seconde ListView, il vaut mieux utiliser un tableau. :mrgreen:

Techniquement, d'après ce que j'ai lu de vos prérogatives, le plus simple est de combiner ListView + Tableau.
En sachant que si vous modifiez le tableau, il faut mettre le contrôle ListView à jour et vis versa. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre