Amis du soir...
Je bloque à la réalisation de mon programme avec BCB6:
J'ai écrit une classe "matrice" qui contient le résultat d'une requête SQL (tableau 2D)
D'autre part, j'ai un TStringGrid (aie..on s’écarte du c++ standard..) dans lequel je souhaite voir apparaitre les données de la matrice.
Dans l’événement TStringGrid->DrawCell, je veux appeler une méthode de la classe matrice qui afficherait la donnée dans la case correspondante.(méthode matrice->Remplit_Cellule() )
Jusque là, ça fonctionne, j'appelle la fonction ainsi depuis StringGrid->DrawCell:
matrice->Remplit_Cellule (StringGrid1,ACol,ARow,Rect);
Maintenant, je souhaite appeler une fonction Inhiber(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y) à chaque click d'une cellule, depuis la classe matrice.
Je pensais écrire qqchose comme ça:
matrice->Remplit_Cellule (StringGrid1,ACol,ARow,Rect, (Inhiber)(StringGrid1) (1)(1)(ACol)(ARow) );
Mais j'obtiens un message d'erreur à la compilation:
qui me renvoie à ceci dans l'aide:
E2034 Cannot convert 'type1' to 'type2'
An assignment, initialization, or expression requires the specified type conversion to be performed, but the conversion is not legal.
In C++, the compiler will convert one function pointer to another only if the signature for the functions are the same. Signature refers to the arguments and return type of the function. For example:
myex( int );
typedef int ( *ffp )( float );
test()
{
ffp fp = myex; //error
}
Seeing that myex takes an int for its argument, and fp is a pointer to a function which takes a float as argument, the compiler will not convert it for you.
In cases where this is what is intended, performing a typecast is necessary:
myex( int );
typedef int ( *ffp )( float );
test()
{
ffp fp = (ffp)myex; //ok
}
Au passage voici la déclaration de la fonction Remplit_Cellule dans la classe matrice:
void Remplit_Cellule(TObject *Sender,int ACol, int ARow, TRect &Rect,void (*OMU) (TObject *,TMouseButton,TShiftState,int,int)=NULL );
Je ne comprend pas comment passer les paramètres de la fonction Inhiber lors de l'appel à la méthode Remplit_Cellule.
Pouvez vous m'aider ?
Partager