Ver Mensaje Individual
  #1  
Antiguo 14-02-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
Pasar mensajes con punteros a otra aplicación

Por lo que se, para que TApplication reciba un mensaje de usuario hay que definir el evento Application->OnMessage = AppMessage; y escribir AppMensage:
Código:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // Asignación del procesador de mensajes para la aplicación y sus ventanas
  Application->OnMessage  = AppMessage;
}
.
.
.
.
//---------------------------------------------------------------------------
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
   // USERM_SETPARAM Mensaje de Usuario pasar parámetros
   if (Msg.message == USERM_SETPARAM){
     CmdLine = (char*)Msg.wParam;
     Handled = true;
   }
}
Para que esta forma de enviar mensajes funcione, deben enviarse con la funcion PostMessage. No admite SendMessage del API de Windows, según la propia ayuda de Builder y mi propia experiencia.

El problema está que la ayuda de Builder advierte que no se pasen punteros pues se perderán antes de recibir el mensaje.

He comprobado que si ese mensaje con punteros se envía desde la propia aplicación, el puntero no se pierde. Sin embargo, si es otra la aplicación que lo envía, se recibe el puntero, pero su contenido es NULL.

Se me ocurre sobrecargar la funcion TApplication:WndProc(Messages::TMessage &Message), pero me parece engorroso.

¿Alguien tiene una idea de un método más simple?

Saludos
Responder Con Cita