|
Capturando mensajes de Windows a nivel de aplicación
Copyright © 2000 Ernesto
De Spirito
A veces necesitamos capturar los mensajes de Windows a nivel de la
aplicación. Una forma es con un "hook" (gancho), y la otra es usando
el evento Message del objeto Application que
se produce cada vez que la aplicación recibe un mensaje de Windows.
Vamos a seguir el segundo camino. Hay dos formas de establecer un manejador
para este evento: una es usando un objeto ApplicationEvents que
viene con Delphi 5 (simplemente hay que hacer doble-clic en el cuadro
combinado del evento OnMessage en el Inspector de Objetos) y
la otra es haciéndolo a mano:
En la sección privada de su formulario principal agregue la siguiente declaración:
procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
Asigne la propiedad OnMessage en el evento Create del
formulario, por ejemplo:
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := ApplicationMessage;
end;
Cuando desee dejar de capturar mensajes todo lo que tiene que hacer
es establecer OnMessage en nil:
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.OnMessage := nil;
end;
Finalmente debe implementar el procedimiento. Por ejemplo, vamos a
atrapar los mensajes de teclado WM_KEYUP y WM_KEYDOWN para
convertir el punto decimal del teclado numérico en una coma (esto es útil en
aplicaciones hispanas).
procedure TForm1.ApplicationMessage(var Msg: TMsg;
var Handled: Boolean);
begin
case Msg.Message of
WM_KEYDOWN, WM_KEYUP:
case Msg.wParam of
// Reemplazar el punto del teclado numerico (key code = 110)
// por una coma (key code = 188).
110: Msg.wParam := 188;
end;
end;
end;
Ahora puede colocar un control Edit en su formulario y probarlo.
|