Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Question Tecla punto como coma decimal

Hola, he buscado en los diferentes hilos que hay pero no he encontrado solución a mi problema.

Mi problema es que necesito que al pulsar tanto la coma como el punto, lo coja como separador decimal. He probado varios ejemplos en el Keypress que a continuación os pongo, pero el punto me lo ignora. Imagino que tendré que modificar algo de la coma decimal o algo de eso, pero no lo domino demasiado.

Estos son los casos que he probado:

Código Delphi [-]
procedure EditKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if ( StrScan('0123456789,.'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;

Y por otro lado:

Código Delphi [-]
procedure EditKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if not (key in ['0','1','2','3','4','5','6','7','8','9',',','.', #7, #8, #13]) then
  begin
    Key := #0;
    Beep;
  end;
end;

Agradezco vuestra ayuda de antemano!
Responder Con Cita
  #2  
Antiguo 25-11-2010
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
En sistemas Windows, creo que eso se soluciona en Configuración Regional...
Responder Con Cita
  #3  
Antiguo 25-11-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Pero yo lo que quiero es que tanto si al pulsar la coma como al pulsar el punto me ponga la coma decimal, igual no me he explicado bien antes. Es decir, si queréis un ejemplo, que funcione igual que la calculadora de Windows, que tanto si pulsas el punto como la coma se pone la coma decimal.

Gracias de nuevo
Responder Con Cita
  #4  
Antiguo 25-11-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 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
  #5  
Antiguo 25-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo más que en los eventos de teclas, lo haría en el OnChange del componente (TEdit). Si lo haces con las tecla y por ejemplo "PEGAS" un valor con el menú contextual del ratón, los eventos de teclas no saltarán.

Si lo haces con el evento OnChange o similar, lo único que debes tener en cuenta es dejar el cursor en la misma posición que estaba antes de modificar el valor (revisa para ellos las propiedades SelText, SelStart,... del TEdit).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 28-11-2010
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Código Delphi [-]
  //controlar entrada solo números
  if ( StrScan('0123456789.,'+chr(7)+chr(8), Key) = nil ) then  Key := #0;
  //cambiar punto decimal por coma
    if key = '.' then key := ',';
  //controlar entrada una sola coma
  for i := 1 to length(Edit1.Text) do
    if ( copy(Edit1.Text,i,1) = ',' ) and not ( StrScan(',', Key) = nil ) then  Key := #0;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SQL y coma decimal mjjj SQL 3 26-12-2008 22:18:51
Coma presionando punto.. Delfino Varios 2 20-10-2007 11:47:11
xml punto coma carlomagno Varios 2 06-09-2004 11:49:35
Separador decimal como coma (,) Investment SQL 2 26-01-2004 11:36:10
Como le saco la coma o el punto a un número? DML Varios 4 23-06-2003 09:46:03


La franja horaria es GMT +2. Ahora son las 14:13:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi