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 :

Ajouter propriété et méthode à la classe TListItem


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Points : 66
    Points
    66
    Par défaut Ajouter propriété et méthode à la classe TListItem
    Bonjour,

    Voici mon soucis, j'aimerai ajouter une propriété <Completed> et une méthode <AddSuperString> à la classe existante TListItem de tel sorte que si:
    Une TListView est ajoutée dans mon projet, je puisse faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TListItem *pItem;
     
    pItem = ListView1->Items->AddSuperString("toto");
    ListView1->Items->Completed = true;
    comme on peut faire par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TListItem *pItem;
     
    pItem = ListView1->Items->Add();
    ListView1->Items->Count = 0;       // Enfin même si on ne peut pas faire avec Count imaginer avec ListView1->Visible = false;
    bref, ajouter une méthode et une propriété à la liste des méthodes d'une TListItem, sans devoir créer sa propre classe ou une classe hérité car je veux que les classes comme TListView voit automatiquement mes méthodes et propriétés ajoutées.
    ;-)

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Je sais que je remonte ce message de loin, mais j'ai peut-être une réponse.

    À la place d'utiliser des TListItem avec ta TListView, tu pourrais utiliser la listview en mode virtuel. Pour faire ceci il suffit de mettre la propriété OwnerData à true et d'enregistrer tes données ailleurs. De cette façon tu chercheras directement dans la mémoire et pas la TListView.

    Voici un peu de code pour t'inspirer:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
        #include <vector>
     
        struct TMyData
        {
            AnsiString Caption;
            AnsiString SubItem;
            AnsiString Criteria;
        };
     
        std::vector<TMyData> data;
     
        {
            TMyData DataItem;
            DataItem.Caption = "caption";
            DataItem.SubItem = "Some Data";
            DataItem.Criteria = "Some Data";
     
            data.push_back(DataItem);
            ListView1->Items->Count = data.size();
        }
     
        // OnData event handler
        void __fastcall TMyForm::ListView1Data(TObject *Sender, TListItem *Item)
        {
            TMyData &DataItem = data[Item->Index];
            Item->Caption = DataItem.Caption;
            Item->SubItems->Add(DataItem.SubItem);
        }
     
        {
            std::vector<TMyData>::iterator iter = data.begin();
            int idx = 0;
            while( iter != data.end() )
            {
                if( (*iter).Criteria == "Some Data" )
                {
                    TListItem *Item = ListView1->Items->Item[idx];
                    Item->MakeVisible(true);
                    Item->Selected = true;
                    return;
                }
                ++idx;
                ++iter;
            }
     
            Application->MessageBox("Item Not Found", "Search Ended", MB_OK);
        }
    source: un article datant de juillet 2005 dans le groupe de nouvelles borland.public.cppbuilder.vcl.components.using

    Dans ton cas à la place d'une struct TMyData tu peux utiliser une classe avec une propriété Completed et une méthode AddSuperString.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

Discussions similaires

  1. Ajouter des méthodes, des classes
    Par Toba63 dans le forum iReport
    Réponses: 3
    Dernier message: 20/08/2008, 10h29
  2. comment ajouter des méthodes à une classe lors Runtime?
    Par revever dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/03/2008, 13h53
  3. Ajouter propriété à un module de classe
    Par bodade dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/05/2007, 19h55
  4. Ajout d'une méthode dans une classe
    Par Flow_75 dans le forum C++
    Réponses: 6
    Dernier message: 12/02/2007, 10h42
  5. [C#] Ajout d'une méthode à la classe DropDownList
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/08/2005, 14h23

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