PDA

Ver la Versión Completa : Habilitar la tecla Delete en ingreso de Numeros en un TEDIT


onlytk
24-11-2005, 01:13:18
Hola amigos, tengo el siguiente problema, quiero que en un TEdit solo se pueda ingresar números enteros, y que permita que se borre con las teclas backspace y delete, hice lo siguiente en el evento OnKeyPress.


if Not (Key IN ['0'..'9',#8,'.']) then
Key := #0;


El único problema es, que no se que como permitir que se borre cuando se presione la tecla delete, el hexadecimal #8 es el Backspace en ASCII, tambien encontre que el #22 representa el Pegar (Ctrl + V) y #3 el Copiar (Ctrl + V), pero no encontre cual representa el caracter enviado al presionar la tecla DELETE, .......... además donde puedo encontrar la lista completa de estos codigos ascii? que recive el evento OnKeyPress??

Salu2.

vtdeleon
24-11-2005, 01:27:28
Saludos

Prueba con #46

onlytk
24-11-2005, 01:31:06
No borra cuando presiono delete, y de donde sacaste esa conclusion???, hay algun link donde pueda saber los codigos??

Gracias por responder (increible la rapides de la respuesta, jejeje). Salu2

AGAG4
24-11-2005, 01:37:12
Prueba la siguiente función:

function ValidaCharNum(Var Key:Char):Char;
var i:integer;
begin
i:=Ord(Key);
if (i in[58..241]) or (i in[10..47]) then
result:=#0
else result:=key;
end;
//La llamas de la siguiente forma en el evento OnKeyPress.
key:=ValidaCharNum(key);


Saludos....

vtdeleon
24-11-2005, 01:47:57
No borra cuando presiono delete, y de donde sacaste esa conclusion???, hay algun link donde pueda saber los codigos??
De un programita llamado foDelphi (Friend of Delphi). Creo que lo puedes descargar de: www.danish-shareware.dk/delphi

Héctor Randolph
24-11-2005, 02:20:28
En la unidad Windows.pas puedes ver una lista completa con estos códigos.

Cómo ya te indicaron a la tecla Delete le corresponde la constante VK_DELETE que su valor numérico es 46.


{ Virtual Keys, Standard Set }
.
.
.
{$EXTERNALSYM VK_INSERT}
VK_INSERT = 45;
{$EXTERNALSYM VK_DELETE}
VK_DELETE = 46;
{$EXTERNALSYM VK_HELP}
VK_HELP = 47;
.
.


Estos códigos son los que se utilizan para el evento OnKeyDown y OnKeyUp si lo piensas utilizar en el evento OnKeyPress hazlo como te indica AGAG4 utiliza la función Ord().


if Ord(Key)=VK_DELETE then


Saludos

onlytk
24-11-2005, 02:30:57
Gracias por responder, pues si la tecla delete es el #46, ......... pero mejor debi haber empesado por que mis controles TEdit no borran el caracter cuando se presiona DELETE??????.

Pues despues de revisar, estoy utilizando el componente SimpleGraph y en un ActionList tengo definido un item donde borro los nodos seleccionados en el simplegraph, a este item le tengo asociado el ShortCut "Del", entonces esto me esta atrapando el borrado con la tecla delete en mis TEdits, ahora quite el ShurtCut y todo me funciona OK, Gracias a todos por responder.

roman
24-11-2005, 05:45:42
Sólo un comentario: ¿has pensado qué pasa si alguien pega texto en tu control? El portapapeles podrá contener texto con letras. ¿Qué pasa si alguien escribe 45.6...78.9? También tienes que validar que no hay más puntos. Hay controles, como el CurrencyEditor de las bibliotecas RX que se encargan de estos detalles.

// Saludos

onlytk
25-11-2005, 13:44:32
Gracias roman, voy a chequear esos controlores.

Salu2.