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-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Problema con el TEdit y las comas

Hola, aunque el tema del TEdit ya se ha tratado (en relación de como cambiar las comas a puntos y viceversa) no he visto el de como hacer que solo se puedan introducir una coma, verán aunque les parezca una tonteria me he llevado podriamos decir toda la mañana y no he podido, he hecho funciones para contar las comas que hay en el TEdit pero al final solo me cuenta el ultimo carácter(NO VALE), he pasado el contenido de del TEdit caracter a caracter a un Array (y tampoco me ha servido porque a la hora de escribirlo tengo que poner Edit:=array[1]+array[2].... y si hay alguno vacio se vuelve loco), he analizado carácter por carácter pasando el contenido a una variable string pero el problema es que el Edit se actualiza a cada momento y el String va un paso por detrás. He probado con el modificando el formato con el format del Tedit pero después solo me deja modificar dentro un número. He probado con el EditMask pero no me hace la resta automática (solo el Tedit) y además no desaparece la coma cuando no le pongo decimales. No sé si esto es demasiado fácil y me complico demasiado la vida o que es realmente liado.
El caso compañeros es que hasta estoy mareado y cabreado porque era una cosa que yo suponia me llevaría un momento y me está resultando bastante difícil. ASí que si alguien sabe de alguna función, o algo para solucionar este problema. Muchas gracias.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #2  
Antiguo 08-03-2005
Alfredo Alfredo is offline
Miembro
 
Registrado: nov 2003
Ubicación: Valencia, Venezuela
Posts: 234
Poder: 21
Alfredo Va por buen camino
Lo que quieres que se pueda ingresar una sola coma? Pero que vas a meter en edit? Explicame para ver si te puedo ayudar....
__________________
if Vivir = Vivir + Aprender then Aprender = ?
Alfredo Borges
Responder Con Cita
  #3  
Antiguo 08-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Lightbulb

Hola alfredosg19
¿Lo que quieres es que el contenido del edit sea numérico (integer o float)?
Si es así, puedes definirte una función de este estilo:
Código Delphi [-]
function ComprobarNumerico(Texto: String; Key:Char): Char;
begin
  if Key <> Char(VK_BACK) then
    begin
      try
        if Key in[',','.'] then Key := DecimalSeparator;
        StrToFloat(Texto + Key + '0');
      except
        Result:=#0;
        Exit;
      end;
    end;
  Result := Key;
end;

Estoy escribiendo de memoria...
A esta funcion la llamas desde el evento onKeyPress del Edit de esta forma:
Código Delphi [-]
Key := ComprobarNumerico(MiEdit.Text; Key:Char);

Espero que te sirva...
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #4  
Antiguo 08-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Me da error

Hola, he aplicado el ejemplo que me dejaste pero me sigue dando error, aprovecho para explicar el problema mejor. Tengo un Tedit en el que solo quiero permitir entrar numeros, hasta aquí todo está bien porque pongo este coódigo en el
procedure
Código:
   FrmCanvi.edPagatKeyPress(Sender: TObject; var Key: Char);
 begin
 
   If (contarcomes(edPagat.Text)=0) then
 	If Not (Key IN ['0'..'9',#8,',']) then
 	key := #0;
 
   if (contarcomes(edPagat.Text)>0) or (key=',')then
 	If Not (Key IN ['0'..'9',#8]) then
 	key := #0;
   end;
Donde contarcomes es una función que he hecho yo para contar las comas del Tedit pero que no funciona el código es:
Código:
 function TfrmCanvi.contarcomes(n:string): integer;
 var
 car: string;
 i,coma: Integer;
 begin
 coma:=0;
   For I:=0 to Length(n) do
   car:=copy(n,i,1);
   if car=',' then
   coma:=coma+1;
 
   result:=coma;
 end;
El problema es que quiero que me acepte una coma en el Tedit, en la posición que la ponga el usuario menos en el primer carácter (daria error por el Float) y en el último caràcter. Además quiero que en los carácteres del medio sólo pueda haber una coma. Todo esto se complica más porque tengo una función que hace una resta con este número con cada carácter que se introduce en el edit, quiero decir que si la coma está mal puesta o si hay más de una coma el programa da error y esto es lo que quiero evitar.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #5  
Antiguo 08-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Question

No estoy muy seguro de entenderte...

Con lo que te he pasado evitas:
- Que se introduzcan letras o espacios o cualquier cosa que no sea un número o el DecimalSeparator.
- No permite que la primera sea una coma (o el separador decimal que sea)
- No permite más de una coma (o el separador decimal que sea)
Puede que tú problema (si me he enterado) esté en esa cuenta que haces según se introducen los dígitos... y sobre todo en el momento en el que el usuario inserta la coma...
¿Y si, cuando haces esa cuenta, si la última es la coma no la "obvias"?
Me explico (estoy espeso): si cuando vas a hacer la cuenta, el número introducido es, por ejemplo, "12334,"...
Quítale la "," y usa "12334" para la operación

¿Es eso?
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #6  
Antiguo 08-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Gracias Ohcan, pero...

Gracias Ohcan por tu ayuda, a ver el problema está en que me da error y no podido si quiera ver si lo que me dijiste funciona (que seguro que sí, quiero decir que no lo he podido probar), el fallo es que algo falta en la función y me dice esto:
[Error] UFRMCanvi.pas(111): Not enough actual parameters
__________________
"La perseverancia es el camino del éxito"
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


La franja horaria es GMT +2. Ahora son las 15:29:03.


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