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 :

C++ Builder : Surcharge MouseEnter


Sujet :

C++Builder

  1. #1
    Membre actif
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juillet 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 31
    Par d�faut C++ Builder : Surcharge MouseEnter
    Bien le bonjour � toute et � tous !

    Je suis en train de d�velopper un composant visuel h�ritant de TCustomControl et je souhaiterais d�river la fonction MouseEnter afin d'effectuer un traitement particulier lors de l'entr�e de la souris sur la surface du controle.

    Le probl�me : je ne connais pas la sp�cification de la fonction MouseEnter dans TCustomControl, contrairement � MouseDown.

    Au fil de mes recherches, j'ai trouv� les diff�rents prototypes suiants :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DYNAMIC void __fastcall MouseEnter(TControl* AControl);
     
    virtual void __fastcall MouseEnter(TMessage& Message);
     
    virtual void __fastcall CMMouseEnter(void); // Delphi
     
    //j'ai même tenté :
     
    virtual void __fastcall MouseEnter(void);
    Mais tout ceci sans r�sultalt : la fonction MouseEnter n'est jamais appel�e lors de l'entr�e du pointeur de la souris sur la surface du composant.

    Aurais-je omis un point important ?

    Merci de me donner un coup de pouce

    OtO

  2. #2
    Membre actif
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juillet 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 31
    Par d�faut Suite du p�riple...
    Bien le bonjour !

    Ne parvenant pas � surcharger la bonne fonction MouseLeave, j'ai donc d�cid� d'approcher le probl�me diff�remment en intervenant directement dans la proc�dure WndProc du composant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TImgTextButton::WndProc(TMessage& Message)
    {
    	if(Message.Msg == WM_MOUSELEAVE)
    	{
    		MouseLeave();
    	}
    	else
    		TWinControl::WndProc(Message);
    }
    Ce qui fonctionne tr�s bien... une seule fois. En effet, la premi�re sortie de la surface du composant g�n�re bien un message WM_MOUSELEAVE, mais ensuite plus rien. J'ai beau passer et repasser sur le bouton, aucun message WM_MOUSELEAVE n'est g�n�r�. Alors les �v�nement OnMouseMove, ... eux sont bien appel�s.

    Alors en bouquinant la doc des API, j'ai cru comprendre qu'une fois le message WM_MOUSELEAVE g�n�r�, la fonction TrackMouseEvent prenait fin et qu'il fallait la relancer sit�t que le pointeur de la souris entrait dans la surface du composant. Ce que je fis dans la fonction MouseMove :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __fastcall TImgTextButton::MouseMove(Classes::TShiftState Shift, int X, int Y)
    {
    	TRACKMOUSEEVENT Info;
    	Info.cbSize = sizeof(Info);
    	Info.hwndTrack = Handle;
    	Info.dwFlags = TME_CANCEL || TME_LEAVE;
     
    	TrackMouseEvent(&Info);
     
    	if(OnMouseMove)
    		OnMouseMove(this, Shift, X, Y);
     
    }
    Malheureusement sans plus de succ�s.

    Si vous avez une solution � ce probl�me, je prends volontiers

    Merci d'avance

    OtO

  3. #3
    Membre actif
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juillet 2005
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 31
    Par d�faut Trouv� !
    Bien le bonjour � tous !

    C'est berc� d'une immense all�gresse que je viens vous voir afin de vous informer que j'ai enfin trouv� mon erreur, et de par ce fait, la solution � mon probl�me !

    En fait il me suffisait d'enlever le else dans la WndProc afin de toujours ex�cuter la fonction WndProc du parent TWinControl.

    La nouvelle WndProc de mon composant donne donc ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TImgTextButton::WndProc(TMessage& Message)
    {
    	if(Message.Msg == WM_MOUSELEAVE)
    	{
    		MouseLeave();
    	}
     
            TWinControl::WndProc(Message);
    }
    Et l�, tout fonctionne parfaitement

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Choisir Visual c++ ou Borland C++Builder ?
    Par DevEric dans le forum Choisir un environnement de d�veloppement
    R�ponses: 31
    Dernier message: 14/06/2007, 23h48
  2. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    R�ponses: 10
    Dernier message: 12/03/2006, 22h33
  3. c++ builder JavaDoc :)
    Par JEG dans le forum C++Builder
    R�ponses: 8
    Dernier message: 08/06/2002, 13h31
  4. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    R�ponses: 1
    Dernier message: 26/04/2002, 09h59
  5. R�ponses: 2
    Dernier message: 20/03/2002, 23h01

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