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 :

[Composants] Comment obtenir une propriété published avec un objet ?


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut [Composants] Comment obtenir une propriété published avec un objet ?
    Bonjour,

    l'énoncé du problème est simple : j'ai une classe TImageCentre dérivée de Timage, avec quelques valeurs par défaut du type Align, Anchor...

    J'ai une classe TMonSkin contenant des objets de la classe TImageCentre

    Je voudrais qu'apparaisse dans l'inspecteur d'objet du composant TMonSkin la possiblité au développeur d'accéder aux proprités de TImage, entre autre celle de choisir sa Picture.

    Savez vous comment faire cette déclaration ? Merci d'avance

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 030
    Points
    7 030
    Par défaut
    Moi, je ferais tout bêtement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      published
        property PIcture: TPicture;

  3. #3
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci, mais je viens de faire l'essai : cela me plante carrément l'IDE

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Thorn
    Merci, mais je viens de faire l'essai : cela me plante carrément l'IDE
    Lung, "saboteur" !!

    Thorn, salut et bienvenue dans les forums de Developpez.com !
    Peux-tu nous montrer un peu de code ?
    Peut-être que ça aidera à y voir plus clair...

  5. #5
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    La description de TImageCentre
    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
     
    Type
      TImageCentre = Class(TImage)
      private
        { Déclarations privées }
        FTitreFenetre: TLabel;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        Constructor create(AOwner: tcomponent); override;
        Destructor destroy; override;
      published
        Property TitreFenetre: tlabel read FTitreFenetre;
      End;
    Sa création
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Constructor TImageCentre.create(AOwner: tcomponent);
    Begin
      Inherited;
      Align := alTop;
      FTitreFenetre := TLabel.Create(self);
      FTitreFenetre.caption := '';
      Stretch := true;
    End;
    La description de TMonSkin
    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
    Type
      TMonSkin = Class(TControl)
      private
        { Déclarations privées }
        FPicture: TPicture;
        FImageGauche: TImagegauche;
        FImageDroite: TImageDroite;
        FImageCentre: TImageCentre;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        Constructor create(AOwner: TComponent); override;
        Destructor Destroy; override;
      published
        Property Picture: TPicture read fpicture write FPicture;
    //    Property ImageGauche: TImageGauche read FImageGauche;
    //    Property ImageDroite: TImageDroite read FImageDroite;
    //    Property ImageCentre: TImageCentre read FImageCentre;
      End;
    Merci à vous

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    ok. Je vois (du moins je crois)
    Ton TPicture est un objet de TMonSkin qui est un TControl...
    Hors, Il me semble bien que TControl ne possède pas de propriété TPicture (à moins de la créer peut-être)...
    Ou bien essaye de remplacer TControl par TWinControl, sait-on jamais.
    Sinon, TPicture doit-être un objet/propriété de TImageCentre pas de TMonSkin.

    Cela dit, je ne suis pas doué dans la conception de composant.
    à+

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 030
    Points
    7 030
    Par défaut
    Citation Envoyé par Sub0
    Citation Envoyé par Thorn
    Merci, mais je viens de faire l'essai : cela me plante carrément l'IDE
    Lung, "saboteur" !!


    Je pensais qu'il héritait du TImage ...

  8. #8
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    j'aimerais bien....

  9. #9
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    je vais essayer de poser la question autrement :
    comment faire pour qu'une classe créée intégrant les éléments d'une autre classe puisse mettre en "Published" des éléments de cette classe qu'elle intègre ? Cela me règlerai le problème du TPicture, appartenant à TImage, mais pas à TControl

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 030
    Points
    7 030
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Tmachin = class(TImage)
       published
          Picture: TPicture;
       end;
    Si tu mets ca dans une classe qui hérite bien de TImage, ca ne marche pas ?


  11. #11
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Et bien avec ça, je n'ai ni erreur de compil, ni d'exécution.... mais je n'ai rien dans l'inspecteur d'objet, comme ce n'est pas cette classe qui fait l'objet du composant, mais son contenant

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 871
    Points : 11 361
    Points
    11 361
    Billets dans le blog
    6
    Par défaut
    il faut faire un éditeur de propriété et le recenser : regarde du côté de RegisterPropertyEditor()

  13. #13
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Je viens de trouver çà dans les manuels, mais j'ai pa vraiment envie de me plonger dans ce type de création, surtout que ça existe déjà pour le timage...

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Perso, j'utilise des TFrames pour créer mes objets plutôt que de faire des composants...
    Les raisons sont les suivantes :
    • Il suffit d'ajouter l'unité au projet, le DFM associé s'ajoute automatiquement
    • On est pas obligé d'installer le compo. C'est pratique pour distribuer ses sources
    • L'insertion et la duplication d'une TFrame est facile, intuitive et automatisé
    • On peut définir autant de TFrame que l'on veut
    • On peut y intégrer n'importe quel composant de la palette
    • On définit facilement les propriétés par défaut des objets contenus
    • On voit tout de suite à quoi va ressembler l'objet dans l'éditeur
    • On peut développer rapidement des composants complexes sans avoir à "coder en hard"
    • La modifiaction est facile et visible instantanément
    • Facilité d'exportation et de réutilisation d'un TFrame pour différents projets
    • Etc...

    En résumé, c'est plus facile que la création de composant, surtout pour développer des objets complexes, à+

  15. #15
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci.

    Je vais essayer, et mettrai le tag résolu quand mes tests seront finis (may be il y aura d'autres pistes...)

    En tout cas la question générale reste posée : comment une classe conteneur peut elle avoir une propriété d'un objet contenu dans l'inspecteur d'objet

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    toulourou a déjà répondu il me semble, non ?
    Citation Envoyé par tourlourou
    il faut faire un éditeur de propriété et le recenser : regarde du côté de RegisterPropertyEditor()

  17. #17
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Exact, c'était la réponse... Mais cela me paraît bien lourd.

    La solution de la frame marche parfaitement, tout fonctionne, et la ou les forms sur laquelle est déposée la frame n'a aucune procedure spéciale à effectuer.

    Par contre, pour en faire un composnt de skin portable et distribuable, c'est un autre problème...

  18. #18
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Thorn
    Par contre, pour en faire un composnt de skin portable et distribuable, c'est un autre problème...
    Non, justement, ça devrait te simplifier les choses au contraire !
    Quels sont les points qui te posent problème exactement ?

    Maintenant, pourquoi ne pas faire de ce TFrame un composant ?

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

Discussions similaires

  1. Comment paramétrer une Action Struts avec un objet bean ?
    Par Battosaiii dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/08/2011, 15h28
  2. Réponses: 2
    Dernier message: 08/03/2010, 14h25
  3. Comment obtenir une chaine avec Date/heure ?
    Par Flow_75 dans le forum VBA Word
    Réponses: 4
    Dernier message: 05/05/2008, 16h18
  4. Réponses: 3
    Dernier message: 10/04/2008, 16h38
  5. Réponses: 3
    Dernier message: 10/11/2007, 18h09

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