|
|
|
ELEMENTS DE BASE1. Présentation de l'applicationIl s'agit de programmer une horloge analogique avec ses trois aiguilles. Ce type de programme peut être facilement réutilisé par toute application nécessitant un affichage de l'heure courante. Nous allons donc programmer cette horloge sous la forme d'un composant qui sera intégré à la palette Delphi. 2. Un premier pasLe premier pas à accomplir est la mise au point (c'est le cas de le dire) de la classe représentée ci-dessous :
Cette classe est destinée à représenter un point sur l'écran. Elle nous sera utile pour matérialiser les extrémités des aiguilles par exemple. Travail à faire
3. Points polairesLes objets de la classe Tpoint sont représentés en coordonnées cartésiennes, c'est-à-dire exprimées en référence à un repère constitué par deux axes comme illustré ci-dessous.
Il existe un autre système de repérage d'un point dans un plan : les coordonnées polaires. Le point est cette fois caractérisé par un angle (par rapport à une droite de référence) et un rayon (distance en le centre du repère et le point).
Le passage d'un système de coordonnées à l'autre est assez simple : > cartésiennes (x,y) à polaires (r,t) : r ß racine carrée ( x2 + y2 ) t est défini par l'algorithme suivant : si x=0 alors
sinon
fin de si > polaires (r,t) à cartésiennes (x,y) : x ß r * cosinus (t) y ß r * sinus (t) Nous allons créer une classe TpointPolaire, dérivée de Tpoint, ne possédant aucun membre donnée supplémentaire mais permettant :
Jeu d'essai : Le point de coordonnées polaires (r=10, t=1) correspond au point cartésien (x=5, y=8). Le point de coordonnées polaires (r=10, t=2) correspond au point cartésien (x=-4, y=9). Remarque : l'angle t est exprimé en radians. Travail à faire
procedure TPointPolaire.setPosPolaireCentre(p_r, p_t : double ; p_centre : TPoint); begin setPosPolaire(p_r,p_t); deplacer(p_centre.getAbs(),p_centre.getOrd()); end; Cette méthode permettra de gérer des points polaires exprimés en fonction d'un centre de repère particulier.
A l'issue de l'exécution de setPosPolaireCentre, le point contiendra les coordonnées cartésiennes exprimées par rapport au centre passé en paramètre (centre du repère). La lecture de ses coordonnées polaires donnera donc comme résultat r2 et t2. 4. Création du composantChaque élément de la Visual Component Library (VCL) de Delphi est un composant utilisable de manière simple dans toute application (il suffit de le sélectionner dans la palette où il apparaît). Chaque composant fait partie d'un paquet de composants, un paquet pouvant en regrouper plusieurs. D'autre part, chaque composant doit être enregistré pour apparaître dans l'interface : c'est le rôle de la procédure "registerComponent" qui précise dans quelle page de palette le composant doit être installé. La démarche générale de création d'un nouveau composant est la suivante :
Travail à faire
Déclarée comme suit : procedure Paint; override; Et définie comme suit :
Initialisation (sur l'événement FormCreate) : monHorloge:=THorloge.Create(Self); monHorloge.Parent:=Self; monHorloge.Width:=151; monHorloge.Height:=151; monHorloge.Top:=100; monHorloge.Left:=100; Destruction (sur l'événement FormDestroy) monHorloge.Free;
5. Mais comment ça marche ?> Le code d'initialisation et de destruction du composant Thorloge n'est utile qu'en phase de test. En effet, lorsque le composant sera installé :
> La méthode Paint (héritée de TgraphicControl) est appelée automatiquement lorsque le composant a besoin d'être redessiné (lorsque l'utilisateur déplace la fenêtre par exemple). Il suffit donc de redéfinir cette méthode virtuelle pour indiquer comment le contrôle doit être représenté. > L'objet Canvas est en fait une surface de dessin. Cette propriété héritée de TgraphicControl fournit tout ce qui est nécessaire pour dessiner : un crayon (Pen), des routines graphiques (comme Ellipse), ... Travail à faire
6. Installation du composant> Avant d'installer le composant dans la palette, il est préférable de le munir d'une icône. Cette icône, qui apparaîtra en mode conception, peut être facilement réalisée grâce à l'outil intégré "Editeur d'images". Le principe est le suivant :
Remarque : si le fichier ".dcr" existe lors de l'ajout du fichier ".pas" au projet, il est automatiquement inclus dans le paquet et la directive $R devient inutile. > Une fois le composant testé, son icône prête, il n'y a plus qu'à procéder à l'installation (après compilation du paquet). En fait, on n'installe pas un composant mais un paquet, ce qui signifie que tous les composants d'un même paquet sont installés ou désinstallés en même temps. Il est possible de masquer certains composants pour ne pas encombre la palette, mais ils ne sont pas désinstallés pour autant. Les options du paquet permettent d'indiquer une description qui apparaîtra dans le gestionnaire de paquets ("Les bases d'une horloge analogique" par exemple). Deux méthodes peuvent être utilisées pour l'installation :
Dans les deux cas, le (ou les) composant(s) du paquet se retrouve(nt) dans la palette, sur la page prévue par la routine de recensement. La désinstallation du paquet se fait à l'aide de l'option "Installer des paquets" du menu "Composant", en sélectionnant le paquet et en cliquant sur le bouton "retirer". > En cas de problème... Si votre composant ne fonctionne pas comme vous l'espériez, le plus simple est de désinstaller le paquet et de reprendre les tests avant installation. Si ces tests s'avèrent corrects, c'est l'installation du paquet qui se passe mal... reprenez-la calmement ! Travail à faire
|
||||||||||||||||||||||||||||||||||||||
|
_____________________________________________
|