Ver Mensaje Individual
  #8  
Antiguo 01-11-2005
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Cita:
Empezado por ariefez
...he implementado el mensaje WM_KILLFOCUS pero no se genera...
¿Cómo lo has implementado?

Como comentó Román, el evento no le llega a la forma. Según el archivo Win32.hlp que todo programador Windows debe tener al alcance de uno o dos clics: «The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus». Entendiendo en términos generales que el concepto de ventana en Win32 es cualquier objeto visible que tenga un identificador (handle) —controles y formas—. Así pues, para que el manejador de mensaje responda deberá ser implementado, como dije antes, en una nueva clase derivada del componente control en cuestión, ¿alguno en especial Ariefez? (TEdit, TButton, TDBGrid...), es decir, creando un nuevo componente descendiente.

Ahora bien, existe una manera de interceptar el mensaje sin tener que definir nuevas clases de componentes, la cual consiste en utilizar el evento OnMessage del objeto Application (más fácilmente con un componente TApplicationEvents). Ahí podrás interceptar el mensaje wm_KillFocus y cualquier otro que sea puesto en la cola de mensajes del programa.
Corrección: El mensaje wm_KillFocus no es puesto en la cola de mensajes de la aplicación. Por lo tanto no se puede utilizar TApplicationEvents para interceptarlo. «Note: OnMessage only receives messages that are posted to the message queue, not those sent directly with the Windows API SendMessage function», ayuda de Delphi.

Espero esto sea de utilidad, seguimos en contacto.

Al González.

Última edición por Al González fecha: 02-11-2005 a las 21:39:54. Razón: Corrección
Responder Con Cita