Page 1 of 1

Capturar mensajes

PostPosted: Tue Feb 26, 2013 12:58 pm
by antolin
Hola.

Sabe alguiuen como capturar los mensajes:

WM_ENTERSIZEMODE 0x0231
WM_WXITSIZEMODE 0x9232

Necesito capturarlos desde una MDICHILD para controlar cuando refrescarla tras cambiarla de tamaño. Creo que sería interesante para mucha gente por lo que he leido en el foro.

Re: Capturar mensajes

PostPosted: Tue Feb 26, 2013 1:20 pm
by karinha

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 8:58 am
by antolin
Hay más comands interesantes no incluidos en mi version de FWH (2007):

WM_WINDOWPOSCHANGING 0x0046
WM_WINDOWPOSCHANGED 0x0047
WM_SIZING 0x0214

No se si en otras versiones los han tenido en cuanta.

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 9:00 am
by antolin
Supongo que estos mensajes se pueden capturar desde el método HANDLEEVENT de la clase TWindow, pero preguntaba si no hubiera otra forma de hacerlo sin tener que modificar esa clase.

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 9:07 am
by Antonio Linares
Antolin,

La forma correcta sería heredar una nueva clase a partir de TWindow e implementar su Método HandleEvent() en donde se atienda a esos mensajes.

Nosotros podriamos usar un codeblock y evaluarlo para cada mensaje de Windows, pero decidimos no hacerlo al entender que enlenteceria mucho la aplicación ya que constantemente se generan muchísimos mensajes de Windows.

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 10:00 am
by antolin
Gracias Antonio. Efectivamente modificando la TWindow no va, pero modificando la MDICHILD SI.

Ya sé cuano he termindado de redimensionar la pantalla para refrescar los controles. Ahora voy a ver si averiguo que mensaje recibe cuando le doy al boton "Restaurar" de la Barra de Titulos.

Gracias otr avez.

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 10:16 am
by antolin
OK averiguado es: WM_SIZE 0x0005

Si WParam = 0 la pantalla ha sido restaurada (ni maximizada ni minimizada).
Si WParam = 1 la pantalla ha sido minimizada.
Si WParam = 2 la pantalla ha sido maximizada.
Si WParam = 3 (para pop_ups) cuando otra pantalla ha sido restaurada.
Si WParam = 4 (para pop_ups) cuando otra pantalla ha sido maximizada.

LParam trae las nuevas dimensiones del area de clientes. La parte LOW trae el Width y la parte HIGH el HEIGHT. A ver como las separo ahora...

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 12:07 pm
by Antonio Linares
Puedes usar las funciones nLoWord( nLParam ) y nHiWord( nLParam ) de FWH

Re: Capturar mensajes

PostPosted: Wed Feb 27, 2013 12:18 pm
by antolin
Gracias Antonio.

Lo he resuelto con nHeight := int(LParam/65536) y nWidth := LParam-(nHeight*65536) pero utilizaré las tuyas que son más racionales.