I - Création d'évènement avec création de type
Pour créer des événements, on passe par des pointeurs de méthode. Ce qui signifie que les variables déclarées du type de l'évènement créer pointeront sur la méthode.
Ainsi il est possible de réaliser des 'procedure' qui permettront par exemple à un visuel de récupèrer les paramètres d'un traitement. Mais il est aussi possible de réaliser des 'function', dans ce cas lors de la séparatiion visuel / traitement c'est bien le traitement qui récupèrera le résultat.
Création d'un type d'évènement , le fait de noter of object annonce à Delphi que ce sera un évènement personnalisé.
Déclaration de la variable en 'Private' et de la property du type de l'évènement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TNewEvent = procedure (Sender: TObject; Param1: string; Param2 : integer;...) of object; TNewEvent = function (Sender: TObject; Param1: float;...) : String of object;
Initialisation de la variable : il faut initialiser la variable pour indiquer que pour le moment l'évènement est en stand-by. En générale on effectue cette opération au moment du create de l'objet contenant l'événement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private { Déclarations privées } FMonEvent : TNewEvent; ... Public { Déclarations publiques } property MonEvent: TNewEvent read FEvent write FNewEvent;
Code : Sélectionner tout - Visualiser dans une fenêtre à part FMonEvent : =NIL;
J'espère éclairer la lanterne de certain et ne pas avoir écrit trop de sottises pour les puristes
Appel de l'évènement : Pour appeler un évènement on testera si ce dernier est assigne
Dans le cas de la séparation du visuel et du traitement, on accédera à l'évènement en déclenchant une procédure compatible sur l'évènement. Deux procédures sont dites compatibles quand elles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if assigned(FMonEvent )then FMonEvent (Sender,'Chaîne',2,...);
* ont le même nombre d'arguments
* renvoient le même type de valeur
* la même méthode d'appel
On déclare dans la partie visuelle une procédure de même signature dans laquelle on pourra récupérer les paramètres de l'évenement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure ActionSurEvent(Sender: TObject; Param1: string; Param2 : integer;...); begin Form1.caption.text := Param1; .... end;
Toujours dans le visuel, sur le déclenchement de l'évènement, on appelle la méthode déclarée :
I - Utilisation d'un TNotifyEvent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TForm1.FormCreate(Sender: TObject); begin MonEvent := ActionSurEvent; .... end;
L'utilisation du TNotiFyEvent est très proche de la méthode précédente, à la différence qu'il n'y a pas de type à déclarer. On l'utilisera dans le cas d'évènements qui n'ont pas de paramètres, ces évènements ne feront que notifier au composant qu'une action a eu lieue.
De même que pour l'évènement personnalisé, on déclare une variable et une property. Et on oubliera pas d'initialiser la varibale à NIL.
Lors de l'appel à l'évènement, on lui passera en paramètre simplement l'appelant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private { Déclarations privées } FMonEvent : TNotiFyEvent ; ... Public { Déclarations publiques } property MonEvent: TNotiFyEvent read FEvent write FNewEvent;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if assigned(FMonEvent )then FMonEvent (Sender);
Partager