FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Validar Contenido Portapapeles
Hola de nuevo Amigos,
he creado las siguientes acciones en Firemonkey para copiar y pegar texto pero que su contenido sean números
Mi pregunta es como puedo validar la información que tiene el Portapapeles para saber si este contenido es un número de punto flotante y no otro tipo de información. |
#2
|
|||
|
|||
Ya, me respondo y a cualquiera que le pueda ser util
Última edición por juniorSoft fecha: 23-02-2017 a las 19:02:22. |
#4
|
||||
|
||||
Mas alla de que lo hayas solucionado, como consejo para el futuro, debes aprender a identificar y aislar los problemas. Osea en este caso, mas que un problema del portapapeles, lo que tenes delante es un problema de validacion de strings. Simplemente debes validar que un string (no importa de donde venga, ingresado por el usuario, una respuesta de un webservice, un campo de una base de datos, el contenido de portapapeles) contenga solo numeros
Y otra cosa es que debes tener cuidado con el tratamiento de numeros de punto flotante, sobre todo para las comparaciones. Esta es la explicacion universal, mientras que este link es mas "Delphi especifico", y esta es la documentacion oficial En pocas palabras, los numeros de punto flotante no se pueden representar con exactitud. Pueden ocurrir absurdos matematicos como 2.0 = 2.0 --> Evaluando a False Obviamente hay soluciones al problema, para comparar numeros de coma flotante podes usar las funciones definidas en la unidad System.Math. En particular para saber si un flotante es cero deberias utilizar la funcion System.Math.IsZero. Otros metodos para comparar incluyen System.Math.SameValue y System.Math.CompareValue Y por ultimo, la solucion mas adecuada a tu problema (es este string un numero de punto flotante?) sea utilizar la funcion System.SysUtils.TryStrToFloat Esta funcion devuelve un Boolean indicando si el string es un numero de punto flotante, y tambien tiene un parametro de salida con la conversion ya realizada:
|
#5
|
||||
|
||||
Cita:
El registro System.Rtti.TValue es un tanto especial, ya que es un "contenedor" de cualquier tipo de datos. Desde objetos, a interfaces, metaclases, punteros, primitivos, otros registros, metodos anonimos.. Ahora bien, dicho "valor" se escribe con un dato de entrada de "cierto tipo", y el metodo IsType<T> lo que hace es comparar el TypeInfo entre lo que le envias como generico y el del valor almacenado. Un ejemplo practico: Código PHP:
|
#6
|
|||
|
|||
Como ultima Interrogante de este caso, sería muy costoso en términos de recursos utilizar el evento onUpdate de la acción para verificar si hay datos en el Portapapeles; en VCL esa acción para el TActionList viene Stadard. Como lo hice funciona bien pero uno siempre trata de hacer las cosas lo mejor que se puede.
Siempre que puedo evito tener que usar este evento para mantener activo/inactivos controles pero en casos como este la opción pegar solo estaría activa si hay algo en el portapapeles y en este caso un número Definí el OnUpdate de la Acción de la siguiente manera Cita:
|
#7
|
||||
|
||||
En realidad el evento TAction.OnUpdate es invocado cuando la aplicación está ociosa. Siempre y cuando no hagas cosas que demoren tiempo dentro de estos eventos no habrá problema. Una posible mejora que no tendrá gran impacto en el código es guardar la referencia al servicio del portapapeles e invocar sobre esa referencia el método GetClipboard
No programes tan defensivamente. Si realmente este evento te genera un problema de performance, recién ahí es el momento de optimizar. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Validar contenido campo para que no se repita | fwhite | Conexión con bases de datos | 5 | 07-02-2012 17:14:51 |
Copiar el contenido de un DBGrid en el Portapapeles | GerTorresM | Varios | 6 | 28-12-2010 18:35:16 |
Copiar contenido de Edit->Text al portapapeles de windows | JuanErasmo | API de Windows | 4 | 22-01-2008 04:44:34 |
De cómo pueden robarte el contenido del portapapeles en una página Web | dec | Seguridad | 9 | 02-10-2005 16:05:55 |
Portapapeles... | Perio | Varios | 3 | 29-07-2005 16:27:41 |
|