Créer ses propres événements
Date de publication : 03/03/2008
Par
Julien Lelong (Accès Site)
Voici un petit article mettant en oeuvre la création d'événements personnalisés.
I. Qu'est ce qu'un événement personnalisé
II. De la théorie à la pratique
II-A. Déclaration et Implémentation
II-B. Phase de test
III. Conclusion
I. Qu'est ce qu'un événement personnalisé
Un événement personnalisé est un événement dont on va déclarer le comportement. Au niveau de la déclaration, c'est une procédure qui portera le tag "of object".
Cela aura pour but d'indiquer à Delphi que la procédure déclarée n'est pas une procédure classique mais un événement personnalisé.
II. De la théorie à la pratique
Dans la partie de ce tutoriel, nous allons créer un composant dérivé d'un TEdit. Nous allons ajouter à ce composant l'événement "OnValide" qui va permettre d'effectuer
une action selon le contenu du TEdit lorsque la touche "Entrée" sera enfoncée. Comme pour l'événement OnKeyPress, nous pourrons agir sur le contenu du TEdit pour, par
exemple, tester le contenu d'un TEdit et modifier sa valeur en conséquence si besoin est.
II-A. Déclaration et Implémentation
Afin de discuter sur une chose concrète, je mets le code correspond à l'objet ci dessous :
Code du composant TMonEdit |
unit UEditPerso;
interface
uses Windows,Classes,StdCtrls;
type
TEventValidate = procedure (Sender:TObject; var aText:string ) of object ;
TMonEdit=class (TEdit)
private
FOnValide: TEventValidate;
FAText:string ;
public
constructor Create(AOwner: TComponent);override ;
procedure KeyPress(var Key: Char );override ;
published
property OnValide:TEventValidate read FOnValide write FOnValide;
end ;
procedure Register ;
implementation
procedure Register ;
begin
RegisterComponents(' JlnCompo ' , [TMonEdit]);
end ;
constructor TMonEdit.Create(AOwner: TComponent);
begin
inherited ;
end ;
procedure TMonEdit.KeyPress(var Key: Char );
begin
inherited ;
if Key = Chr(VK_RETURN) then
begin
FAText:=Text;
if Assigned(FOnValide) then
FOnValide(Self ,FAText);
Text:=FAText;
end ;
end ;
end .
|
Tout d'abord, il nous faut déclarer la procédure "of object" avant même de créer la classe de l'objet.
Il faut donc la déclarer juste après le mot clé type :
Déclaration de l'événement |
type
TEventValidate = procedure (Sender:TObject; var aText:string ) of object ;
TMonEdit=class (TEdit)
private
public
published
end ;
|
Ici, on déclare l'événement TEventValide qui recevra en paramètre le Sender (en l'occurrence l'objet), et un paramètre
de type string qui sera le contenu du TEdit.
|
Notez la présence du mot clé "var" qui nous permettra de modifier le contenu de AText. (Cela équivalant par exemple au paramètre Key
de l'événement KeyPress d'un TEdit).
|
Pour faire le filtrage sur la saisi, donc savoir quand on a appuyé sur la touche "Entrée", il nous faut surcharger la méthode KeyPress du TEdit.
En effet, dans notre cas, nous allons déclencher l'événement FOnValide (si celui-ci est assigné) à l'appuie de la touche "Entrée".
Evénement KeyPress de TMonEdit |
procedure TMonEdit.KeyPress(var Key: Char );
begin
inherited ;
if Key = Chr(VK_RETURN) then
begin
FAText:=Text;
if Assigned(FOnValide) then
FOnValide(Self ,FAText);
Text:=FAText;
end ;
end ;
|
On surcharge l'événement KeyPress du TEdit pour faire un filtrage sur la touche saisie. Ici, lorsque l'utilisateur appuiera sur la touche
"Entrée", on va vérifier si l'événement OnValide est assigné et si c'est le cas, on effectuera le code présent au sein de l'événement.
|
Il ne faut pas oublier de mettre le mot clé inherited pour que le composant puisse traiter l'événement KeyPress de base.
|
II-B. Phase de test
Dans cette partie, nous allons effectué un petit exemple de test afin de montrer que l'événement OnValidate s'effectue correctement.
Pour se faire, on va créer un nouveau projet.
Si vous avez réécris tout le code précédent dans un fichier .pas, il vous faudra auparavant installer le composant. Pour ce faire, faire ceci :
- Composant
- Installer un composant
- A l'endroit "Nom de l'unité", mettre l'unité correspondant au composant (dans mon cas, UEditPerso.pas)
- Nom du paquet : Laisser tel quel
- Appuyer sur "OK"
- La fenêtre de compilation s'affiche. Appuyer sur "Compiler" (puis sur "Installer" si nécessaire).
Maintenant que le composant est installé, il nous suffit de renseigner l'événement OnValide pour tester le code précedemment écrit :
Code de l'événement OnValide |
procedure TForm1.MonEdit1Valide(Sender: TObject; var aText: String );
begin
if aText = ' slt ' then
aText := ' Bonjour ' ;
end ;
|
Avec le code si dessus, si l'utilisateur saisi le text "slt" et appuie sur la touche "Entrée", alors
on modifie le contenu du TMonEdit en affectant la valeur "Bonjour" à aText.
Bien entendu, le code présenté est un exemple très simple pour la compréhension.
III. Conclusion
Nous avons vu dans cet article comment créer un événement personnalisé et par conséquent, reproduire un événement ressemblant au KeyPress d'un
TEdit de base. Bien entendu, nous aurions pu faire ce test grâce à l'événement KeyPress de base, en évitant les surcharges et la création d'événement, mais
la méthode proposé dans cet article permet d'aborder en douceur la création d'événement et de montrer le principe de fonctionnement.
Copyright © 2008 .
Aucune reproduction, même partielle, ne peut être faite
de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.