Problème d'héritage

Forthian Messages postés 7 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 4 février 2004 - 4 févr. 2004 à 08:20
cs_Saris Messages postés 24 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 28 octobre 2006 - 7 mars 2006 à 18:10
Et oui encore un soucis.
Je dois faire un héritage de la classe TImage appellée TImageFille. Jusque là pas de problème je pense. Voici mon code:
#ifndef Unit2H
#define Unit2H
//--------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//--------------------------------------------------------------------
class TImageFille : public TImage
{
__published: // Composants gérés par l'EDI
private: // Déclarations utilisateur
public: // Déclarations utilisateur
__fastcall virtual TImageFille(Classes::TComponent* AOwner)
:TImage(AOwner){};
//--------------------------------------------------------------------
extern PACKAGE TImageFille *ImageFille;
//--------------------------------------------------------------------
#endif

Là où mon problème survient, c'est que je dois faire de cette classe un gestionnaire des événements OnMouseDown et OnDragOver. Ceci se fait en surchargeant les paramètres du constructeur à mon avis. Mais je n'arrive pas à produire quelque chose de correct vu que je n'ai jamais fait de surcharge d'événements.
Merci de me guider.

Jacky Moumoute le Roi Dla Route

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 févr. 2004 à 00:03
pour pouvoir surchaarger une fonction (c'est bien de cela qu'il s'agit?) il faut que celles ci soient déclarées comme virtuelles dans la classe de base
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 févr. 2004 à 00:04
Par contre je ne vois pas le rapport avec les contructeurs
0
cs_Saris Messages postés 24 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 28 octobre 2006
7 mars 2006 à 16:11
As tu trouver une solution ? par ce que j'ai le m^me problème pour la surcharge des évènements de la souris sur mon image...
Quand vecchio56 dis : "virtuelles dans la classe de base", c'est dans notre classe où dans la TImage parce que normalement ça dervait être possible de surcharger ces fonctions...?
0
cs_Saris Messages postés 24 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 28 octobre 2006
7 mars 2006 à 16:27
voici mon code à moi : mais ça marche pas ... pas d'action => pas de surcharge d'opérateur ... pourquoi ?

#ifndef LettreScrabbleVisuelle_H
#define LettreScrabbleVisuelle_H


class LettreVisuelle : public TImage
{
private :
AnsiString sPath;
TWinControl *c;

public :
// Le constructeur
__fastcall LettreVisuelle(char cLettre, TWinControl *control, int iTop, int iLeft);

void __fastcall OnMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);

void __fastcall OnMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y);

void __fastcall OnMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);

};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
// Constructeur
// IN : jeu - pointeur vers la classe jeu
// control - la fenètre sur laquelle on effectue le rafraichissement
//---------------------------------------------------------------------------
__fastcall LettreVisuelle::LettreVisuelle(char cLettre,
TWinControl *control, int iTop, int iLeft) : TImage(control)
{
...
}
//---------------------------------------------------------------------------


void __fastcall LettreScrabbleVisuelle::OnMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
this->Top = 0;
this->Left = 0;
}
//---------------------------------------------------------------------------


void __fastcall LettreScrabbleVisuelle::OnMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
}
//---------------------------------------------------------------------------


void __fastcall LettreScrabbleVisuelle::OnMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
}
//---------------------------------------------------------------------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Saris Messages postés 24 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 28 octobre 2006
7 mars 2006 à 18:10
voilà ce qui dise sur MSDN :

Le déclenchement d'un événement appelle le gestionnaire d'événements par l'intermédiaire d'un délégué. Pour plus d'informations, consultez Déclenchement d'un événement.


La méthode OnMouseDown autorise également les classes dérivées à gérer l'événement sans y attacher de délégué. C'est la méthode recommandée pour gérer l'événement dans une classe dérivée.


Remarques destinées aux héritiers : Lors de la substitution de OnMouseDown dans une classe dérivée, veillez à appeler la méthode OnMouseDown de la classe de base de manière à ce que les délégués inscrits reçoivent l'événement.

problème : ça marche toujours pas ... help me plz !
0
Rejoignez-nous