IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Delphi Discussion :

Petit article sur la création d'événement et le TNotifyEvent


Sujet :

Contribuez Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Par défaut Petit article sur la création d'événement et le TNotifyEvent
    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é.

    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;
    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
    3
    4
    5
    6
    7
    8
     
    Private
    { Déclarations privées }
    FMonEvent : TNewEvent;
    ...
    Public
     { Déclarations publiques }
      property MonEvent: TNewEvent read FEvent write FNewEvent;
    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.

    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if assigned(FMonEvent )then
      FMonEvent (Sender,'Chaîne',2,...);
    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 :

    * 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 :

    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;
    I - Utilisation d'un TNotifyEvent

    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.

    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;
    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
     
    if assigned(FMonEvent )then
      FMonEvent (Sender);

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    sympa ton article néanmoins j'aurai exposé le problème dans l'autre sens pour que l'apprentissage d'un débutant se fasse de façon progressive.

    Ainsi j'aurai commencé par expliquer l'exemple très connu de l'ajout d'un évènement OnClick sur un bouton en définissant ce qu'est le fameux TNotifyEvent, un pointeur de méthode et comment on répond à un évènement.

    Ensuite je serais parti sur l'implémentation d'un nouvel évènement dans un composant avec comme type TNotifyEvent. Expliquant ainsi la mécanique pour déclencher les évènements.

    Enfin l'exemple de la création d'un évènement "personnalisé" en définissant un pointeur de méthode spécifique et en l'implémentant dans un composant.

    Mais sinon je n'ai rien vu de techniquement choquant (à part quelques accolades qui manquant dans tes codes )

Discussions similaires

  1. [8] Article sur la création de Jeux ?
    Par slim_java dans le forum Flash
    Réponses: 10
    Dernier message: 08/09/2010, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo