Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber que letra has borrado (https://www.clubdelphi.com/foros/showthread.php?t=4814)

RyAr 29-10-2003 16:41:11

Saber que letra has borrado
 
Hola de nuevo :D

Siguiendo con mis primeros pasos, estoy desarrollando un edit propio de manera muy novata. Este edit coge numeros decimales (positivos o negativos). Mi ultimo problema a la hora de este desarrollo es que no consigo que cuando borre la coma, me deje volver a meterla hasta que borro todo de nuevo. Mi pregunta es como mirar el caracter que borro, y que si es una coma, poner una variable a 0 para que me active de nuevo el volver a meterla.

Os pego el código que he hecho, teniendo ese fallo y teniendo en cuenta que en esto de Delphi llevo poco más de una semana.


if (centigrados.Text='') then begin
if ( (Key<'0') or (Key>'9') ) and (Key<>#8) and (Key<>#45) then Key:=#0;
end
else begin

if (sw2=1) or (centigrados.Text='-') then begin
if ( (Key<'0') or (Key>'9') ) and (Key<>#8) then Key:=#0; end
else
if ( (Key<'0') or (Key>'9') ) and (Key<>#8) and (Key<>',') then Key:=#0;
end;

if (centigrados.Text='')then
sw2:=0;

if (Key=',') then
sw2:=1;

Espero críticas a la hora de programar, ya que al llevar tan poco tiempo, me gustaría quitarme esos malos hábitos a la hora de programar.

Un saludo

RyAr

roman 29-10-2003 17:04:03

Cita:

Posteado originalmente por RyAr
Espero críticas a la hora de programar, ya que al llevar tan poco tiempo, me gustaría quitarme esos malos hábitos a la hora de programar.

Podrías comenzar por indentar correctamente el código. Utiliza la etiqueta CODE para que se respeten los espacios.

Una observación. Condicionales como

if ( (Key<'0') or (Key>'9') ) and (Key<>#8) and (Key<>#45) then Key:=#0;

pueden escreibirse de forma más prolija así:

if not (key in ['0'..'9', #8, #45]) then Key := #0;

En cuanto a tu pregunta pues de momento no creo que sea fácil saber qué caracter es el que borras pues esto implicaría que en el evento OnKeyPress cada vez que detectes un "backspace" mires en qué posición está el cursor en el Edit para entoncs ver cuál es el carcater a la izquierda.

Pienso que es mejor usar el evento OnChange y analizar cada vez toda la cadena que hasta el momento haya sido introducida.

(Ahhh!, si Delphi tuviese expresiones regulares....)

// Saludos

roman 29-10-2003 17:10:26

Una cosa más:

En lo que te menciono de los condicionales, en realidad ambos no son equivalentes pero es que el tuyo me parece que es incorrecto ya que aceptaría cualquier caracter por debajo de '0' (ascii 48) que no sea ni '-' ni bksp y cualquier carcater por arriba del '9' (ascii 57). Esto incluye caracteres como '(', ')', '/', todas las letras, etc.

// Saludos

__cadetill 29-10-2003 18:00:52

Cómo termino el tema de las RxLib? No te sirvió el TCurrencyEdit que traen?

RyAr 29-10-2003 18:08:32

Si que me sirvio de maravilla, pero como me gusta lo de uno propio me lance a ver si podia realizar yo mismo que cogiera solo los valores que yo queria, y solo queda lo de borrar la coma.

Esto de Delphi me está gustando más que C, por lo que prefiero empezar aprediendo antes que me lo de todo ehcho ya los neuvos componentes :D

De todas formas tu sugerencia de las RxLib me vino muy bien para aclararme en otras cosas, así que te lo agradezco :D

Un saludo y gracias.

RyAr

delphi.com.ar 29-10-2003 18:15:41

Aprovechando que las RxLibs traen sus fuentes, puedes husmear el código del TCurrencyEdit... seguramente esto te hará conocer un poco como esta armada la VCL.

Saludos!


La franja horaria es GMT +2. Ahora son las 06:59:55.

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