mmm hice una prueba rápida y al menos a mí me va bien en rad 2010, ahora bien al código que publicas le faltan un par de cosas (quizás ya las tengas y no es eso).
1 un puntero a una función si es OnClick podría ser del tipo “void … (TObject* obj)”.
2 en el property “OnClick” debe leer y escribir en el puntero que declaramos anteriormente.
3 cuando llegue el mensaje, nosotros llamamos a “FOnClick” desde “WMLbuttonDown”.
Te dejo como quedaría el .h y la función “WMLbuttonDown”, para que funcione el OnClick.
h.
Código:
typedef void __fastcall (__closure* OnObject)(TObject* val);
class PACKAGE TCustomControl1 : public TCustomControl
{
private:
OnObject FOnClick;//FOnClicke es un puntero del tipo void … (TObject* val), aunque tú puedes cambiarle a uno del tipo que quieras.
void __fastcall WMLbuttonDown (TMessage Message);
public:
__fastcall TCustomControl1(TComponent* Owner);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_LBUTTONDOWN, TMessage,WMLbuttonDown);
END_MESSAGE_MAP (TCustomControl);
__published://Leemos y escribimos en FOnClick
__property OnObject OnClick={read=FOnClick, write=FOnClick};
};
funcion.
Código:
void __fastcall TCustomControl1::WMLbuttonDown (TMessage Message)
{
/**/
if (FOnClick) {//Vemos si fue asignado
FOnClick(this);//Llamamos a la función que fue asignada
}
}