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 :

Problème de conception d'un composant


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut Problème de conception d'un composant
    salut tout le monde,

    Je bloque sur un petit probleme.
    Je voudrais faire un composant, qui de manière dynamique puisse créer plusieurs dataset (ou datasource), pour que par la suite je puisse facilement connecté des TChart.

    Le truc qui serait l'idéal c'est que le système fonctionne directement dans l'EDI de delphi.

    Je ne sais pas trop comment m y prendre.

    Est ce que je dois utilisé les TCollections pour faire cela ?






    La j'ai fais un petit exemple en statique est deja cela ne fonctionne pas :
    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
    unit Component;
     
    interface
     
    uses
      SysUtils, Classes, DB, windows;
     
    type
      TCimEssai = class(TComponent)
      public
        FDataSource:TDataSource;
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;
     
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('HCIM DB', [TCimEssai]);
    end;
     
    constructor TCimEssai.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FDataSource:=TDataSource.Create(self);
    end;
     
    destructor TCimEssai.Destroy;
    begin
      FDataSource.free;
      inherited destroy;
    end;
    Donc le code compile bien, mais une foismoncomposant posé sur la form , je ne peux pas rattacher la datasource à un composant.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut
    J'ai trouvé une solution en statique mais je ne pense pas qu elle soit trés propre.

    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
    unit Component;
     
    interface
     
    uses
      SysUtils, Classes, DB, windows;
     
    type
      TCimEssai = class(TComponent)
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        FDataSource:TDataSource;
      end;
     
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('HCIM DB', [TCimEssai]);
    end;
     
    constructor TCimEssai.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FDataSource:=TDataSource.Create(aowner);
      FDataSource.Name:='CimDataSource1';
    end;
     
    destructor TCimEssai.Destroy;
    begin
      FDataSource.free;
      inherited destroy;
    end;

  3. #3
    Membre expérimenté
    Profil pro
    DEV
    Inscrit en
    Août 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Août 2006
    Messages : 182
    Par défaut
    Salut,

    Voici une déclaration un peu plus "propre"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type
      TCimEssai = class(TComponent)
      Private
        FDataSource : TDataSource;
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        Property DataSource : TDataSource Read FDataSource Write FDataSource;
      end;

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Citation Envoyé par rvzip64
    Je voudrais faire un composant, qui de manière dynamique puisse créer plusieurs dataset (ou datasource), pour que par la suite je puisse facilement connecté des TChart.
    Ce que tu peux faire c'est créer des Items (TCollectionItem) qui font la jonction entre le DataSource et la TChart.
    Citation Envoyé par rvzip64
    Est ce que je dois utilisé les TCollections pour faire cela ?
    En général, les listes dans l'IDE en design time sont bien plus faciles à gérer avec les TCollection (elles sont faites pour ça). Par contre, il te faut hériter TCollection (le conteneur des Items) et les TCollectionItem (les Item en question)
    Ca pourrait donner quelque chose dans ce genre:
    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
     
    TMonItem = class(TCollectionItem)
    private
      FDataSource: TDataSource;
      FChart: TChart;
    published
      property DataSource: TDataSource read FDataSource write FDataSource;
      property Chart: TChart read FChart write FChart;
    end;
     
    TMesItems = class(TCollection)
    private
    protected
    public
    published
    end;
     
    TMaClasse = class(TBidule)
    FCollection: TMesItems
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
    published
      property MesItems: TMesItems read FMesItems write FMesItems;
    end;
     
    implementation
     
    constructor TMaClasse.Create(AOwner: TComponent);
    begin
      inherited;
      FCollection := TMesItems.Create(...);
    end;
     
    destroy TMaClasse.Destroy;
    begin
      FCollection.Free;
      inherited;
    end;
    Citation Envoyé par rvzip64
    La j'ai fais un petit exemple en statique est deja cela ne fonctionne pas :
    Attention: Si tu mets une propriété published de cette façon, cela veut dire que le TDataSource est interne à la classe.
    Si c'est le cas, il faut que tu crées le TDataSource dans chaque Item

    Bon courage
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut
    Merci pour la répidité de la réponse, je regarde ça et vous tiens au courant

  6. #6
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Par défaut
    Y a pas une autre méthode que le Tcollection ca en fait cela ne convient pas a mon utilisation....

    Je préferé faire comme le TChart : quand on creer uen série, il arrive a l'accrocher a l object paent dans l'inspecteur d'object, comment fait il cela ?

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par rvzip64 Voir le message
    Je préferé faire comme le TChart : quand on creer uen série, il arrive a l'accrocher a l object paent dans l'inspecteur d'object, comment fait il cela ?
    Normalement, les TCollection font ça tout seul Regarde l'exemple du TStatusBar: Chaque Panel est dérivé de TCollectionItem; Panels de TCollection.
    Donne ton code pour qu'on regarde.
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

Discussions similaires

  1. Problème de conception de composant visuel
    Par QAYS dans le forum Composants VCL
    Réponses: 3
    Dernier message: 30/04/2008, 14h27
  2. Problème d'affichage dans un composant TScrollBox
    Par erossi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/09/2005, 11h29
  3. [JScrollPane] Problème avec la taille du composant interne
    Par wikers dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/09/2005, 15h03
  4. [Conception] Mettre un Composant incliquable
    Par Manopower dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/08/2005, 14h04
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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