[delphi] installer des composants

[delphi] installer des composants

Description

A force de trouver des composants sans indiquer comme les installer... un tutoriel finit par s'imposer. Il ne dispense pas de pencher la tête dans les manuels PDF, mais permet d'avoir une vision globale des procédures à suivre afin de résoudre les problèmes liés à "Classe TBidule non trouvée" ?

Les composants

Un composant est une ressource portant l'extension PAS, accompagnée d'éventuels fichiers INC, DCR et RES. Ces deux derniers formats peuvent contenir des images, des vidéos, des sons, des chaînes, des icônes... Quant aux fichiers INC, ils recensent des directives de compilation afin d'optimiser les compilations via les différentes versions de Delphi. N'oublions pas les éternels fichiers HLP ou CHM qui correspondent à des fichiers d'aide.

Les composants peuvent être plus ou moins imposants. Certains sont de simples fichiers PAS (un standard sur DelphiFr.com et ailleurs aussi), mais d'autres sont des librairies déferlantes avec un bouquet énorme de fichiers. On envisagera par la suite ce dernier cas avec les composants TSynEdit. C'est un bon exercice.

Les composants ont la particularité d'apparaître sur la palette de Delphi (dans différentes rubriques) afin d'être rapidement réutilisables. Mais avant de jouer avec, il faut déjà installer un paquet de conception. Il existe aussi des paquets d'exécution, mais ils ne nous intéressent pas ici. Pour indication, ils jouent le rôle de DLL pour des applications.

Les paquets de conception

Ils portent l'extension DPK.

Si vous n'avez pas déjà de paquets personnels, je suggère sincèrement d'en créer un. Comment ferait-on sinon ?
Pour ce faire :

  • Lancer Delphi
  • Fichier, Nouveau [, Autres...]
  • Paquet, Ok

Note : via > Composants > Installer des composants, Delphi gère un paquet nommé "dclusr30.dpk", ou "dclusr.dpk". Certaines versions de Delphi indiquent en effet la version dans le nom du paquet personnel de l'utilisateur.

Delphi nous invite alors (éventuellement) à spécifier les informations primaires de notre paquet. Remarquons que ces informations pourront être complétées par la suite dans les options du projet. > Projet > Options.

On obtient alors une fenêtre mystérieuse peu commune. Par curiosité, voici deux aperçus de la fenêtre des paquets. Respectivement, les images correspondent aux versions 3 et 7 de Delphi. On distingue alors deux rubriques : les CONTAINS et les REQUIRES. La première rubrique correspond à tous les fichiers de composants contenus dans le paquet, la seconde recense les paquets additionnels utilisés par d'éventuels composants assez spéciaux. Mais on se fichera bien des REQUIRES, car gérés automatiquement par Delphi. Ceci dit, ils peuvent causer quelques soucis parfois. Mais enfin, ces cas sont rares...

On clique alors sur les boutons # Compiler # Installer. Le paquet est alors référencé et il n'y a plus qu'à le remplir de composants (fichiers PAS).

A ce stade, rien n'est révolutionnaire, car ce n'est qu'un référencement. Dans le répertoire où est enregistré le fichier DPK (notons que le dossier des paquets dépend de la configuration de Delphi, cf. options du projet), on remarque l'apparition d'un fichier DPL (Delphi Package Library) pour les premières versions de Delphi, ou d'un fichier BPL (Borland Package Library) pour les plus récentes. Je pense qu'ils ont dû uniformiser les extensions, car en Borland C++ Builder, les paquets portent également l'extension BPL. Cependant, les fichiers DPL ne sont plus supportés dans les versions gérant les BPL.

Ajouter un composant

C'est tout bête: on clique sur # Ajouter, [[red|>}} Parcourir, on sélectionne le fichier PAS que l'on vient de télécharger et on clique sur > Ok. Ceci est pour la base, mais ne soyons pas pressés de compiler le paquet. De plus, un simple ajout d'un fichier ne réactualise en aucun cas le paquet (aucune conséquence au niveau de Delphi). En effet, on vient de modifier le DPK et non le BPL qui est quand même le fichier clé fondamental.

Lors du développement d'un composant, il faut indiquer expressément à Delphi que l'unité est un composant. Pour cela, on déclare une procédure spéciale intitulée «procedure Register». Tous les mots sont réservés, et c'est tout à fait normal. Prenons l'exemple d'un composant idiot, enfin... pas tant que ça en fait puisqu'il rajoute une propriété Align à un TEdit et c'est toujours bien utile. Seulement, dommage que cela n'ait pas déjà été implémenté depuis longtemps dans Delphi : ça aurait évité de déclarer une nouvelle classe dérivée. Enfin, nous avons le fichier BestEdit.pas suivant. Considérez initialement la dérivation comme TCustomEdit.

unit BestEdit;
interface
uses SysUtils, Classes, StdCtrls;
type TBestEdit = class(TCustomEdit)
  published
    property Align;
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Ma palette', [TBestEdit]);
end;
end.

La procédure Register est explicite. Elle référence le composant dans une palette intitulée «Ma palette». Si cela ne vous convient pas, modifiez le nom. C'est très important de choisir le bon nom dès le début, car si on compile avec une mauvaise palette, remodifier le nom sera vain, et il faudra faire un clic droit sur la palette, prendre les propriétés, et déplacer le composant référencé vers la nouvelle palette. Cette fenêtre des propriétés de la palette permet justement de tout gérer : les pages, l'emplacement des composants... C'est très utile !

Si la procédure Register n'apparaît pas (ce qui serait surprenant pour un composant), il faudra ajouter la procédure en suivant le modèle de code précédent.

Référencer le composant

On compile simplement le paquet avec le bouton # Compiler, disponible dans la fenêtre du paquet. Si Delphi vous avertit de la recompilation du paquet, ignorez. On remarque alors que le paquet se désinstalle temporairement puis revient tout seul. Au passage, Delphi indique qui sont les nouveaux composants recensés et ceux désinstallés.

Sauf qu'il peut y avoir des erreurs de compilation... mais là, ce n'est pas le sujet. Si c'est juste un problème au niveau de PUBLISHED, alors supprimez les PROPERTY foireuses.

Le composant apparaît dans la palette. Si le composant n'est pas accompagné d'un fichier ressource (DCR ou RES), il apparaît par défaut avec l'icône suivante. Elle n'est guère explicite...

Attention ! L'absence d'un fichier RES ne signifie pas nécessairement que le composant n'aura pas d'icône. Actuellement, dans notre exemple, le composant hérite de TCustomEdit (qui n'offre cependant pas toutes les propriétés publiées de TEdit) qui est une ébauche de composant pour de futurs composants, tels TEdit et TMemo. En revanche, TEdit (dérivant donc de TCustomEdit) est un composant tout à fait fonctionnel. Il est déjà inclus dans un paquet de Delphi, ce qui fait qu'une icône lui est déjà attribuée (on le voit dans la palette). Si maintenant on dérive notre composant de TEdit (et non plus de TCustomEdit), alors une icône s'affiche: c'est celle de la classe TEdit. La dérivation des classes est corrélée à la dérivation des icônes...

On considère maintenant que le composant hérite de TEdit. C'est beaucoup mieux pour la compatibilité entre versions de Delphi. L'icône est par défaut la suivante. Mais peut-être l'icône ne vous satisfait-elle pas.

Comment faire apparaître ou corriger l'image ?

L'éditeur de ressource

!!! QUITTER Delphi !!!

En effet, Delphi doit avoir sa mémoire purgée.

On utilise alors l'application IMAGEDIT.EXE enregistrée dans le répertoire Bin\ de votre dossier Borland\Delphi\.

On va éditer le fichier RES portant le nom de votre paquet. En l'occurrence, je vais éditer le fichier «C:\Mes documents\tuto_gv\gv.res». Le type du fichier n'est par défaut pas reconnu. Avec > Ouvrir avec... > Parcourir, je sélectionne l'application, je mets une description en cochant "Toujours". Certes imagedit n'ouvre pas le fichier RES directement, mais au moins, lorsqu'on fait > Fichier > Ouvrir dans l'éditeur, le répertoire est déjà le bon...

On remarque que le fichier est vide.

On ajoute donc un fichier image au format BMP. > Ressource > Nouveau > Bitmap. On peut aussi utiliser le clic droit dans l'arborescence. On rencontre la fenêtre suivante:

Je dirais qu'il ne faut jamais dépasser 26x26... sachant qu'il faut laisser une bordure unicolore afin de créer la transparence. Pour une icône, 16 couleurs suffisent. En monochrome, tout est horrible. En SuperVGA, les 16 couleurs de bases n'existent plus (8-(

On fait donc un joli dessin dans la fenêtre. Et on ferme la sous-fenêtre.

Certes, mais cela ne nous dit pas à quel composant correspond ce dessin. Dans la fenêtre de la ressource, il faut renommer sans faute le bitmap par le nom du composant. L'éditeur transforme le nom en majuscules: c'est sans conséquence. Ainsi, nous avons ici ceci :

On enregistre tout et on quitte l'éditeur. On peut alors réouvrir notre fichier DPK, et on le compile (ignorez l'avertissement de recompilation du paquet). La voilà la belle icône.

L'autre technique aurait été de créer un fichier RES (renommé en DCR) avec un contenu sur le même procédé. Ensuite, il faut implémenter dans le fichier PAS du composant, juste en dessous de uses ou de implementation, la petite directive {$R lefichier.dcr}.

Même si cela ne nous intéresse pas dans notre situation, n'hésitez pas à aller consulter le tutoriel de florenth sur les ressources afin de comprendre de quoi il en retourne.

La déferlante des librairies

Les librairies sont souvent bien faîtes au niveau de l'installation.

  • Soit il existe un installateur qui gère tout sans problème.
  • Soit des paquets sont prêts à être compilés et il faut alors choisir celui correspondant à votre version de Delphi.
  • Soit tout est buggé... et rien du tout ! C'est pas très malin.

En cas de doutes, il faut toujours rechercher un fichier «LeNomDeLaLibrairieReg.pas». Une telle unité sert exclusivement au référencement de diverses classes et à rien d'autre. Mais cette technique n'est pas toujours effective, bien que redoutable (cf. ici).

Conclusion

Je crois que vous savez tout... woaaa !!!

Tanguy ALTERT, http://altert.family.free.fr/

Ce document intitulé « [delphi] installer des composants » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous