Ver Mensaje Individual
  #10  
Antiguo 22-08-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por JuanErasmo Ver Mensaje
lo del hook, es estrictamente necesario?
El problema es que cuando camies ep Parent de tu botón, el evento OnClick no te responderá, porque está en el entorno de memoria designado al nuevo proceso. Por este motivo debes arreglártelas, para conseguirlo, con un Hook.

Código:
HHOOK WHookMouse = 0;
LRESULT CALLBACK MouseHookCallBack(int Code, WPARAM wParam, LPARAM lParam);

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Hook()
{
   if(WHookMouse == 0)
     WHookMouse = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)MouseHookCallBack, HInstance, 0);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::UnHook()
{

   UnhookWindowsHookEx(WHookMouse);
   WHookMouse = 0;

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
 
LRESULT CALLBACK
MouseHookCallBack(int Code, WPARAM wParam, LPARAM lParam)
{
   if(Code>=0){
     if(wParam == WM_LBUTTONDOWN){
       TPoint Point;
       ::GetCursorPos(&Point);
       HWND W = WindowFromPoint(Point);     
       if(W == Form1->Boton->Handle))
            BotonClick();   // Funcion que procese tu acción.    
       }
   }
   return CallNextHookEx(WHookMouse, Code, wParam, lParam);
}
Saludos.

Edito: Escribí de memoria y me he dado cuenta que cometí un pequeño error cambio Boton->Handle por Form1->Boton->Handle;
Todo este código debe estar en la misma unit.cpp
OnClick puede ser un método de Form1 si así lo quieres: entonces Form1->Onclick(); ...o como lo quieres llamar.

Última edición por escafandra fecha: 22-08-2008 a las 08:50:05.
Responder Con Cita