Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

6 réponses
Avatar
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

6 réponses

Avatar
Michael
Michael wrote in
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;
}
}
Avatar
Fabien LE LEZ
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 ?

Avatar
Michael
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 ;)

Avatar
audvard.jm
*
"Michael" a écrit dans le message de
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

Avatar
audvard.jm
**
"Michael" a écrit dans le message de
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


Avatar
Alexandre
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...