FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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" |
#2
|
|||
|
|||
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 |
#3
|
||||
|
||||
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:
Estoy escribiendo de memoria... A esta funcion la llamas desde el evento onKeyPress del Edit de esta forma:
Espero que te sirva...
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin) |
#4
|
|||
|
|||
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; 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;
__________________
"La perseverancia es el camino del éxito" |
#5
|
||||
|
||||
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) |
#6
|
|||
|
|||
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" |
#7
|
||||
|
||||
¡Ah!
Bueno... el error.. ¿en qué línea (dinos el código) te salta? En esa línea debes estar haciendo una llamada a una función o un procedimiento, pero te falta incluir algún/os parámetro/s... O algo por el estilo...
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin) |
#8
|
|||
|
|||
Aqui da el error.
El error me da aquí:
procedure TfrmCanvi.edPagatKeyPress(Sender: TObject; var Key: Char); begin Key := ComprobarNumerico(EdPagat.Text; Key:Char); Ayyy....
__________________
"La perseverancia es el camino del éxito" |
#9
|
||||
|
||||
¡Ya lo tengo!
"Mea culpa" te puse en la primera respuesta: A esta funcion la llamas desde el evento onKeyPress del Edit de esta forma: Key := ComprobarNumerico(MiEdit.Text; Key:Char); Y ese ";"... debería ser una coma ","... Así que intenta simplemente Key := ComprobarNumerico(EdPagat.Text, Key:Char); Y me cuentas... yo me marcho hasta mañana ... que ya es hora
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin) |
#10
|
|||
|
|||
Hola por fin lo solucioné, como puedes ver la solución no era nada complicada pero supongo que son esas cosas fáciles en la que cuesta caer, o mejor dicho a mí me cuesta caer. Primero hago una comprobació para ver si se ha puesto la coma en el TEDit, si ya está escrita quiere decir que no se puede volver a escribir por lo que le doy el valor de false a la función y si no está escrita true.
Cita:
Cita:
Ohran de todas formas muchas gracias por todo, seguramente si te hubiese explicado mejor mi problema me hubieras podido ayudar mejor. Hasta pronto.
__________________
"La perseverancia es el camino del éxito" |
#11
|
|||
|
|||
hola a todos,
creo que el problema ya lo teneis solucionado, pero quería mostrar una forma corta de hacerlo En el evento OnKeyPress del campo pongo este procedimiento: Código:
procedure TFTrataResiduos.SoloNumerosYComa(Sender: TObject; var Key: Char); begin if Key='.' then Key:=','; //admito el punto para introducir los decimales, pero lo cambio por la coma if Pos(',',LabeledEdit3.Text)=0 then if not (Key in ['0'..'9',',',#8]) then Key:=#0 //si no hay una coma, la admito como carácter válido else Exit else if not (Key in ['0'..'9',#8]) then Key:=#0; //si hay alguna coma, ya no admito más end; Saludos,
__________________
Rafita. |
|
|
|