Controlar una caja de texto

Sobre Delphi:
Tengo una caja de texto y quiero controlar el texto para que al pulsar una tecla mire si esa tecla es válida y la escriba, y que si la tecla no es válida no la escriba. Todo esto sin usar una caja de máscara.

1 respuesta

Respuesta
1
En el evento onkeypress de los edits, pones algo así:
if (strscan('1234567890.',key)= nil) then
key:=#0;
Esto verifica que solo puedan escribir números y el punto decimal en el edit, en este caso no toma en cuenta que escriban más de un punto decimal, para esto necesitas algo como:
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
var
i,punto:integer;
begin
punto:=0;
if (strscan('1234567890.',key)= nil) and (key <> #8)then
key:=#0;
for i:=1 to length(edit1.text)do
begin
if edit1.text='.'then
punto:=punto+1;
end;
if( punto=1) and (key='.')then
key:=#0;
end;
El funcionamiento de esto es el siguiente:
Strscan('1234567890. ', key) esto verifica si el valor de key(la letra tecleada) es de algunos de los caracteres que están entre comillas sencillas ' si no se encuentra entre esos caracteres devuelve un nulo(nil) entonces verificas el valor devuelto por la función, si es nil, entonces haces key:=#0 para no escribir, en caso de las letras nomas seria strscan('abcdefghijklmnñopqrstuvwxzABCDEFGHIJKLMNÑOPQRSTUVWXYZ. ', key) Y SI QUIERES agregas todos los caracteres especiales que quieras
Igual digo una tontería, pero a ser posible y sin molestar mucho, quisiera saber si habría alguna forma de decirle a delphi que eliminara el evento si la tecla pulsada no es la correcta. No es que la respuesta no me sea válida (es la que utilizaré) sino que tengo mucha curiosidad de como manejar de esa manera, (hace tiempo lo intente en java y no lo conseguí, y ahora en delphi estoy en el mismo punto pero ya con una solución). Muchas gracias por las molestias.
No entiendo exactamente que quieres decir con eliminar el evento, no creo que te refieras al evento on keypress porque no se puede, si lo que quieres es cerrar la aplicación, entonces le debes poner:
if (strscan('1234567890.',key)= nil) then
application.terminate;
Esto cierra todo tu programa, si lo quequieres es que se reinicie el proceso que estas haciendo para que empiece de nuevo, solo reinicia todos tus componentes por ejemplo
if (strscan('1234567890.',key)= nil) then
begin
edit1.text:='';
edit2.text:='';
etc,etc,
end;
sino solo oculta la forma y reinicia tus componentes
if (strscan('1234567890.',key)= nil) then
begin
edit1.text:='';
edit2.text:='';
etc,etc,
form2.hide;
form1.show;
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas