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