Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Generar mensajes windows (https://www.clubdelphi.com/foros/showthread.php?t=70310)

ElDuc 13-10-2010 16:01:00

Generar mensajes windows
 
Hola a todos,

Estoy haciendo una pequeña aplicación y me interesaría, si es posible, lanzar mensajes PROPIOS para que todos los componentes puedan captarlos y así generar una cierta comunicación entre ellos.

To conozco que en nuestros componentes podemos incluir eventos que responden a mensajes de Windos, como por ejemplo WM_MouseEnter:

Código Delphi [-]
uses ... Messages...;

type TMiBoton=class(TButton)
  procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
end;

procedure TMiBoton.CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
begin
end;
Con este pequeño código dotamos a nuestro nuevo botón de un evento que se disparará cuando el moise entre en su zona.Creo recordar haber leido que nosotros podemos lanzar mensajes a WIndos, que lógicamente pueden recibir nuestros coponentes.Por ejemplo, imaginemos que queremos generar un mensaje MM_XXXX y pasárselo a Windos.Elguien sabe si es esto posible y como se hace;Saludos y gracias por vuestra colaboración.

Neftali [Germán.Estévez] 13-10-2010 17:18:40

Puedes generar tus propios mensajes donde necesites y luego capturarlos también donde los necesites. Por ejemplo, en el foro hemos tratado alguna vez ese ejemplo, generan el mensaje AFTERSHOW de un formulario. De esa misma forma puedes generar otros que necesites.

Necesitas un lugar donde lanzarlo y luego capturarlo desde donde lo vayas a utilizar.

Revisa este hilo o este otro. Ahí mismo tienes un proyecto de ejemplo, que si no me equivoco está también en el FTP del club.

ElDuc 13-10-2010 18:59:15

Muchas gracias Neftali,

De lo que he podido leer en los posts que tan amablemente me has pasado, he deducido que una buena opción es utilizar el procedimeinto PostMessage(Handle, MiMessage,0 ,0);

Esto no me funciona y no sé porque, es decir se manda el mensaje correctamente, pero no se dispara el evento que lo intercepta (o debería interceptarlo.

Te pongo el código:
Código Delphi [-]
Uses
     Messages, Windows;
 
Type
     MY_MESSAGE=WM_User+101M
 
     TMyClass=Class(TPersistent)
     Private
     Procedure MYMESAGE(var Msg: TMessage); message MY_NMESSAGE;
     Public
     Procedure MandaMensaje;
... ...
Procedure TMyClass.MYMESAGE(var Msg: TMessage);
Begin
// =====> Ha llegado
End;
 
Procedure TMyClass.MandaMensaje;
Begin
PostMessage(Application.Handle, MY_MESSAGE,0 ,0);
End;

Como te he comentado, el Post se realiza sin ningún error, pero no se alcanza // =====> Ha llegado.

No sé si el error puede estar en el handle que le paso al psot, ya que al no disponer de uno, le paso el de la aplicación.

Por favor, si pueden, me dicen lo que estoy haciendo mal.

Saludos,

Neftali [Germán.Estévez] 13-10-2010 20:28:59

Basta con que a la hora de lanzarlo cambies:

Código Delphi [-]
PostMessage(Application.Handle, MY_MESSAGE,0 ,0);

por esto:

Código Delphi [-]
PostMessage(Self.Handle, MY_MESSAGE,0 ,0);

Para pasar como parámetro el handle del formulario.


La franja horaria es GMT +2. Ahora son las 16:24:32.

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