Prueba utilizando el componente de applicationeventes e interceptando ONMEssage
Código Delphi
[-]
If Msg.message = WM_KEYDOWN Then
Begin
If Msg.wParam = VK_Decimal Then
Begin
If Screen.ActiveControl is TDBEDIT Then
Begin
IF (Screen.ActiveControl as TDBEDIT).Field.DataType=ftFloat Then Msg.wParam:=188;
End;
If Screen.ActiveControl is TRxDBCalcEDIT Then
Begin
IF (Screen.ActiveControl as TRxDbCalcEDIT).Field.DataType=ftFloat Then Msg.wParam:=188;
End;
End;
If Msg.wParam = VK_Escape Then
BEgin
Screen.ActiveForm.Close;
End;
If ( (Msg.wParam=VK_RETURN) or
(Msg.wParam=VK_UP) or
(Msg.wParam=VK_DOWN) ) and not (Screen.ActiveControl is TButton)
and not (Screen.ActiveControl is TRxDBGrid)
and not (Screen.ActiveControl is TDBGrid) Then
Begin
If (Msg.wParam=VK_RETURN) Then
Begin
Msg.wParam:=0;
Screen.ActiveForm.PerForm(WM_NextDlgCtl,0,0);
End;
If (Msg.wParam=VK_DOWN) Then
Begin
Msg.wParam:=0;
Screen.ActiveForm.PerForm(WM_NextDlgCtl,0,0);
End;
If (Msg.wParam=VK_UP) Then
Begin
Msg.wParam:=0;
Screen.ActiveForm.PerForm(WM_NextDlgCtl,1,0);
End;
End;
End;
Espero que te sea de ayuda un saludo.