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

C++Builder Discussion :

évènements personnalisées avec paramètres


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Par défaut évènements personnalisées avec paramètres
    Bonjour j'aimerais réussir a créer mes évènements personnalisés.
    Tout ce que j'ai trouve de clair est en rapport avec TNotifyEvent mais qui n'a
    aucun paramètre.J'aimerais pouvoir faire comme avec TNotifyEvent mais en pouvant passer plusieurs paramètres
    Étant habituer avec c# et les fameux public event et delegate en c++ je suis égaré..En passant j'utilise c++ builder6
    Merci d'avance .

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Un TNotifyEvent est déclaré sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
    Tu peux personnaliser comme bon te semble :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef type __fastcall (__closure *TBlabla)(paramètres);
    La déclaration dans la classe :

    soit comme donnée membre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public :
    TBlabla OnBlabla;
    soit sous forme de propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private :
    TBlabla FOnBlabla;
     
    public :
    __property TBlabla OnBlabla={read=FOnBlabla, write=SetOnBlabla};
    Le Setter peut permettre d'éviter de passer NULL comme paramètre !

    Celà suppose donc une méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type __fastcall MyOnBlabla(paramètres);
    Et une initialisation (éventuellement dans le constructeur pour éviter un NULL):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OnBlabla = MyOnBlabla;
    Comme il s'agit d'un pointeur (vers méthode), il faut veiller dans certains cas à ce qu'il ne soit jamais NULL !
    Ce ne serait pas le cas si cette méthode était utilisée indirectement via une DYNAMIC.
    Par exemple, OnClick peut être NULL puisque sollicitée par Click (DYNAMIC) de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(FOnCLick != NULL) FOnClick(this);
    C'est à partir de ce niveau là, et c'est juste un avis personnel, que le développement commence à devenir excessivement interessant !

    A plus !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Par défaut
    Merci de ta réponse mais voila que j'ai un eptit problème car je suis pas sur de tout avoir placé a la bonne place...Voila ou j en suis:
    Fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef void __fastcall (__closure *TJoueurEvent)(int score,AnsiString pname);
    class Joueur
    {
    private:
    TJoueurEvent FOnWinEvent;....
    protected:
    void __fastcall SetWinEvent(int score,AnsiString pname);
    void __fastcall RaiseWinEvent(int score,AnsiString pname);
    __published:
    __property TJoueurEvent OnWinEvent = {read=FOnWinEvent, write=SetWinEvent};
    dans le fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall Joueur::RaiseWinEvent(int score,AnsiString pname)
    {
    if(FOnWinEvent!= NULL)
    {
    FOnWinEvent(score,pname);
    }
    }
    ici RaiseWinEvent est la procedure appelé par la classe pour raiser l évènements.. Je ne sais pas quoi implémenter du coté de SetWinEvent.

    Néanmoins je suis proche de la bonne voix cependant lorsque j'associe l'évènement void __fastcall (__closure *TJoueurEvent)(int score,AnsiString pname) a une procédure dans ma form principale j'obtient le message unresolved external __fastcall (__closure *TJoueurEvent)(int score,AnsiString pname)referenced from .........

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 30
    Par défaut
    Bon j'ai trouvé la solution j'étais vraiment proche
    Encore merci à henderson pour ton aide
    Voici pour ceux que ca peut aider
    dans fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef void __fastcall (__closure *TJoueurEvent)(int score,AnsiString pname);
    class Joueur
    {
    private:
    TJoueurEvent FOnWinEvent;
    protected:
    void __fastcall WinEvent(int score,AnsiString pname);
    public:
    __property TJoueurEvent OnWinEvent = {read=FOnWinEvent, write=FOnWinEvent};
    fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall Joueur::WinEvent(int score,AnsiString pname)
    {
    if(FOnWinEvent!= NULL)
    {
    FOnWinEvent(score,pname);
    }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2013, 22h34
  2. évènement "post_it" avec paramètres
    Par Issam dans le forum SQL
    Réponses: 0
    Dernier message: 04/02/2010, 08h13
  3. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  4. [PL/SQL] Curseur avec Paramètre
    Par blids dans le forum Oracle
    Réponses: 5
    Dernier message: 10/10/2004, 20h07
  5. Réponses: 3
    Dernier message: 21/05/2003, 11h44

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