![]() |
Trabajando con StringGrid
Hola amigos foristas, tengo un StringGrid el cual 5 columnas y una de ellas es solo para datos numericos, La situasion es la siguiente:
Cuando el usuario esta editando la columna numerica y esta poniendo numeros reales; internamente en el evento OnSetEditText de StringGrid se va sumando la columna y mostrando en un edit; el problema es cuando en ves de poner el caracter coma "," pone un punto , entonces ahi se produce un error al convertir a Float esa celda, quise solucionarlo haciendo una conversion llamando a un metodo que yo mismo me hize;pero cuando lo llamo la celda se seleciona con azul por defecto, y por tanto si el usuario sigue introduciedo decimales ,estos se reeplazan a los que antes habia escrito; Lo que quiero es la celda no se seleccione al al llamar a mi metodo,que internamente siga el cursor en donde corresponde. Aqui pongo mi metodo que transforma un string que tiene punto(.) por otro string que tenga coma(,):
|
Hola rgstuamigo, y que pasa si te introducen letras a parte del punto ¿como estas validando lo que se va introduciendo?, porque creo que sería mucho mejor que fueras validando a medida que introduce en tu celda, permitiendole solo ingresar numeros y la coma.
Saluditos |
Bueno en realidad esta todo dentro de un
Todo me funciona bien, lo he probado poniendo normalmente , es decir con coma , pero ahora el cliente me dice que no le gusta con coma y que es mejor con punto, ya sabes tu por comodida. Solo quiero saber si existe una manera de desselecionar esa celda sin cambiar su contenido, poner el cursor en la ultima posicion, para seguir editando. |
Hola, puedes tal como dice caro, capturar en el OnKeyDown
o bien, justo en el principio del onsetedittext
|
punto a coma
Prueba asignando esto al evento OnKeyPress del StringGrid, esto reemplaza el punto por la coma.
Código Delphi [-] procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin if Key = '.' then Key:= ','; end; |
Gracias A todos por compartir y responder, la verdad son diferentes formas de hacerlo y me han dado nuevas perspectivas de programcion, lo resolvi con el codigo de ecfisa pero tiene un pequeño detalle, que el evento se realiza para todas las columnas del stringGrid; como seria para hacerlo que solo cambie los puntos por las comas solo en una columna especifica.
Saludos....;) |
Hola de nuevo, primero para mi sería mucho mejor que controlaras en el momento que escribe, en vez de mostrale un mensaje que ha escrito mal, para ello puedes hacerlo de esta forma.
Ahora para que el cursor se vaya al final de todo lo que se ha escrito en esa celda se puede usar SelStart y SelLength, según esta pagina http://www.swissdelphicenter.ch/torr...ode.php?id=349 , se puede usar la propiedad ImplaceEditor del StringGrid. Mas o menos quedaría asi el codigo:
Para reemplazar el punto por la coma, sería mejor que utilizaras la función StringReplace, como te dice el amigo Coso. Saluditos |
Cita:
Otra cosita, por favor utiliza etiquetas delphi para encerrar tu codigo, así s eentedera y vera mucho mejor. [delphi ] [ /dephi] esatas etiquetas pero sin los espacios. Saluditos |
Muchas Gracias caro y todos...por sus respuesta pero si alguien puede aguegar mas al asunto no esta demas que comparta su experiencia programando. Saludos....;)
|
solo en columna
Es sólo una comprobación mas.
Código Delphi [-] procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin with StringGrid1 do begin if (Key = '.') and ( Col = 0 ) then Key:= ','; // Col = 0,1,2... etc end; end; |
Gracias ecfisa por responder y agregar tu opcion....Saludos:D
|
de nada
Me alegra que te haya servido.
|
| La franja horaria es GMT +2. Ahora son las 18:38:42. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi