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:
Código:
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:
Código:
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:
Código:
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.