PDA

Ver la Versión Completa : Mensajes entre formularios


Ju2an
15-06-2006, 16:01:30
Hola, tengo que hacer un programa que envie mensajes entre formularios, alguien podria darme una mano con un ejemplo?
Hablo de Tmessage, sendmessage, etc...

Muchas gracias

afxe
15-06-2006, 18:40:26
En una Unit crea constantes para los mensajes que vas a emplear, y haz un use en la interface de todos los forms que harán uso de la mensajería.
Usa la numeración de mensajes a partir de $7FFF, ya que son los que están libres. Por ejemplo:


unit MisMensajes;

const
WM_USER = $7FFF;

WM_MUESTRA_TIEMPO = WM_USER + 100;
WM_MUESTRA_CONEXION = WM_USER + 101;
WM_MUESTRA_SUMA = WM_USER + 102;

WM_REFRESH_USUARIO = WM_USER + 501;
WM_REFRESH_EMPRESA = WM_USER + 502;
WM_REFRESH_ENTIDAD = WM_USER + 503;
WM_REFRESH_FACTURA_EMI = WM_USER + 512;
WM_REFRESH_FACTURA_REC = WM_USER + 513;

WM_CAMBIO_EMPRESA = WM_USER + 900;
WM_CAMBIO_FECHA = WM_USER + 901;





Cuando en un form se realice alguna acción que quieras que se enteren otros forms mandas un mensaje:



PostMessage(Application.Handle, WM_REFRESH_EMPRESA, ElCodigo, 1);



Puedes usar SendMessage de la misma manera (mirate la ayuda). Además puedes pasar 2 parámetros de tipo entero largo, muy util.

En los Forms donde quieras que se procesen determinados mensajes debes meter un componente TApplicationEvents y programar el evento OnMessage. (Delphi 7 trae este componente en Additional, si usas una versión anterior puedes instalar las rusas (RX), que contienen también este componente).

Un ejemplo de como programar el evento OnMessage:


procedure TFrmM_Empresas.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if (Msg.Message = WM_REFRESH_EMPRESA) then begin
if Msg.wParam > 0 then begin
if Msg.lParam = 1 then begin
Qry.Locate('CODIGO', Msg.wParam, [loCaseInsensitive]);
end;
if Msg.lParam = 2 then begin
Qry.Close;
Qry.Open;
Qry.Locate('CODIGO', Msg.wParam, [loCaseInsensitive]);
end;
end;
end;
end;




Lo he escrito muy deprisa... espero no haber metido la pata en nada...

Saludos.

Ju2an
15-06-2006, 19:13:09
Muchas gracias, ahora lo veo

Saludos