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



Rechercher
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

AJOUT D'UNE FONCTION ALARME

1. Réglage de l'alarme

Nous allons faire sonner ce réveil jusqu'ici un peu inutile... L'idée est de permettre à l'utilisateur de programmer une alarme (un message) en indiquant la date et l'heure.

Pour indiquer ces informations, l'utilisateur doit disposer d'une fiche de saisie comme celle présentée ci-dessous :

D'où sort cette boîte de dialogue ?

Une fiche Delphi est un objet.
Appelons celle-ci "fm_dialogue". Lorsque l'on crée cette fiche, Delphi génère automatiquement :

  • Une classe Tfm_dialogue qui contient des attributs (la zone de texte pour la saisie du libellé par exemple) et des méthodes (la procédure bt_okClick qui répond à l'événement OnClick du bouton bt_ok par exemple).
  • Un objet de cette classe sous la forme d'une déclaration comme : var fm_dialogue : Tfm_dialogue.

Le composant Horloge est en fait représenté par plusieurs classes (Thorloge, Taiguille, ...). Chaque classe peut contenir des attributs de tout type, et notamment de type classe (une horloge "contient" trois aiguilles par exemple).

Rien ne s'oppose donc à ce que la classe Thorloge contienne un attribut de type Tfm_dialogue.

Il faudra donc :

  • Déclarer cet attribut dans la partie privée de la classe : "dialogue : Tfm_dialogue".
  • Penser à créer l'objet dans le constructeur de Thorloge : "dialogue.Create(self)" // self est l'horloge elle-même, propriétaire de la boîte de dialogue).
  • Penser à détruire la fiche dans le destructeur de Thorloge : "dialogue.Release" // et non dialogue.free (la méthode Release détruit la fiche après la fin d'exécution des éventuelles procédures événementielles qui lui sont liées).

Pour mémoriser l'alarme programmée, la classe Thorloge doit également disposer des attributs suivants :

  • Un booléen alarme // est-elle programmée ?
  • Un objet de type TDateTime momentAlarme // la date et l'heure de l'alarme.
  • Une chaîne de caractères libelleAlarme // le texte du message associé à l'alarme.

Ouverture et fermeture du dialogue

L'ouverture de la boîte de dialogue sera faite sur l'événement double-clic de l'horloge elle-même. Il faut pour cela définir une méthode "horlogeDblClick" chargée d'afficher la fiche et indiquer cette méthode comme gestionnaire de l'événement double-clic sur le composant par " OnDblClick:=horlogeDblClick;" (cette affectation doit être faite dans le constructeur de la classe Thorloge).

La boîte de dialogue va être affichée de manière modale : l'utilisateur devra cliquer ok ou annuler avant de pouvoir continuer à faire autre chose.

L'ouverture modale est faite par la méthode ShowModal qui retourne une information de type ModalResult permettant de savoir sur quel bouton l'utilisateur a cliqué :

if dialogue.ShowModal=mrOk then

// renseigner alarme, momentAlarme et libelleAlarme.

endif

La valeur de retour associée à un bouton peut être programmée de deux manières :

  • En paramétrant la propriété ModalResult du bouton en phase de conception (ce sera le cas pour le bouton annuler, ModalResult = mrCancel).
  • En affectant le résultat directement dans le code associé au bouton, ce qui permet d'effectuer d'autres traitements (ce sera le cas pour le bouton ok).

procedure Tfm_dialogue.bt_okClick(Sender: TObject);

begin

// traitement de contrôle de la date et de l'heure d'alarme

ModalResult:=mrOk;

end;

Saisie de la date et de l'heure

Les zones de saisie date et heure sont des composants TDateTimePicker (respectivement dtp_date et dtp_heure). Ce composant est paramétrable et peut donc représenter une date (TDate) ou une heure (TTime).

Pour obtenir une valeur de type DateHeure (TDateTime), il suffit en fait d'ajouter une valeur de type date et une valeur de type heure. En effet, une valeur de type TDateTime est un réel dont la partie entière représente la date et la partie décimale représente l'heure. Il faudra donc affecter la valeur Time du composant dpt_heure à la propriété Time du composant dtp_date. A l'issue de cette affectation, la propriété "DateTime" du composant "dtp_date" contiendra le moment complet saisi par l'utilisateur.

Déclenchement de l'alarme programmée

A chaque déclenchement du composant Timer, il faut vérifier si l'alarme est programmée et envoyer le message prévu si le moment est venu.

Travail à faire

  • Créez la fiche de paramétrage de l'alarme. Il n'est pas nécessaire qu'elle appartienne au projet de test, il suffit qu'elle soit mentionnée dans la clause uses de l'horloge. Par contre, elle devra être intégrée au paquet contenant le composant.
  • Modifiez la classe Thorloge en y ajoutant les attributs permettant de mémoriser les données de l'alarme et la boîte de dialogue.
  • Modifiez le constructeur et le destructeur de l'horloge pour prendre en compte le dialogue.
  • Ajoutez une gestion de l'événement double-clic sur l'horloge.
  • Modifiez la procédure événementielle déclenchée par le timer.
  • Testez le tout.

2. Réaction paramétrable

L'utilisateur de notre composant peut avoir envie de déclencher un traitement particulier lors du déclenchement de l'alarme (au lieu d'afficher un simple message) : jouer un concerto de Mozart, formater le disque dur, etc...

Afin de lui offrir cette possibilité, il faut publier la procédure à déclencher comme une propriété de l'horloge. Cette propriété est de type "procedure of object", c'est-à-dire qu'elle représente l'adresse d'une méthode. Le programmeur pourra donc y mettre n'importe quelle fonction membre de la classe du formulaire principal de son application.

Pour pouvoir déclarer une telle propriété, il faut créer un type au début du fichier horloge.pas :

type TprocAlarme=procedure of object;

Il suffit ensuite de :

  • Déclarer une propriété publiée OnAlarme de type TprocAlarme.
  • De lui associer une donnée privée FonAlarme de type TprocAlarme (en lecture comme en écriture).
  • De créer une méthode "par défaut" de gestion de l'alarme et de l'affecter à la propriété OnAlarme à la création de l'horloge.
  • De fournir une méthode publique retournant le libellé de l'alarme. Ce libellé pourrait en effet être utile au programmeur souhaitant programmer lui-même la procédure d'alarme.
  • D'appeler la méthode pointée par la propriété OnAlarme lors du déclenchement. Ceci peut être fait par le code ci-dessous après vérification de l'existence d'une méthode :   if Assigned(OnAlarme) then OnAlarme;

Travail à faire

  • Réalisez les modifications nécessaires.
  • Testez le composant sans l'installer.
  • Installez votre composant.
  • Créez une application qui l'utilise et définit une méthode particulière à appeler en cas d'alarme (la propriété OnAlarme apparaît dans les événements liées à l'objet horloge).
   

_____________________________________________  
© - Réseau C E R T A 

Ministère de l'Éducation Nationale