Accueil | MEET | PFEG | IGC | STG | BTS IG | BTS SIO | Cours | Didactique | Exos | Glossaire | Labo | Sujets | Outils Imprimer cette page



Rechercher
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ELEMENTS DE BASE

1. Présentation de l'application

Il 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 pas

Le 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

  • Créez un nouveau projet Delphi, munissez-le d'une fiche et d'une unité "Point" contenant la description de cette classe.
  • Testez le bon fonctionnement en mettant des boutons de commande sur la fiche permettant d'initialiser, de déplacer, et d'afficher les coordonnées d'un point.

3. Points polaires

Les 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

si y=0 alors

t ß 0

sinon

si y>0 alors

t ß pi / 2

sinon

t ß - pi / 2

fin de si

fin de si

sinon

si y>0 alors

t ß arc tangente ( y / x )

sinon

t ß arc tangente ( y / x ) + pi

fin de si

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 :

  • D'initialiser un point avec des coordonnées polaires.
  • De fournir la coordonnée polaire rayon (r).
  • De fournir la coordonnée polaire angle (t).

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

  • Complétez le diagramme de classes présenté plus haut.
  • Ajoutez la classe TpointPolaire à l'unité Point.pas et testez-en le fonctionnement.
  • Complétez votre classe en ajoutant la méthode suivante :

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 composant

Chaque é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 :

  • Créer un nouveau paquet pour contenir le composant (ou ouvrir un paquet existant pour l'y ajouter). La création d'un nouveau paquet se fait simplement par "fichier/nouveau/autre/paquet".
  • Créer un nouveau composant (composants/nouveau composant).
  • Indiquer la classe dont dérive le composant, le nom de la classe du composant, la page de palette de destination et le nom de l'unité contenant le code.
  • Mettre au point le composant en intégrant un objet de ce type directement dans un projet.
  • Installer le composant dans la palette.

Travail à faire

  • Conservez votre projet ouvert, créez un nouveau paquet et enregistrez-le sous le nom "paquetbases.dpk".
  • Ajoutez un composant "Thorloge" à ce paquet : il dérive de TgraphicControl (controls) et doit s'installer dans la page de palette "exemples". Son source se situe dans l'unité "horloge.pas".
  • Examiner le code généré, on retrouve bien la procédure d'enregistrement du composant.
  • Modifiez le code de la classe Thorloge en ajoutant une méthode publique "Paint"

Déclarée comme suit :

procedure Paint; override;

Et définie comme suit :

procedure THorloge.Paint;

// appelée automatiquement par le système en cas de réaffichage du composant

begin

canvas.Pen.Width:=1;

canvas.Ellipse(0,0,Width,Height);

end;

  • Compiler le paquet.
  • Ajouter "horloge.pas" à la clause uses de la fiche du projet, déclarez-y un membre donnée privé "monHorloge" de type Thorloge et prévoyez son initialisation et sa destruction :

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;

  • Testez l'application

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 création de la fiche entraînera automatiquement celle de l'horloge.
  • Le programmeur qui l'utilise fixera sa taille et sa position à l'aide de la souris en phase de conception.
  • La destruction de la fiche entraînera celle de l'horloge.

> 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

  • Refaites la même chose en essayant de ne pas trop regarder cette page...

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 :

  • On crée un fichier de "ressources composants" portant le nom de l'unité : "horloge.dcr".
  • Dans ce fichier, on crée autant de ressources de type bitmap qu'il y a de composants à recenser (ici un seul).
  • Chaque bitmap doit mesurer 24 pixels sur 24 pixels et porter le nom du composant concerné (ici Thorloge).
  • L'association entre le fichier dcr et le paquet de composant est fait en indiquant au début du fichier unité (ici horloge.pas) une directive de ressource sous la forme : {$R Horloge.dcr}.

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 :

  • Ouvrir le paquet, le compiler puis cliquer sur installer.
  • Choisir l'option "Installer des paquets" du menu "Composant", cliquer sur ajouter, sélectionner le fichier d'extension "bpl" associé au paquet et cliquer sur le bouton "ouvrir".

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

  • Créez un fichier ressource pour votre paquet contenant le bitmap suivant pour l'horloge.
  • Installez le paquet par la méthode de votre choix.
  • Testez le composant à l'aide d'un nouveau projet.
  • Désinstallez le paquet.
   

_____________________________________________  
© - Réseau C E R T A 

Ministère de l'Éducation Nationale