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 :

User message


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [RESOLU] User message
    Je cherche a transmettre un message utilisateur (WM_APP + x) a un objet que j'ai créé a partir de TControl. Je n'arrive pas a trouver le handle que je doit passer a sendmessage() pour que mon objet puisse le traiter !

    Mon code :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    const WM_FILEREADY = (WM_APP + 7);
     
    class TTestLabel : public TCustomLabel
    {
    private:
            Controls::TWndMethod OldLabelWP;
            void __fastcall NewLabelWP(TMessage &Msg);
    protected:
    public:
            __fastcall TLabelDate(TComponent* Owner);
          __fastcall virtual TTestLabel(Classes::TComponent* AOwner);
     
    __published:
    };
     
    __fastcall TTestLabel::TTestLabel(Classes::TComponent* AOwner)
      : TCustomLabel (Owner)
    {
       OldLabelWP = WindowProc;
       WindowProc = NewLabelWP;
    }
     
    void __fastcall TTestLabel::NewLabelWP(TMessage &Msg)
    {
      if (Msg.Msg == WM_FILEREADY)
     {           // mon traitement... 
        Font->Color = Msg.LParam; 
        Msg.Result = 0;
     }
     else OldLabelWP(Msg);
    }
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      LabelTest = new TTestLabel(this);
      LabelTest->Parent = this;
      LabelTest->Caption = "Label Text";
    }
     
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
      SendMessage(LabelTest ,WM_FILEREADY,0, clBlue);
    }
    pour votre aide..


    [Modération, Alacazam : Prière de rajouter le [RESOLU] quand vous êtes satisfait, merci]

  2. #2
    ubu
    ubu est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    TCustomLabel est un controle non fenetré. Il ne posséde pas de handle.

    Tu peux essayer TCustomStaticText à la place, qui lui te permet de recupérer un Handle par la propriété du même nom.

    (pense à mettre les balises codes, c'est plus sympa à lire).

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut user message suite
    Ok j'avais trouvé !
    Pour les objet non fenetre il y a une technique mais qui consume de la resource windows !
    Je la donne ca peut toujours servir...

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #define WM_UPDATE_DATA  (WM_APP + 7)
     
    // Decendant de TControl donc pas de Handle
    class TTestLabel : public TCustomLabel
    {
    __published:
       __property Caption;
    private:
         void __fastcall WindowMethod(TMessage &Msg); // Metode de reponse
    public:
         HWND FWindow;  // Handle sur le methode de reponse
         __fastcall virtual TTestLabel(Classes::TComponent* AOwner);
        __fastcall virtual ~TTestLabel(void);
    };
     
    //---------------------------------------------------------------------------
    __fastcall TTestLabel::TTestLabel(Classes::TComponent* AOwner)
      : TCustomLabel (Owner)
    {
       FWindow = AllocateHWnd(WindowMethod); // Cree un Handle
    }
     
    //---------------------------------------------------------------------------
    __fastcall TTestLabel::~TTestLabel(void)
    {
      DeallocateHWnd(FWindow);      // detruit le Handle
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TTestLabel::WindowMethod(TMessage &Msg)
    {
      if (Msg.Msg == WM_UPDATE_DATA)
      {
        if( Msg.WParam )
          strcpy((char *)Msg.LParam, Caption.c_str());
        else
          Caption = (char *)Msg.LParam;
        Msg.Result = DefWindowProc(FWindow, Msg.Msg, Msg.WParam, Msg.LParam);
      }
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       char buf[50];
     
      // Lecture du controle
       SendMessage(TestLabel->FWindow ,WM_UPDATE_DATA, 1, (long)buf);
       Label1->Text = buf;
    }
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
       char buf[50];
      // Ecriture du controle
       strcpy(buf, Edit1->Text.c_str());
       SendMessage(TestLabel->FWindow ,WM_UPDATE_DATA, 0, (long)buf);
    }
    Merci


    [Modération, Alacazam : Prière de ne pas utiliser les balises n'importe comment, merci]

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

Discussions similaires

  1. Relation user -> message dans service messagerie interne
    Par eluus dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 28/02/2012, 00h32
  2. Réponses: 12
    Dernier message: 24/11/2008, 17h10
  3. Réponses: 0
    Dernier message: 28/08/2008, 11h38
  4. Réponses: 2
    Dernier message: 21/02/2007, 09h00
  5. Réponses: 5
    Dernier message: 13/03/2006, 15h51

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