Création d'un composant avec l'expert composant
Remonter à Création d'un nouveau composant
L'expert Nouveau composant simplifie les premières étapes de la création d'un composant. Quand vous utilisez l'expert Nouveau composant, vous devez spécifier ou accepter les valeurs pour :
- La personnalité (Delphi ou C++) (notez que Win32 est le seul choix pour framework/plate-forme)
- La classe à partir de laquelle le composant est dérivé
- Le nom de classe pour le nouveau composant
- La catégorie de la palette d'outils où vous voulez que le composant apparaisse
- Le nom de l'unité dans laquelle le composant est créé
- Le chemin de recherche où l'unité sera trouvée.
- Le nom du package dans lequel vous voulez placer le composant
L'expert Nouveau composant effectue les mêmes tâches que vous exécuteriez pour créer manuellement un composant :
- Création d’une unité.
- Dérivation du composant.
- Recensement du composant.
Pour ajouter un nouveau composant avec l'expert Nouveau composant
- Pour démarrer l'expert Nouveau composant, choisissez l'une de ces deux méthodes :
- Choisissez Composant > Nouveau composant.
- Choisissez Fichier > Nouveau > Autre, allez à la page Projets Delphi > Fichiers Delphi et double-cliquez sur Composant.
Remarque : L'expert démarré par Fichier > Nouveau > Autre ne peut pas ajouter des composants à une unité existante. Vous devez ajouter manuellement des composants aux unités existantes.
- Remplissez les champs de l'expert Nouveau composant.
- Sur la page Personnalité, framework et plate-forme, sélectionnez le type du composant que vous créez : Delphi ou C++. Si un projet est ouvert dans l'EDI, la personnalité de votre projet est utilisée.
- Sur la page Composant ancêtre, spécifiez la classe à partir de laquelle vous dérivez votre nouveau composant.
- Sur la page Composant, dans le champ Nom de classe, spécifiez le nom de la classe de votre nouveau composant.
- Dans le champ Page de palette, spécifiez la catégorie de la palette d'outils sur laquelle vous voulez installer le nouveau composant.
- Dans le champ Nom d'unité, spécifiez le nom de l'unité dans laquelle vous voulez déclarer la classe du composant. Si l'unité n'est pas sur le chemin de recherche par défaut, modifiez le champ Chemin de recherche selon les besoins.
- Dès que vous avez rempli les champs de l'expert Nouveau composant, cliquez sur Terminer. Pour placer le composant dans un nouveau package ou un package existant, cliquez sur Composant > Installer et utilisez la boîte de dialogue qui apparaît pour spécifier un package.
- Cliquez sur OK. L'EDI crée une nouvelle unité.
Avertissement : Si vous dérivez un composant d'une classe dont le nom commence par "TCustom" (tel que TCustomControl), n'essayez pas de placer le nouveau composant sur une fiche tant que vous n'avez pas redéfini les méthodes abstraites du composant original. Delphi ne peut pas créer des objets d'instance d’une classe ayant des méthodes ou des propriétés abstraites.
Delphi crée une nouvelle unité contenant la déclaration de classe et la procédure Register, et ajoute une clause uses qui inclut toutes les unités Delphi standard. Pour voir le code source de votre unité, cliquez sur Voir > Unités... ou ouvrez le fichier unité dans l'éditeur de code en sélectionnant Fichier > Ouvrir.
L'unité ressemble à ceci :
unit MyControl; interface uses Windows, Messages, SysUtils, Types, Classes, Controls; type TMyControl = class(TCustomControl) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyControl]); end; end.
//header file #ifndef NewComponentH #define NewComponentH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class PACKAGE TNewComponent : public TComponent { private: protected: public: __fastcall TNewComponent(TComponent* Owner); __published: }; //--------------------------------------------------------------------------- #endif
//implementation file #include <vcl.h> #pragma hdrstop #include "NewComponent.h" #pragma package(smart_init); //--------------------------------------------------------------------------- // ValidCtrCheck is used to assure that the components created do not have // any pure virtual functions. // static inline void ValidCtrCheck(TNewComponent *) { new TNewComponent(NULL); } //--------------------------------------------------------------------------- __fastcall TNewComponent::TNewComponent(TComponent* Owner) : TComponent(Owner) { } //--------------------------------------------------------------------------- namespace Newcomponent { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TNewComponent)}; RegisterComponents("Samples", classes, 0); } }