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 :

Compilation de composant auto-référent


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut Compilation de composant auto-référent
    Bonjour,

    J'ai un collègue qui a créé un composant (une combobox). Cette combobox possède une boite de dialogue pous sa configuration. Et, c'est là qu'est l'os hélas, cette boite de dialogue utilise le composant !

    Le composant a été créé de façon incrémentale, ce qui a permis à mon collègue de le compiler. Mais moi je me retrouve avec le paradoxe d'avoir besoin du composant pour compiler la boite de dialogue, mais le composant ne peut être compilé sans la boite de dialogue.

    Connaitriez vous un moyen simple de s'en sortir ?

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    Tu veux dire que tu te trouve face à une référence circulaire ?
    Dans ce cas, le plus logique d'après ce que tu dis est de découpler la relation Composant-Boîte de dialogue.
    A priori, l'affichage de la boîte doit se faire depuis une méthode du composant. Celui-ci n'a pas besoin de conserver une référence forte à cette classe. Il devrait donc être possible de n'utiliser l'unité contenant la boîte que dans la partie implementation.
    En clair :
    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
     
    unit composant;
     
    interface
     
    type
      TComposant = class
      public
        procedure AfficherConfig;
      end;
     
    implementation
    uses
      Boite;
     
    procedure TComposant.AfficherConfig;
    begin
      // Création de la boîte et affichage
    end;
    end.
    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
     
    unit Boite;
     
    interface
    uses
      Composant;
     
    type
      TBoite = class
      private
        FComposant: TComposant;
      public
        property Composant: TComposant read FComposant write FComposant;
      end;
     
    implementation
    end.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut
    Citation Envoyé par Pierre Castelain
    Tu veux dire que tu te trouve face à une référence circulaire ?
    Dans ce cas, le plus logique d'après ce que tu dis est de découpler la relation Composant-Boîte de dialogue.
    A priori, l'affichage de la boîte doit se faire depuis une méthode du composant. Celui-ci n'a pas besoin de conserver une référence forte à cette classe. Il devrait donc être possible de n'utiliser l'unité contenant la boîte que dans la partie implementation.
    C'est déjà ce qui est fait, mais malheureusement je crois que mon problème est un peu plus compliqué :
    - J'ai déjà une version plus ancienne du composant compilée chez moi.
    - Une propriété a été ajoutée au composant.
    - Lorsque je veux compiler le paquet contenant le composant la compilation échoue car la boite de dialogue fait appelle à une propriété inexistante du composant (je suppose qu'elle se base sur la version déjà compilée qui ne contient pas la nouvelle propriété).
    - J'ai donc détruit toutes les références au composant pour repartir de zéro.
    - Delphi lance maintenant une bordée d'injures à l'ouverture du paquet en référence à des composants inexistants et refuse de compiler.

    J'ai pu finalement compiler le composant en copiant chez moi le bpl du développeur du composant. Delphi a bien ralé sur des points d'entrée de dll qu'il ne trouvait pas, mais il a quand même accepté de me généré le composant.

    Simplement j'aurai voulu savoir s'il y a avait une solution plus simple que cette gymnastique.

    merci !

  4. #4
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    Je ne suis pas sûr de bien comprendre ce qui t'arrive mais cela devrait pouvoir se résoudre par un build du paquet. Au pire, il suffit de supprimer les dcu du composant en question (si tu as les sources) pour forcer la recompilation.

Discussions similaires

  1. Composant Auto Update
    Par engi dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/12/2007, 11h50
  2. Compiler un composant auto-référent
    Par sovitec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/08/2007, 09h35
  3. [XPCOM] Compiler un composant sous windows?
    Par nramariavelo dans le forum Autres langages pour le Web
    Réponses: 4
    Dernier message: 19/03/2007, 10h44
  4. Directive de compilation et composant
    Par QAYS dans le forum Delphi
    Réponses: 3
    Dernier message: 08/02/2007, 16h23
  5. Compilation des composants Indy 10
    Par rconty dans le forum C++Builder
    Réponses: 23
    Dernier message: 13/07/2005, 15h48

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