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 :

Savoir si un composant est installé dans la VCL...


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 66
    Points : 129
    Points
    129
    Par défaut Savoir si un composant est installé dans la VCL...
    Bonjour à tous,

    Clarifions le titre : je récupère une liste (textuelle) de classes, par analyse de codes-sources divers. on supposera pour simplifier que je ne retiens par hypothèse que celles qui se traduisent par un composant...

    je voudrais déterminer (facilement de préference) par programme (c'est à dire sans charger chacune des sources dans l'IDE Delphi), si un composant correspondant à un nom donné est installé sur mon système ou pas. Et si oui (cerise sur le gateau), est-il possible de préciser éventuellement les paquets correspondants, leur libellé (tel qu'il apparait dans le Menu Composants / Installer des paquets) et l'onglet de la palette de composants ?

    Exemple : soit la liste suivante : ( TEdit, TSynEdit, TdxBarManager )
    Pour TEdit, la réponse est obligatoirement Oui (VCL, unité StdCtrls, onglet 'standard'). Par contre, TSynEdit est lié à l'installation fortement recommandée de la JVCL et c'est mon cas, donc oui. Pour la dernière classe, je veux qu'il me dise non, étant donné que je n'ai pas la librairie DevExpress ...

    Merci
    Consultez :
    - La F.A.Q Delphi + Les Cours Delphi
    - La sélection des Freewares Delphi

  2. #2
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut Re: Savoir si un composant est installé dans la VCL...
    Citation Envoyé par delphi-fan
    on supposera pour simplifier que je ne retiens par hypothèse que celles qui se traduisent par un composant...
    déjà là c'est pas si simple...
    Par une simple analyse du texte tu ne peux pas déterminer si une classe est un composant ou non...
    Par exemple une déclaration peut être :
    type maclasse = TcustomControl ...
    Comment sais tu que TCustomControl est un "composant" (au sens où tu le dis) ?
    Et si tu as une classe Maclasse = TZozo; comment sais tu que 10 niveaux d'héritage plus haut, TZozo descend de TComponent ?

    C'est bien sur impossible.
    Sauf à parser tous les sources sans oublier les clauses Uses et retrouver les sources correspondantes ! (où ça ? sur quel chemin ? dans tous le disque ? et s'il y a plusieurs versions ? etc). Ses sources devront être parsées et analysées etc, etc...

    Déjà à ce stade, juste pour ton critère "c'est un composant ou pas ?", il n'y a pas de solution.

    Alors pour le reste ... :-)

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 66
    Points : 129
    Points
    129
    Par défaut
    Merci de ta réponse.

    Comment sais tu que TCustomControl est un "composant" (au sens où tu le dis) ? ... Sauf à parser tous les sources ...
    - Tu as bien évidemment raison et j'en étais conscient. Cela dit, je ne recherche pas l'exhaustivité : dans la mesure où bien souvent plusieurs composants d'une même librairie sont utilisés par le programmeur, alors que seuls certains d'entre eux sont dérivés, l'important est surtout de réperer la librairie elle-même ...

    Et si tu as une classe Maclasse = TZozo; comment sais tu que 10 niveaux d'héritage plus haut, TZozo descend de TComponent ?
    - Si j'utilisais ce composant dans un programme, je le saurais en employant RTTI (avec la fonction TClass.ClassParent) . C'est pourquoi je me demandais s'il n'y avait pas un principe similaire pour mon problème ...

    En fait, et l'IDE me le suggère, une vilaine solution (pour les classes correspondant réellement à des composants bien entendu) pourrait consister à récupérer les chemins de répertoire des fichiers .bpl et à scanner ces fichiers à la recherche éventuelle d'une mention textuelle des classes recherchées ? ...

    Si tu vois une solution plus élégante, n'hésites pas à m'en faire part.

    P.S : merci encore pour ces conseils venant d'un aussi grand expert

    A+
    Consultez :
    - La F.A.Q Delphi + Les Cours Delphi
    - La sélection des Freewares Delphi

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/08/2006, 23h56
  2. [VBA-E] Savoir si une cellule est contenue dans une plage
    Par psych0o0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2006, 14h12
  3. Savoir si un point est inclus dans un polygone quelconque
    Par SuperBIBI dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 02/08/2005, 19h02
  4. [Liste] Savoir si un élément est présent dans une liste
    Par Wookai dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 02/05/2005, 20h44
  5. Savoir si un codec est installé ?
    Par Neilos dans le forum Windows
    Réponses: 3
    Dernier message: 26/08/2004, 16h29

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