Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mensajes entre formularios (https://www.clubdelphi.com/foros/showthread.php?t=32758)

Ju2an 15-06-2006 16:01:30

Mensajes entre formularios
 
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

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.

Ju2an 15-06-2006 19:13:09

Muchas gracias, ahora lo veo

Saludos


La franja horaria es GMT +2. Ahora son las 07:09:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi