Ver Mensaje Individual
  #4  
Antiguo 25-11-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Reputación: 15
Kubelo Va por buen camino
Encontré la solución...

Se trata de jugar con la captura del mensaje y cambiarlo, paso el código:

Declaramos la siguiente función:
Código Delphi [-]
procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);

Asignamos la propiedad OnMessage en el evento Create del formulario, por ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := ApplicationMessage;
end;

Si queremos dejar de capturar mensajes todo lo que tenemos que hacer es establecer OnMessage en nil:
Código Delphi [-]
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Application.OnMessage := nil;
end;

Finalmente debemos 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.

Código Delphi [-]
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;

Cabe destacar que la solución la encontré aquí:

http://www.latiumsoftware.com/es/delphi/00047.php

Yo me he permitido modificar la función para que cambie también el punto del teclado normal, tal que así:


Código Delphi [-]
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;
    // Reemplazar el punto del teclado normal (key code = 190)
    // por una coma (key code = 188).
    190: Msg.wParam := 188;
    end;
  end;
end;

Gracias por la ayuda y espero que sirva a alguien!
Responder Con Cita