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 :

Heritage de classes vcl


Sujet :

C++Builder

  1. #1
    Membre du Club Avatar de Revan777
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 87
    Points : 52
    Points
    52
    Par défaut Heritage de classes vcl
    Bonjour,
    je souhaite faire dériver une classe "Device" de la classe TImage pour ensuite créer 2 autres classes dérivées "PC" et "Printers" issues de "Device". Le projet a pour but d'indiquer l'emplacement de mes appareils sur un plan usine en faisant un glisser-deposer d'images représentant un PC ou une imprimante.

    Builder m'indique des conflits de classes virtuelles ...
    Cela doit juste être un pb de syntaxe, j'aimerais savoir comment vous faites pour dériver les classes issus d'objet vcl sous Builder.
    Merci.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Il n'y a pas "trente six" manières de dériver depuis une classe !
    Il faudrait comprendre d'où vient le conflit... donc un peu de code pour éclairer la recherche !
    A plus !

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    +1 pour Henderson...

    As tu regardé un tutoriel de C++ expliquant comment l'héritage fonctionne ?
    Ensuite pourquoi utiliser une classe fille de TImage ?
    Ca ne serait pas plus simple de créer toi même ta classe Device générique avec des méthodes virtuelles comme "render" pour afficher la Device à un endroit donné etc. Et à partir de cette classe Device faire une classe par type de périphérique...

    Enfin ça ne sert que si tu stocke plus qu'une simple image de représentation..

  4. #4
    Membre du Club Avatar de Revan777
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 87
    Points : 52
    Points
    52
    Par défaut
    Oui je connais les bases de l'héritage, vues en BTS IRIS.

    avec des méthodes virtuelles comme "render" pour afficher la Device à un endroit donné etc.
    Ca m'intéresse !! mais je ne sais pas comment faire pour lier une image à une classe et l'afficher sur la fiche...sinon je ne serais pas là !

    Et à partir de cette classe Device faire une classe par type de périphérique...
    Oui c'est ce que je veux faire, 2 classes filles PC et Printers par exemple.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class jDevice : public TImage
    {
    public :
        __fastcall jDevice(TComponent *Owner);
        __fastcall ~jDevice();
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class jPc : public jDevice
    {
    public :
        __fastcall jPc(TComponent *Owner);
        __fastcall ~jPc();
    };
    Donc tu sais ce qu'il faut faire pour déclarer jPrinter.

    En ce qui concerne TImage, voici comment on peut éviter quelques problèmes (juste une précaution),
    on peut tester avec et sans (si ça plante après la création alors on sait quoi faire... ça dépend peut-être de la version de BCB):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    __fastcall jDevice::jDevice(Owner)
        : TImage(Owner)
    {
    //Lui attribuer un Parent valide immmédiatement si Owner s'y prète
    if(Owner->InheritsFrom(__classid(TWinControl))) Parent = (TWinControl*)Owner;
    }
    Le constructeur pour jPc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    __fastcall jPc::jPc(TComponent *Owner)
        : jDevice(Owner)
    {
    }

    Donc tu sais quoi faire pour jPrinter.

    Ici on pourrait dériver de TCustomControl pour économiser les ressources.
    Dans ce cas, le lien vers un bitmap se fait avec (une simple propriété):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics::TBitmap *Image;
    Image est ensuite dessiné via le canvas de l'objet dans sa zone client, et ce, dans une méthode Paint qui vient surcharger celle de TCustomControl.

    Si "développer" t'intéresse, alors tu peux dériver de TComponent (il y a tout à faire !)

    A plus !

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Pour un control graphique je partirais plutôt d'un TGraphicControl, mais très bon post que tu nous as fait là :-)

Discussions similaires

  1. Heritage de classe et accès à variable
    Par zax-tfh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/03/2008, 12h21
  2. [Heritage de classes] - acceder à une fonction
    Par buzzkaido dans le forum C++
    Réponses: 19
    Dernier message: 02/03/2007, 16h00
  3. Réponses: 6
    Dernier message: 28/12/2006, 18h22
  4. Heritage de classe avec classes internes
    Par Regis.C dans le forum Langage
    Réponses: 11
    Dernier message: 27/04/2005, 12h19
  5. [FLASH MX2004] Heritage de classe
    Par bolo dans le forum Flash
    Réponses: 9
    Dernier message: 05/12/2004, 13h08

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