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

 Delphi Discussion :

Creation d'un composant "collection"


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Points : 61
    Points
    61
    Par défaut Creation d'un composant "collection"
    Bonjour,
    Je souhaite faire un composant reprenant le principe des collections.
    Je me suis donc inspiré du tutoriel suivant http://sjames.developpez.com/ListesCollections.pdf

    Je rencontre un problème lors de la compilation.
    E2010 Types incompatibles : 'TPersistent' et 'Class reference'
    sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    constructor TCmpStats.Create(Stat: TspStat);
    begin
      inherited Create(TCmpStatItem);
      FComponent := Stat;
    end;
    Voici mon code
    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
      TCmpStatItem = class(TCollectionItem)
      private
        FName: String;
        procedure SetName(const Value: String);
      protected
        Function GetDisplayName: String; Override;
      published
        property Name: string read FName write SetName;
      public
        constructor create;
        destructor destroy;
      end;
     
      TCmpStats = class;
     
      TspStat = Class(TComponent)
        private
          FItems: TCmpStats;
          procedure SetItems(value : TCmpStats);
        public
          constructor Create(AOwner : TComponent); override;
          destructor Destroy; override;
        published
          property Item: TCmpStats read FItems write SetItems;
      End;
     
      TCmpStats = class( TOwnedCollection)
        private
          FComponent : TspStat;
          function GetItem(Index: Integer): TCmpStatItem;
          procedure SetItem(index: Integer; Value : TCmpStatItem);
        public
          constructor Create(Stat : TspStat);
          function Add : TCmpStatItem;
          property Items[Index : Integer]: TCmpStatItem read GetItem write SetItem; default;
      end;
    CmpStats hérite de TOwnedCollection qui descend de TPersistent.
    De coup, je ne comprend pas le problème, ni comment faire pour le résoudre.

    Si quelqu'un a déjà eu ce genre de problème, je suis preneur pour les explications.
    Merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour.

    Tu as oublié, jeune padawan , que le constructeur d'un TOwnedCollection attends deux paramètres : le premier étant justement le "Owner" et le second la classe de l'item à créer.

    Donc le code de ton constructeur devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    constructor TCmpStats.Create(Stat: TspStat);
    begin
      inherited Create(Stat, TCmpStatItem);
      FComponent := Stat;
    end;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Points : 61
    Points
    61
    Par défaut
    La méthode Create attend deux paramètres : le nom d'un objet instance dérivé de TPersistent et le nom d'une classe dérivée de TCollectionItem. Le premier paramètre est le propriétaire de l'instance de TOwnedCollection . Le second paramètre détermine la classe des éléments créés par la méthode Add.
    Ah ben oui, tous s'explique...

    Merci, mon maître.

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

Discussions similaires

  1. [COMPOSANT] Creation particuliere de composant.
    Par Clorish dans le forum Composants VCL
    Réponses: 11
    Dernier message: 25/06/2004, 11h54

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