Muy interesante la solución de Andrés, yo hasta el momento lo resolvía interceptando la pulsación
de la tecla en el control correspondiente lo cual me llevaba a propagar el código ad infinitum, tantos
controles afectados tantos eventos a programar o en su caso llamadas a una función centralizada.
Como el applicationsEvents se dispara a cada momento, la variable semáforo propuesta por Andrés,
entiendo que habría que abrirla solamente en los formularios en los cuales se fuese a dar ese
tratamiento de cambio de punto por coma del teclado numérico.
Y si estais de acuerdo en lo dicho entonces yo propondría el siguiente leve cambio en el código:
Código:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if MapearPuntoAComa then//Sino está activado salir cuanto antes.
begin
if (Msg.message = WM_KEYDOWN) AND
(Msg.wParam = VK_DECIMAL) AND (DecimalSeparator = ',') then
begin
ShowMessage('Aquí estamos Andrés.');
Msg.message := WM_CHAR; // cambiamos el tipo de mensaje
Msg.wParam := 44; // si omitimos la línea anterior,
aquí sería Msg.wParam := 188;
Handled := FALSE;
end;
end;
end;
A ver que os parece, con el permiso de Andrés.
Un Saludo.