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 08-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Validación coma y decimales Keypress

Buen día.

Quisiera saber si me pueden colaborar, tenía este código que encontre en un foro en el evento keypress de un edit y funciona correctamente me valida que solo deje ingresar dos decimales y que si escribo un punto lo modifique y lo cambie por una coma, como necesito realizar esta validación para varios edits quise hacerlo como un procedimiento, pero al hacerlo no me realiza la validación correctamente (no me cambia el punto por la coma y no lo muestra en el edit).

Alguien que me pueda ayudar a corregir o decirme el motivo por el cual no me funciona. Gracias.

Código Delphi [-]
procedure ValidarPorcentajeKeyPressEdit(Caracter: Char;Edit:TrDBEdit;Sender: TObject);
var
  pos: Cardinal;
begin
  i:=0;
  if ( StrScan('0123456789.,'+chr(7)+chr(8)+#13, Caracter) = nil ) then  Caracter := #0;
  // cambia el punto decimal por coma
  if (Caracter = '.') or (Caracter = ',') then Caracter := ',';
  //controlar entrada una sola coma
  for i := 1 to length(Edit.Text) do
    if ( copy(Edit.Text,i,1) = ',' ) and not ( StrScan(',', Caracter) = nil ) then  Caracter := #0;

  with Sender as TrDBEdit do
  begin
    pos := System.Pos(',', Text);
    if not LongBool(Pos) then Dec(Pos);
      ReadOnly := not (Caracter in ['0'..'9',#13, ',', #8]) or
        (Pos <> $FFFFFFFF) and (Caracter = ',') or
        ((Caracter <> #8) and (Caracter <> #13) and (Pos < (SelStart - 1)));
  end;
end;
Responder Con Cita
  #2  
Antiguo 08-05-2017
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
Creo que el problema esta en la línea:

Código Delphi [-]
if ( copy(Edit.Text,i,1) = ',' ) and not ( StrScan(',', Caracter) = nil ) then  Caracter := #0;

En esa línea de codigo haces referencia directa al objeto Edit. Prueba a cambiarla de esta forma para hacerlo más genérico:

Código Delphi [-]
if ( copy((Sender as TrDBEdit), i , 1) = ',' ) and not ( StrScan(',', Caracter) = nil ) then  Caracter := #0;
Responder Con Cita
  #3  
Antiguo 09-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Buen día.

Lo probe de la manera que planteas pero al compilarlo me saler un error y dice que tipos incompatibles y señala la parte del código donde dices (Sender as TrDBEdit).

Gracias espero puedas colaborarme y decirme como organizarlo.
Responder Con Cita
  #4  
Antiguo 09-05-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por Soa Pelaez Ver Mensaje
Código Delphi [-]
procedure ValidarPorcentajeKeyPressEdit(Caracter: Char;Edit:TrDBEdit;Sender: TObject);
Cita:
Empezado por Soa Pelaez Ver Mensaje
... pero al compilarlo me saler un error y dice que tipos incompatibles y señala la parte del código donde dices (Sender as TrDBEdit)
Solo cámbialo por el objeto correcto.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 09-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Solo cámbialo por el objeto correcto.
El código lo modifique así como me dices, pero al compilar sigue con el mismo error de tipos incompatibles.
Código Delphi [-]
procedure ValidarPorcentajeKeyPressEdit(Caracter: Char;Edit:TrDBEdit;Sender: TObject);
var
  pos: Cardinal;
begin
  i:=0;
  if ( StrScan('0123456789.,'+chr(7)+chr(8)+#13, Caracter) = nil ) then  Caracter := #0;
  // cambia el punto decimal por coma
  if (Caracter = '.') or (Caracter = ',') then Caracter := ',';
  //controlar entrada una sola coma
  for i := 1 to length(Edit.Text) do
    if ( copy((Sender as TrDBEdit), i , 1) = ',' ) and not ( StrScan(',', Caracter) = nil ) then  Caracter := #0;

  with Sender as TrDBEdit do
  begin
    pos := System.Pos(',', Text);
    if not LongBool(Pos) then Dec(Pos);
      ReadOnly := not (Caracter in ['0'..'9',#13, ',', #8]) or
        (Pos <> $FFFFFFFF) and (Caracter = ',') or
        ((Caracter <> #8) and (Caracter <> #13) and (Pos < (SelStart - 1)));
  end;
end;
Responder Con Cita
  #6  
Antiguo 09-05-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
y entrega el valor correcto a la función que te lanza el error
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #7  
Antiguo 09-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
y entrega el valor correcto a la función que te lanza el error
No entiendo como sería.
Responder Con Cita
  #8  
Antiguo 09-05-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por Soa Pelaez Ver Mensaje
No entiendo como sería.
¿Leíste lo del enlace?

El error es generado en la función Copy. Ya que la función requiere un texto con el que trabajar

Al hacer el cast

Código Delphi [-]
(Sender as TrDBEdit)

A la función le estás pasando es un objeto no el texto del objeto lo que obtendrías con

Código Delphi [-]
(Sender as TrDBEdit).text

Recomendación:

Ya que al parecer estás usando un control de base de datos, podrías validar el valor almacenado en el campo en lugar al del control.

Código Delphi [-]
QueryFieldavalidar.AsString
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
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
Uso del keypress en un edit snake25237 OOP 1 23-02-2011 15:30:43
evento keypress ronson Varios 40 04-01-2011 04:18:23
validar decimales con "coma" lucasarts_18 PHP 3 26-12-2008 01:41:50
teclas F# en keypress sargento elias OOP 3 08-10-2008 08:23:43
Llamar a evento Keypress edgusano .NET 1 30-11-2005 22:02:29


La franja horaria es GMT +2. Ahora son las 09:59:20.


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