IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Déclarer et Utiliser un TListItems


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut Déclarer et Utiliser un TListItems
    Bonjour,
    Je cherche à "filtrer" mes données dans un TListView. N'ayant pas trouvé les fonctions Show et Hide pour une ligne (ni le Visible) j'ai décidé de faire un delete des lignes non voulues.

    Pour revenir à la configuration initiale (avant les delete) j'ai voulu créé un ListItems sauvegardant mes lignes et le réutiliser pour tout recharger.

    Le problème est que je n'arrive pas à créer ce TListItems (le S est important)
    Dès que j'ajoute un item, j'ai une exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TListItems* AllDecodedFrameList;
    La méthode new me met une erreur de compilation.

    Est ce que quelqun connait la manière de procéder?
    Au passage, si mon idée de filtrage par delete choc, je suis à l'écoute d'autres propositions?

    Merci

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Salut,
    Pourquoi ne pas stocker les valeurs des lignes devant être 'invisibles', et donc en réalité supprimées, dans une TStringList ?

    Sinon, je vais regarder ça...c'est 'marrant' aussi comme problème...
    @ +

  3. #3
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bon, pour l'instant j'ai rien trouvé de mieux que de gérer dans un des évènements de dessin du TListView...
    Donc un petit exemple-proposition :
    dans le .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private:	// Déclarations de l'utilisateur
            TStringList* AList;
            bool RestoreList;
    dans le .cpp:
    initialiser en amont la TStringList et la valeur booléenne..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AList = new TStringList();
    RestoreList = false;
    J'ai rempli bêtement ma TStringList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm7::Button7Click(TObject *Sender)
    {
    TListItem* pItem;
    for (int i = 0; i < 10; i ++)
    {
    pItem = ListView1->Items->Add();
    pItem->Caption = AnsiString("Nom ") + i;
    pItem->SubItems->Add(AnsiString("Prenom ") + i);
    }
    delete pItem;
    }
    On gère le dessin des éléments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm7::ListView1CustomDrawItem(TCustomListView *Sender,
          TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
    {
    if (RestoreList == false)
    {
    if (Item->Caption.operator ==("Nom 3"))
    {
    AList->Add(Item->Caption + AnsiString("=") + Item->SubItems->Strings[0]);
    ListView1->Items->Delete(Item->Index);
    }
    }
    }
    mais aussi le tri des éléments affichés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm7::ListView1Compare(TObject *Sender, TListItem *Item1,
          TListItem *Item2, int Data, int &Compare)
    {
    Compare = CompareText(Item1->Caption,Item2->Caption);
    }
    Pour 'restorer', dans cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm7::Button8Click(TObject *Sender)
    {
    RestoreList = true;
    TListItem* pItem;
    for (int i = 0; i < AList->Count; i++)
    {
    pItem = ListView1->Items->Add();
    pItem->Caption = AList->Names[i];
    pItem->SubItems->Add(AList->Values[AList->Names[i]]);
    }
    AList->Clear();
    }
    PS : j'ai mis la propriété SortType a stBoth...

    Bon c'est pas très finaud, mais ça peut toujours être une piste...non ?
    @ +

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Ton idée est à essayer. Le truc c'est que j'ai plusieurs "substring" comme ca, j'affiche mes données comme si tu affiches les dossiers d'un répertoire en détaille. (tu vois le nom, la date de création, modification ...) J'ai affiché mes données avec ce principe là. et l'idée serait de sauver la ligne entière d'un seul coup et de la réajouter.

    Ca me fera un code assez lourd sinon. Mais il est vrai que ton idée peut me permettre de débloquer mon hisoire en attendant de trouver mieux.

    Merci beaucoup.
    Je teste et je donne des news

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut Vive les Struct et les TList....!
    Salut Bandit Boy,
    Je finissais par croire que tu avais disparu...
    Une autre solution, avec un Struct et une TList
    Dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //en amont de la déclaration de la TForm :
    typedef struct AListv
    {
            String ACaption;
            String ASubItemA;
            String ASubItemB;
    }TAlistv;
    //et dans le private de la TForm:
    private:	// Déclarations de l'utilisateur
            TList* AList;
            bool RestoreList;
            TAlistv *AStruct;
    Dans le .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    void __fastcall TForm7::ListView1CustomDrawItem(TCustomListView *Sender,
          TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
    {
    if (RestoreList == false)
    {
    if (Item->Caption.operator ==("Nom 3"))
    {
    AStruct = new TAlistv;
    AStruct->ACaption =Item->Caption;
    AStruct->ASubItemA = Item->SubItems->Strings[0];
    AStruct->ASubItemB = Item->SubItems->Strings[1];
    AList->Add(AStruct);
    ListView1->Items->Delete(Item->Index);
    }
    }
    }
    //et pour restaurer :
    void __fastcall TForm7::Button8Click(TObject *Sender)
    {
    RestoreList = true;
    TListItem* pItem;
    for (int i = 0; i < AList->Count; i++)
    {
    AStruct = (TAlistv*)AList->Items[i];
    pItem = ListView1->Items->Add();
    pItem->Caption = AStruct->ACaption;
    pItem->SubItems->Add(AStruct->ASubItemA);
    pItem->SubItems->Add(AStruct->ASubItemB);
    }
    AList->Clear();
    }
    //évidememnt faut avoir déclarer qq part en amont :
    AList = new TList();
    RestoreList = false;
    @ +

    //edit : j'aurais du y penser avant...

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Citation Envoyé par Cantrelle
    Salut Bandit Boy,
    Je finissais par croire que tu avais disparu...
    //edit : j'aurais du y penser avant...
    Pas d'ici
    Idée sympa, je teste ca demain et je confirme le

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Déclarer et utiliser une fonction globale
    Par Bakkach dans le forum VB.NET
    Réponses: 11
    Dernier message: 21/09/2012, 18h53
  2. Déclarer et utiliser un tableau
    Par Bundy*Al dans le forum Débuter
    Réponses: 2
    Dernier message: 29/08/2009, 20h10
  3. Déclarer et utiliser plusiieurs librarys C++ dans la même classe
    Par cereal dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 20/06/2007, 16h55
  4. Réponses: 6
    Dernier message: 03/01/2006, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo