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

Delphi Discussion :

Comment utiliser un composant sans l'installer ?


Sujet :

Delphi

  1. #1
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut Comment utiliser un composant sans l'installer ?
    Bonjour à tous,

    J'aimerais utiliser le composant jvRichEdit de la bibliothèque JVCL sans installer la bibliothèque. (Pourquoi ? ... parce que et c'est vraiment nécessaire).
    En cherchant j'ai trouvé 2 fichiers : jvRichEdit.pas et jvRichEdit.dcu, je me suis dit qu'il fallait les inclure dans le projet (du moins le .pas) mais après ? comment on met le composant dans la fiche principale ?

    Merci de vos éclairages
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Sans installer le composant, tu ne pourra pas le placer graphiquement dans l'IDE.
    Tu peux, en revanche, le créer dynamiquement dans le code, ou bien modifier ton dfm en tant que texte, mais tu ne pourra plus le re modifier visuellement dans delphi sans installer le composant.
    Autre solution, te faire ton propre dpk contenant uniquement de composant. Mais attention, il peut dépendre (et le fera surement) d'autres fichiers de la JVCL. Si tu n'utilise que ce composant, a priori, pas de souci. Par contre, si tu veux utiliser un autre de la JVCL plus tard, tu risques de galérer, les plus simple étant d'installer la JVCL !

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    Je pratique cela pour le TComPort qui n'a pas d'utilité dans la Palette mais à part la partie JWA qui s'utilise sans installation, la JVCL, rien que pour les chemins de recherche ... en mode installé, c'est plus pratique, surtout si tu livres EXE et DLL partageant des BPL.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    il existe tout de même quelques petites astuces que l'on peut utiliser quand on ne désire pas installer le composant.

    1) un composant créé dans le OnCreate de la fiche

    en effet, il est tout à fait possible d'ajouter les composants par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      RichEdit1: TRichEdit; // variable que l'on peut placer dans la fiche si besoin est
    begin
      RichEdit1 := TRichEdit.Create(Self);
      RichEdit1.Parent := Self;
      RichEdit1.Align := alClient;
    end;
    2) surcharger un composant existant

    c'est intéressant dans le cadre de TjvRichEdit, qui si je ne m'abuse est un TRichEdit amélioré
    dans ce cas on place un composant TRichEdit sur la fiche, et on vient surcharger la déclaration pour qu'à l'exécution il devienne un TJvRichEdit


    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
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, 
     
      JvExStdCtrls, JvRichEdit;
     
    type
      TRichEdit = TJvRichEdit; // et le tour est joué !
     
      TForm1 = class(TForm)
        RichEdit1: TRichEdit;
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    cela fonctionne car à la lecture du DFM, Delphi recherche le type de RichEdit1 par RTTI et il va tomber sur TRichEdit = TJvRichEdit, donc un TJvRichEdit

    le seul bémol de cette approche est que les propriétés spécifiques de TJvRichEdit (s'il en a) ne sont pas disponibles dans l'Inspecteur d'objet

    3) la DFM de la mort qui tue

    J'ai utilisé une fois cette technique pour un besoin spécifique et en fait ça marche très bien

    quand on reprend un projet avec un DFM qui déclare un composant donné, il est possible de reprendre une portion du DFM dans un TPanel un peu à la façon d'un TFrame

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    type
      TPanel = class(Vcl.ExtrCtrls.TPanel)
        JvRichEdit1: TJvRichEdit;  
      end;
     
      TForm1 = class(TForm)
        Panel1: TPanel;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    {$R Panel1.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      DFM: TResourceStream;
    begin
      DFM := TResourceStream.Create(HInstance, 'TPanel1', RT_RCDATA);
      try
        DFM.ReadComponent(Panel1);
      finally
        DFM.Free;
      end;
    end;
    et Panel1.DFM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    object Panel1: TPanel1
      object JvRichEdit1: TJvRichEdit
        Align = alClient
      end
    end
    avec ce code, on a un simple TPanel sur la fiche en design, mais au lancement de l'application celui-ci charge le DFM et Panel1.JvRichEdit1 sera un TJvRichEdit avec toutes les propriétés que l'on veux dans le DFM

    cf mon article sur les DFM pour de détails sur leur fonctionnement.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    Si je pratique très souvent la méthode 1, rarement la méthode 2, je suis bluffé par la méthode 3 qui m'était inconnue

    La méthode du TPanel est excellente, à essayer par curiosité

    Pour ma part, j'ai une méthode 4 totalement hors sujet mais illustre la force du DFM :
    Stocker un XML dans une base de donnée, transformer ce XML en DFM et l'afficher par ObjectTextToBinary/ReadComponent,
    principe mis en plus pour un générateur d'application dont j'ai contribué
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut
    Bonjour à tous et merci de vous pencher sur le problème.
    Vous me voyez ravi car entre ShaiLeTroll et Paul TOTH [votre niveau étant très très largement au dessus du mien (vu les réponses que l'on peut croiser sur certains problèmes)] ... je me sens assez confiant. Celà n'enlève bien sur pas leur valeur aux autres contributeurs.

    Mon soucis de base est que je possède Delphi xe4, xe7 et ... j'ai changé mes disques (C: en SSD et D: en SATA) et ... IMPOSSIBLE de réinstaller jcl et jvcl!!!! j'ai essayé un nombre de topic incroyable mais rien à faire, ça plante. Avant j'avais un peu de mal mais j'arrivais à finalement mettre tout ça en place mais là ...
    (j'ai même installé Delphi Tokyo pour voir et pareil ... ça foire).
    D'où l'idée de me passer de cette bibliothèque et de travailler le plus possible en natif.

    Mon composant de prédilection : RichEdit car on peut y mettre des images contrairement au RichEdit natif.

    Méthode 1 : oui, je la connaissait celle là, juste comme disait guillemouze, il faut tout définir par code, c'est long mais çà fonctionne (en aveugle niveau visuel)
    Methode 2 : j'ai lu des choses là dessus sans avoir osé aborder se sujet car me paraissant au dessus de ma compétence. mais en lisant le bout de code ... celà semble très simple, je l'essaye pour voir ...
    Methode 3 : et bien si ShaiLeTroll est scotché ...

    Bon j'essaye la version 2 qui m'a l'air plus simple ... je reviens vers vous au pire pour vous faire part de mes soucis et au mieux mettre résolu et mettre le détail de la solution retenue (ça peut intéresser du monde)
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

  7. #7
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut
    Bon, j'ai résolu ... mais de la "pire" manière par rapport à la demande initiale : j'ai pris mon temps, fait très attention et j'ai réinstallé la librairie Jedi
    (Celà n'enlève en rien le caractère pédagogique des réponses apportées)

    flute, comment on met "Résolu" ??? alors ... en bas à gauche de la page qu'ils disent ... vois rien ... heuuu ... vois vraiment rien! Bon, je vais me faire gronder, je reviendrait quand je trouverai le bouton pour éteindre la lumière
    Ahhhhh, c'est EN SORTANT! fallait le deviner! Dis monsieur le Modérateur, dans les règles du forum, tu pourrais rajouter qu'il faut d'abord enregistrer les changements et alors apparaît le bouton ?
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

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

Discussions similaires

  1. [Runtime] comment utiliser une appli sans access
    Par Zetophe dans le forum Runtime
    Réponses: 3
    Dernier message: 24/04/2007, 13h31
  2. [Interbase] Utiliser une BD sans devoir installer le client?
    Par MiJack dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2006, 18h41
  3. Utilisation de composant sans Form est elle possible
    Par Hypollite76 dans le forum Composants VCL
    Réponses: 26
    Dernier message: 01/12/2005, 12h07
  4. Comment utiliser le composant TUDPSocket ?
    Par zodd dans le forum Web & réseau
    Réponses: 11
    Dernier message: 16/11/2005, 12h09
  5. Comment utiliser un composant sans son nom ?
    Par aliwassem dans le forum Langage
    Réponses: 4
    Dernier message: 03/10/2005, 20h47

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