PDA

Ver la Versión Completa : Deshabilitar Drag and Drop de TEdit


Jovalca
19-06-2014, 18:48:34
Buenas Tardes Chicos.

Primero y como siempre, gracias por tomaros la molestia de dedicar 5 minutos a este tema.

Tengo un TEdit, el cual tengo controlado en OnKeyPress que solo se introduzcan números y una coma, ya que posteriormente este valor es sumado a otros tantos y sólo puede contener un valor numérico. Para evitar la acción de pegar, por si el contenido del portapapeles no es numerico, he deshabilitado con OnKeyDown las teclas Crtl+V, es decir, la acción de pegar. Ahora se me presenta otro problema, el drag&drop, porque si alguien arrastra un contenido no numerico a este edit, me lanza el error de que no es Float, ya que la suma se hace en el evento OnEditingDone.

He probado a poner Edit1.Clear en los eventos OnStartDrag, OnEndDrag, OnDragDrop... pero sigue aceptando el contenido arrastrado.

Hay alguna manera de controlar esto o deshabilitarlo de este edit o directamente del formulario entero?

Mil gracias por vuestra siempre útil ayuda.
Un abrazo.

ecfisa
20-06-2014, 02:39:15
Hola Jovalca.

Tal vez esté interpretando mal la situación, pero ¿ No te sirve usar el evento OnDragOver del TEdit ?

procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:= False;
end;


Saludos :)

Jovalca
22-06-2014, 12:37:41
Hola de nuevo ecfisa.

No, eso también lo probé y no funciona, sigue aceptando arrastrar el contenidos. He pensado que es posible que el error venga de mi sistema operativo aunque no puedo estar seguro.

Se me ha ocurrido que quizá podría controlarlo, ya que no puedo con esos eventos, con el evento OnChange, hacer de algún modo que al cambiar el contenido del Edit, si detecta que no son números, comas y puntos, se borre el edit. Esto se podría hacer?

Gracias y Saludos.

dec
22-06-2014, 14:47:19
Hola,

¿Por qué no usas un "SpinEdit"? Este componente es similar a un "TEdit" pero su contenido ha de ser numérico. Tal vez incluso algún otro componente que no recuerdo ahora mismo hace lo mismo. Incluso el "TEdit" podría tener alguna propiedad de tipo "máscara" para que sólo admita números, digo, sin necesidad de codificar nada.

Jovalca
22-06-2014, 17:32:25
Gracias por vuestras respuestas.

Conozco el componente, pero ya tengo la aplicación casi terminada y el reemplazar ahora todos los edit con estas características sería una locura. Para próximas tomo nota.
Para hacer lo que comentaba, si al cambiar detecta texto en vez de numero, que vacíe el tedio tengo algo como esto.


if ( StrScan('0123456789,.') = nil ) then
Edit1.Clear;


Pero no compila, es evidente que no esta bien, que estoy poniendo mal?

Gracias de nuevo y un saludo.

adrall
22-06-2014, 19:06:02
Yo creo que te falta un parametro en el StrScan o bien la comillas estan mal puestas:


function StrScan ( const Characters : PAnsiChar; SearchChar : Char ) : PAnsiChar;


Deberias poner

if ( StrScan('0123456789,.','el numero o caracter que sea') = nil ) then
Edit1.Clear;


Saludos

adrall
22-06-2014, 19:18:34
Has probado las funciones TryStrToFloat... TryStrToInt... TryStrToDate... ? Las puedes usar en el OnExit del TEdit para comprobar la validez del valor introducido:


if not TryStrToFloat(Text, fFloatVar) then
TEdit.SetFocus;
end;


Este ejemplo impediría salir del TEdit si el valor no es correcto, aunque lo puedes utilizar de muchas formas.

Saludos