Ver Mensaje Individual
  #2  
Antiguo 15-06-2006
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Reputación: 20
afxe Va por buen camino
Uso mensajes, a ver si te sirve.

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.
Responder Con Cita