Ver Mensaje Individual
  #3  
Antiguo 15-02-2011
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Reputación: 18
_cero_ Va por buen camino
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
    }
}
Responder Con Cita