[BCB6] Passage de paramètre d'une fonction

Le
Michael
Bonsoir à tous,

j'ai un composant TImage pour lequel je définis un évènement onClick:

TImage * image = new TImage(NULL);
image->OnClick = ImageClick;

avec ImageClick défini comme suit:

void __fastcall ImageClick(TObject *Sender);

Maintenant, mon composant est défini à l'intérieur d'une fonction. Quel
paramètre passer pour définir l'évènement?

void CreateImage(???? fn)
{
TImage * image = new TImage(NULL);
image->OnClick = fn;
}

Merci d'avance

Mike
Vos réponses
Trier par : date / pertinence
Michael
Le #269973
Michael news::

J'ai essayé de passer l'instance de la classe contenant les fonctions
relatives aux évènements, mais là du coup je suis en pleine galère de
déclaration des différentes classes, pour lequel les forward declarations
ne me sont d'aucun secours...

class TForm1
{
private:
Gestion foo;
public:
void __fastcall ImageClick(TObject *Sender) { /* bla bla */ }
void CreateImage() { foo.CreateImage(this); }
};

class Gestion
{
public:
void CreateImage(TForm1 * form)
{
Image * image = new TImage(NULL);
image->OnClick = form->ImageClick;
}
}
Fabien LE LEZ
Le #269972
On 15 Dec 2005 00:15:03 GMT, Michael

Maintenant, mon composant est défini à l'intérieur d'une fonction. Quel
paramètre passer pour définir l'évènement?


Je ne comprends pas la question. Es-tu bien sûr de parler de C++, et
pas d'un truc totalement spécifique à Borland ?

Michael
Le #269926
Je ne comprends pas la question. Es-tu bien sûr de parler de C++, et
pas d'un truc totalement spécifique à Borland ?


Ben justement je ne sais pas trop ;)

Toujours est-il que viens de réussir à faire ce que je souhaite en
faisant comme suit:

class ImageHandler
{
public:
virtual void __fastcall ImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y) = 0;
virtual void __fastcall ImageMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y) = 0;
virtual void __fastcall ImageEndDrag(TObject *Sender, TObject
*Target, int X, int Y) = 0;
};

class Montage_Objet
{
private:
TImage * preview;
public:
Montage_Objet(ImageHandler * handler)
:
{
preview = new TImage(NULL);

preview->OnMouseDown = handler->ImageMouseDown;
preview->OnMouseMove = handler->ImageMouseMove;
preview->OnEndDrag = handler->ImageEndDrag;
}
};

class TForm1 : public TForm, public ImageHandler
{
private:
void __fastcall ImageMouseDown(TObject *Sender, TMouseButton
Button, TShiftState Shift, int X, int Y);
void __fastcall ImageMouseMove(TObject *Sender, TShiftState
Shift, int X, int Y);
void __fastcall ImageEndDrag(TObject *Sender, TObject *Target,
int X, int Y);
public:
__fastcall TForm1(TComponent* Owner)
{
Montage_Objet * objet = new Montage_Objet(this);
/*
bla bla bla
*/
}
};

J'y ai pensé en me souvenant d'une réponse à une autre question que
j'avais posé ici il y a quelques temps...

Donc merci à vous quand même ;)

audvard.jm
Le #270757
*
"Michael" news:
Bonsoir à tous,

j'ai un composant TImage pour lequel je définis un évènement onClick:

TImage * image = new TImage(NULL);
image->OnClick = ImageClick;

avec ImageClick défini comme suit:

void __fastcall ImageClick(TObject *Sender);

Maintenant, mon composant est défini à l'intérieur d'une fonction. Quel
paramètre passer pour définir l'évènement?

void CreateImage(???? fn)
{
TImage * image = new TImage(NULL);
image->OnClick = fn;
}

Merci d'avance

Mike


---
Antivirus avast! : message Entrant sain.
Base de donnees virale (VPS) : 0550-4, 16/12/2005
Analyse le : 18/12/2005 18:13:37
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com








---
Antivirus avast! : message Sortant sain.
Base de donnees virale (VPS) : 0550-4, 16/12/2005
Analyse le : 18/12/2005 18:14:02
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com

audvard.jm
Le #270756
**
"Michael" news:
Je ne comprends pas la question. Es-tu bien sûr de parler de C++, et
pas d'un truc totalement spécifique à Borland ?


Ben justement je ne sais pas trop ;)

Toujours est-il que viens de réussir à faire ce que je souhaite en
faisant comme suit:

class ImageHandler
{
public:
virtual void __fastcall ImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y) = 0;
virtual void __fastcall ImageMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y) = 0;
virtual void __fastcall ImageEndDrag(TObject *Sender, TObject
*Target, int X, int Y) = 0;
};

class Montage_Objet
{
private:
TImage * preview;
public:
Montage_Objet(ImageHandler * handler)
:
{
preview = new TImage(NULL);

preview->OnMouseDown = handler->ImageMouseDown;
preview->OnMouseMove = handler->ImageMouseMove;
preview->OnEndDrag = handler->ImageEndDrag;
}
};

class TForm1 : public TForm, public ImageHandler
{
private:
void __fastcall ImageMouseDown(TObject *Sender, TMouseButton
Button, TShiftState Shift, int X, int Y);
void __fastcall ImageMouseMove(TObject *Sender, TShiftState
Shift, int X, int Y);
void __fastcall ImageEndDrag(TObject *Sender, TObject *Target,
int X, int Y);
public:
__fastcall TForm1(TComponent* Owner)
{
Montage_Objet * objet = new Montage_Objet(this);
/*
bla bla bla
*/
}
};

J'y ai pensé en me souvenant d'une réponse à une autre question que
j'avais posé ici il y a quelques temps...

Donc merci à vous quand même ;)


---
Antivirus avast! : message Entrant sain.
Base de donnees virale (VPS) : 0550-4, 16/12/2005
Analyse le : 18/12/2005 18:17:35
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com








---
Antivirus avast! : message Sortant sain.
Base de donnees virale (VPS) : 0550-4, 16/12/2005
Analyse le : 18/12/2005 18:17:55
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com


Alexandre
Le #270742
bonjour,

Maintenant, mon composant est défini à l'intérieur d'une fonction. Quel
paramètre passer pour définir l'évènement?

void CreateImage(???? fn)
{
TImage * image = new TImage(NULL);
image->OnClick = fn;
}

Borland définit un typedef pour un évenement : TNotifyEvent (je me souviens

plus le type exact, grosso modo pointeur de fonction prenant un TObject* en
paramètre )

Maintenant l'habitude c'est plutot que CreateImage soit membre de la même
classe que la fonction associée à OnClick...

Publicité
Poster une réponse
Anonyme