Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Deshabilitar Drag and Drop de TEdit (https://www.clubdelphi.com/foros/showthread.php?t=86118)

Jovalca 19-06-2014 18:48:34

Deshabilitar Drag and Drop de TEdit
 
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 ?
Código Delphi [-]
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.

Código:

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:

Código Delphi [-]
function StrScan ( const Characters : PAnsiChar; SearchChar : Char ) : PAnsiChar;

Deberias poner
Código Delphi [-]
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:

Código Delphi [-]
   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


La franja horaria es GMT +2. Ahora son las 06:35:17.

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