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 :

TForm et Interface


Sujet :

Composants VCL Delphi

  1. #41
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut

    Je remonte le sujet parce que je pense avoir trouvé une solution plus élégante dans le livre de Paul Toth et Olivier Dahan
    La solution est expliquée dans le chapitre VI-22 La gestion des packages.

    Pour info, voici comment ça se présente:
    On utilise les packages qui publient une classe héritant d'une classe mère.
    Cette classe est donc chargée et c'est elle qui s'occupe de créer et afficher la fiche incluse dans le package. De cette façon, je peux utiliser n'importe quelle fiche! Simple et efficace!

    Mais (il y en a toujours un) je me heurte à un souci de taille que j'ai systématiquement eu lorsque j'essaye cette méthode.
    Si je ne coche pas "Construire avec les paquets d'exécution", GetClass et FindClass ne trouvent jamais la classe dans le package.
    Si je coche cette option en y mettant le strict minimum dont mon package, soit "vclx;vcl;Package1" (oui c'est un package de test ), ça marche sans problème, mais je perds complètement l'intérêt d'avoir des plugins dynamiques puisqu'il me faut connaitre le nom du package avant la compilation
    J'ai beau lire et relire ce chapitre ainsi que quelques tutos glanés ça ou là, je ne trouve aucune mention de ce problème...

    Ai-je oublié quelque chose??

    Merci d'avance

    PS: j'utilise D2009
    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

  2. #42
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Essaie en utilisant LoadPackage :
    - Tu compiles ton projet avec les paquets d'exécutions "vclx;vcl" (encore que tu peux peut-être t'en passer, je ne sais pas).
    - Tu compiles les packages de tes plugins séparément et tu les places dans un répertoire "plugin" par exemple.
    - Au démarrage de l'application, tu scannes le répertoire plugin et tu appelles LoadPackage pour chaque package que tu trouves. LoadPackage appellera les Initialization des unités du package, ce qui permettra d'y faire quelques RegisterClass...
    - Ensuite, tu devrais pouvoir utiliser FindClass.

  3. #43
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci pour ta réponse Franck
    Citation Envoyé par Franck SORIANO Voir le message
    Essaie en utilisant LoadPackage :
    - Tu compiles ton projet avec les paquets d'exécutions "vclx;vcl" (encore que tu peux peut-être t'en passer, je ne sais pas).
    - Tu compiles les packages de tes plugins séparément et tu les places dans un répertoire "plugin" par exemple.
    - Au démarrage de l'application, tu scannes le répertoire plugin et tu appelles LoadPackage pour chaque package que tu trouves. LoadPackage appellera les Initialization des unités du package, ce qui permettra d'y faire quelques RegisterClass...
    - Ensuite, tu devrais pouvoir utiliser FindClass.
    C'est exactement et intégralement ce que je fais
    La seule différence est que j'ajoute mon package dans la liste... Et que le répertoire s'appelle PluginS
    Ceci dit, ça m'embête quand même de devoir cocher cette option (je vais devoir distribuer les paquets avec l'application et j'utilise pas mal de composants tiers )
    Je vais quand même essayer sans mettre mon package dans la liste...
    Il n'y a aucun moyen de le faire sans cocher cette option? Une quelconque option du projet à activer/désactiver ?
    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

  4. #44
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Effectivement, ça marche sans mettre le package dans la liste Merci pour l'info!
    Par contre, toujours la même question: N'y a-t-il aucun moyen de faire cela sans cocher cette option ? Comment la rendre package-aware (Si j'ose m'exprimer ainsi ) ?
    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. #45
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Pedro Voir le message
    Par contre, toujours la même question: N'y a-t-il aucun moyen de faire cela sans cocher cette option ? Comment la rendre package-aware (Si j'ose m'exprimer ainsi ) ?
    Un autre problème s'est posé lorsque j'étais en train de développer cette méthode.
    Je ne peux pas utiliser la même unité dans chaque paquet. Or, j'ai 3 unités que j'utilise assez souvent: une pour les constantes, une pour les routines et une pour les classes. Je les utilise un peu partout. Ces unités sont intégrées dans le projet de l'exécutable.
    Mais si je charge un paquet qui en contient une, je le décharge et je charge un autre paquet qui la contient aussi, j'ai une erreur comme quoi l'unité est déjà déclarée... Alors que le premier paquet est déchargé!
    Donc comment faire:

    • Avec plusieurs fichiers .inc et des combinaisons de Define?
    • Copier les fichiers concernés avant la compilation dans un autre nom?
    • Une option de projet à cocher/décocher que je ne connais pas?

    Bref, cette approche est peut-être plus Delphi-friendly mais c'est pas la panacée non plus
    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

  6. #46
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Hmmm... je ne suis pas expert en gestion des paquets, je tente quand même.

    Tu peux dire qu'un paquet A a besoin d'un autre paquet B.

    Je te suggèrerais donc de créer un nouveau paquet, du style "CommonPackage", et de dire que les paquets qui contiennent tes composants ont tous besoin de ce CommonPackage.

    J'ose espérer que Delphi gère correctement la dépendance des paquets et charge/décharge ceux qu'il faut au bon moment.
    *LeGEC*

  7. #47
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci pour ta réponse
    Citation Envoyé par LeGEC Voir le message
    Tu peux dire qu'un paquet A a besoin d'un autre paquet B.

    Je te suggèrerais donc de créer un nouveau paquet, du style "CommonPackage", et de dire que les paquets qui contiennent tes composants ont tous besoin de ce CommonPackage.
    Je suis en effet parti sur cette méthode. En revanche, on dirait que tout se téléscope: J'utilise des routines/classes/constantes du paquet commun en ajoutant les unités aux uses. Et j'ai des erreurs assez bizarres qu'il ne devrait pas y avoir. Des AV en l'occurence...
    Citation Envoyé par LeGEC Voir le message
    J'ose espérer que Delphi gère correctement la dépendance des paquets et charge/décharge ceux qu'il faut au bon moment.
    Bah visiblement non: il ne décharge pas les références aux unités chargées...
    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. [Débutant] imprimer une interface TForm
    Par bicha_27 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2012, 09h49
  2. Interface dune Tform
    Par Panaméen dans le forum C++
    Réponses: 0
    Dernier message: 15/05/2008, 16h49
  3. TForm dans une DLL avec utilisation d'Interface
    Par guedelmalin dans le forum Langage
    Réponses: 13
    Dernier message: 17/06/2005, 11h58
  4. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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