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

Composants VCL Delphi Discussion :

[CG DELPHI 2009] Tcollection et ListView


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 82
    Points : 47
    Points
    47
    Par défaut [CG DELPHI 2009] Tcollection et ListView
    Bonjour,

    Je débute dans la programmation delphi, en fait, j'en suis dans ma tout première application.

    C'est un projet de gestion de formules mathématiques.

    Pour ce faire, j'utilise une Tcollection (Tcurvecollection) de courbes (tcurve)

    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
    48
    49
    50
    51
    52
    type Tcurve = class (TcollectionItem)
      private
       FAircraftName : string;
       FCurveDescriptionGeneral : string;
       FCurveFigureOrigin: string;
       FCurveItem : string;
       FCurveItemReferenceValue : real;
       fa1,fa2,fa3,fa4,fa5,fa6,fb : real;
       fminrange, fmaxrange : real;
       fx,fy : real;
       fInRange: Trange;
       fidx: integer;
       Procedure setx (val:real);
      published
       property AircraftName : string read faircraftname write faircraftname;
       property CurveDescriptionGeneral : String read fCurveDescriptionGeneral write fCurveDescriptionGeneral;
       property CurveFigureOrigin : string read FCurveFigureOrigin write FCurveFigureOrigin;
       property CurveItem : string read fCurveItem write fCurveItem;
       property CurveItemReferenceValue : real read fCurveItemReferenceValue write fCurveItemReferenceValue;
       property a1: real read fa1 write fa1;
       property a2: real read fa2 write fa2;
       property a3: real read fa3 write fa3;
       property a4: real read fa4 write fa4;
       property a5: real read fa5 write fa5;
       property a6: real read fa6 write fa6;
       property b: real read fb write fb;
       property idx : integer read fidx write fidx;
       property minrange: real read fminrange write fminrange;
       property maxrange: real read fmaxrange write fmaxrange;
       property parameter : real read fx write setX;
       property result : real read fy;
       property Inrange : Trange Read fInRange;
       Function CheckRange (value:real) : TRange;
       Constructor Create (collection:Tcollection); override;
    end;
     
     
     
     
     
    type TCurveCollection = class (TOwnedCollection)
     private
     
      function getItem (index:integer): Tcurve;
      Procedure SetItem (index: integer; val: TCurve);
     
     public
      function Add: TCurve;
      property Items[index:integer] : Tcurve read getitem write setitem;
      function GetHighestIDX: integer;
      function GetItemFromIDX (id:integer): Tcurve;
    end;
    La raison pour laquelle j'ai crée une collection réside principalement dans le fait que je désire facilement enregistrer les informations de courbes dans une Tstream.

    Afin de créer et éditer les propriétés, j'ai crée une fiche avec des Tedit pour chaque property de Tcurve (TcollectionItem)

    Je désire maintenant afficher une liste avec toute les entrées de la collection, qui me permettrait, d'en sélectionner une, qui remplirait automatiquement mes Tedit, ce qui me permettrait l'édition.

    Pour ce faire, j'ai crée une ListView. Cela ne pose aucun problème à remplir ce listview avec les données existantes de ma collection, mais je ne sais pas comment faire pour, quand je sélectionne une ligne de ma listview, remplir mes tedit avec l'enregistrement tcollectionitem correspondant, ni même comment enregistrer les modifications éventuelles.

    Dans ma collectionitem, il y a une propriété IDX, qui est un index unique à cet enregistrement. Le bon procédé serait il de pouvoir enregistrer ce IDX dans une propriété de ListView.items afin de retrouver l'enregistrement correspondant?

    Comment faire?

    Merci de vos lumières.
    Xav.

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 170
    Points
    170
    Par défaut
    Une façon de faire est d'utiliser la propriété Data des TListItem pour garder un lien avec le TCurve correspondant. Quand tu ajout un TListItem tu fais quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NewListItem := ListView.ListItems.add;
    NewListItem.Data := MyCurve;
    Tu utilise ensuite l'évènement OnSelectItem de ton ListView pour détecter la sélection d'un TListItem avec lequel tu alimentera tes TEdit.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 82
    Points : 47
    Points
    47
    Par défaut
    Merci,

    cela fonctionne parfaitement!

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

Discussions similaires

  1. Réponses: 127
    Dernier message: 17/03/2014, 21h58
  2. UIB 2.1 Delphi 2009
    Par medkyl dans le forum Composants VCL
    Réponses: 4
    Dernier message: 22/09/2008, 23h17
  3. Qu'y a t-il dans delphi 2009
    Par BeTuLa dans le forum EDI
    Réponses: 17
    Dernier message: 05/09/2008, 08h46

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