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

Delphi Discussion :

Creer un evenement pour un objet


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 197
    Points : 54
    Points
    54
    Par défaut Creer un evenement pour un objet
    Bonjour a tous,
    j'ai creer un objet TPersoBtn qui herite de TBouton.
    Tout marche bien et c'est vraiement merveilleu l'approche OO dans le genie logiciel.
    Maintenant je suis coincé à un niveau.
    Je veux créer un evenement auquel mes objets doivent réagir
    Mercie de m'aider.
    Cordialement.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    Quel type d'événement?

    Il peut y avoir plusieurs façons de faire.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2003
    Messages : 110
    Points : 109
    Points
    109
    Par défaut
    Si tu veux que plusieurs objets ont les même actions, regarde du côté des ActionList.

    Sinon tu te mets sur la fenêtre des propriétés en faisant "F11", et là tu vas sur l'onglet "évènement", et du double-clic sur l'évènement que tu veux.

    Voilà, sinon tu peux en créer en plus mais là c'est plus difficile.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par pinson
    Voilà, sinon tu peux en créer en plus mais là c'est plus difficile.
    Je crois justement que c'est ce qu'il veux faire, donc on en revient à la question de Linkin:

    Citation Envoyé par Linkin
    Quel type d'événement?
    @+

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 197
    Points : 54
    Points
    54
    Par défaut
    Un evenement que le formulaire declanchera à l'ouverture

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 197
    Points : 54
    Points
    54
    Par défaut
    En java par exemple pour créer un evenement
    tous les class qui doivent reagir à un event implementent une meme interface.
    et à la création d'1e instance elle est ajoutée dans un conteneur appelér listner et une foction fire(...) parcour le listner execute les methode appropriées ainsi tous les objets enregistrés dans le listner reagissent à l'evenement.
    Ainsi en JAVA on peut créer tout event que l'on shouhaite.
    je ne sais pas si delphi foctionne de la meme maniere.
    Dans tous les cas mon but est de pouvoir créer un Event et de le declenché a tous moment par code a fin que mes objets executent des taches specifique.
    cordialement.

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Un événement, en Delphi, ce n'est rien de plus qu'une propriété de type méthode. En réalité, quand un événement est soulevé et que ce dernier est géré, une méthode est exécutée.

    Disons que tu veuilles déclencher un événement lorsque le texte (Caption) sur ton bouton change.

    1- Déclarer un type méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type
      TMonTypeMethode = procedure(Sender: TObject) of object;
    2- Dans ta classe, déclarer un champ qui va contenir la méthode à exécuter lors du soulèvement de l'événement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private
      FOnCaptionChanged: TMonTypeMethode;
    3- Toujours dans ta classe, déclarer une propriété qui permettra à l'utilisateur de ta classe de gérer ton événement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public
      property OnCaptionChanged: TMonTypeMethode 
        read FOnCaptionChanged write FOnCaptionChanged;
    4- Dans ton code, lorsque tu sais que le Caption a été changé et que tu veux soulever l'événement, tu vérifier que l'événement est géré et appeller la méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TMaClasse.ChangerCaption;
    begin
      //...
      //Code qui change le caption
      //ATTENTION :  C'est à toi de gérer le changement de caption!
      //...
     
      if FOnCaptionChanged <> nil then //On teste si l'événement est géré
        FOnCaptionChanged (self);  //On appelle la méthode
    end;
    5- Enfin, si l'utilisateur de ta classe désire réagir au changement de Caption, il devra implémenter un gestionnaire d'événement pour OnCaptionChanged:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure TForm1.DoCaptionChanged(Sender: TObject);
    begin
      Showmessage('Le caption a changé');
    end;
     
    procedure TForm1.MonTest;
    var
      MonObjet: TMaClasse;
     
    begin
      MonObjet := TMaClasse.Create;
      MonObjet.OnCaptionChanged := DoCaptionChanged;
      MonObjet.Caption := 'abc';
      MonObjet.Free;
    end;
    Bon dev!

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 197
    Points : 54
    Points
    54
    Par défaut
    Merci slimjoe pour ton aide tres instructif.
    mais comment je declenche on event.
    je sais que les event de la souris sont declenchés automatique...
    dans mon cas je veux que l'event soit decleché par un element de mon programme. si tu veux un formulaire dans son onShow doit soulever le drapau pour que les objet qui ecoute l'event repondent.
    cordialement.

  9. #9
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    A ce thread je ne peux que répondre par un peu d'auto-pub
    Tutoriel sur la création de composants en Delphi

  10. #10
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par toure32
    mais comment je declenche on event.
    je sais que les event de la souris sont declenchés automatique...
    Justement, non.

    Quelque part dans la classe TButton, il y a un listener de messages Windows. Quand Windows envoie au bouton le message que ce dernier a été cliqué, la classe soulève l'événement OnClick. Il n'y a rien d'automatique. C'est la classe qui décide si l'événement se soulève.

    Citation Envoyé par toure32
    dans mon cas je veux que l'event soit decleché par un element de mon programme
    Un élément de ton programme ? Peux-tu être plus précis stp ? Tu veux que ça soit ta fiche Form1 qui soulève l'événement de ton objet et non l'objet lui-même ? Ne pourrais-tu pas donner un exemple précis de ce que tu cherches à faire ?

    Citation Envoyé par toure32
    si tu veux un formulaire dans son onShow doit soulever le drapau pour que les objet qui ecoute l'event repondent.
    Tu voudrais que sur le OnShow de ta fiche, l'événement OnClick d'un de tes bouton se déclenche ? Facile : comme c'est une méthode tu n'as qu'à l'appeler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.OnShow(Sender: TObject);
    begin
      if MonBouton.OnClick <> nil then
        MonBouton.OnClick(MonBouton);
    end;

  11. #11
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Citation Envoyé par slimjoe
    1- Déclarer un type méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type
      TMonTypeMethode = procedure(Sender: TObject) of object;
    2- Dans ta classe, déclarer un champ qui va contenir la méthode à exécuter lors du soulèvement de l'événement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private
      FOnCaptionChanged: TMonTypeMethode;
    S'il y a uniquement (Sender: TObject), on peut faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private
      FOnCaptionChanged: TNotifyEvent;
    Pas besoin de déclarer autre chose Personnellement je déclare un nouveau type uniquement lorsque j'ai un appel particulier, sinon, j'utilise TNotifyEvent...

  12. #12
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Pedro
    Salut

    S'il y a uniquement (Sender: TObject), on peut faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private
      FOnCaptionChanged: TNotifyEvent;
    Pas besoin de déclarer autre chose Personnellement je déclare un nouveau type uniquement lorsque j'ai un appel particulier, sinon, j'utilise TNotifyEvent...

    +1

    Parfaitement d'accord. Aucune raison de réinventer la roue. Je l'ai fais uniquement dans un but didactique .

Discussions similaires

  1. Evenement pour caractere ajouté ou supprimé dans un input ?
    Par Jerem' dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/02/2005, 14h11
  2. [JtextField]Creer un masque pour Ip
    Par bibx dans le forum Composants
    Réponses: 8
    Dernier message: 11/01/2005, 17h31
  3. Architecture pour les objets d'un jeu
    Par Freakazoid dans le forum DirectX
    Réponses: 7
    Dernier message: 31/07/2004, 13h09
  4. [MFC]arriere plan pour un objet de la classe CStatic
    Par gabriel knight dans le forum MFC
    Réponses: 13
    Dernier message: 28/07/2003, 10h42
  5. [VB6] attendre un événement pour continuer l'exécution
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 12/11/2002, 13h08

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