![]() |
MaskEdit
Como puedo capturar el error que da el maskedit cuando introduces algo que no esta de acuerdo con la mascara???. El asunto es que quiero evitar que salgan errores en ingles, para ponerlos yo en cristiano. Gracias.
|
Buenas.
Yo soy partidario de usar el metodo OnExit y ahi poner mi propio chequeo de tipos por ejemplo : Código:
Espero que te sirva ;) |
Una solución, a falta de otra mejor, que de momento no se me ocurre, sería:
Bájate un componente ApplicationEvents y el evento OnException del mismo, escribes llo que sigue: Código:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; Un Saludo. |
Al ver lo que ha escrito el amigo Viet, me he recordado que yo también utilizo esa técnica, por lo tanto, me retracto de la última parte de mi mensaje:
Esta es una muestra del código, que nada más ver el de Viet me sonaba mucho. Código:
procedure TfrFactFechas.mkFiniExit(Sender: TObject); |
Hola:
Marcos, en este momento tienes el 666 de nº de posts, así que no sé si decirte nada :) La opción de usar el componente ApplicationEvents me parece la mejor (si no la única) para interceptar Excepciones donde no es posible utilizar un bloque Try ... except. La única pega que le veo es que sólo nos puede servir para lanzar mensajes de advertencia al usuario, y poco más; quiero decir que difícilmente en este evento podemos tomar medidas respecto a un Control concreto, pues estos pueden ser varios / muchos desperdigados por los distintos forms, y no es cuestión que ese componente sepa cómo actuar en dichos controles. Si necesitas actuar sobre el Control que lanzó la excepción, por ejemplo para devolverle el Foco, ahí es mejor la opción del evento OnExit (qué lástima que el TMaskEdit no tenga un evento OnMaskError, al estilo de los TDatasets ...). Un saludo |
Otra solución:
El error que se muestra (en inglés) se produce en el método virtual ValidateError de TCustomMaskEdit: Código:
procedure TMaskEdit.ValidateError; Pero otra manera de hacer esto consiste en derivar una clase de TMaskEdit redefiniendo dicho método virtual. Lo qe me parece interesante es que no es necesario instalar un nuevo componente y sustituir todas las ocurrencias que de él tengamos en nuesro formulario. Bastará declararlo así antes de la declaración de la clase del formulario: Código:
type No sé si cumple los requisitos de "más elegante" que pide el amigo marcoszorrilla :) pero me parece interesante. // Saludos |
Yo me quedo con lo de roman... porque la mayor ventaja es que el control y la validacion de la mascara va a seguir por parte de la clase MaskEdit... con lo que nos ahorramos tener que programarlo nosotros (que en definitiva estabamos usando un Edit y era lo mismo)
Gracias por el dato ;) |
Pues Andrés ni me había enterado de ese número de mensajes tan palíndromo, en cuanto a lo que propone Román, acabo de probarlo y me parece:
Very Smart, es decir no solo elegante y bonito que es a lo que yo aludía sino inteligente. Un Saludo. |
Hola:
También abogo por la propuesta de Román. Todo lo que pueda hacer el componente sin mediación de terceros, mejor que mejor. Por cierto, la técnica que se emplea en dicha solución para redefinir un método de un componente sin necesidad de instalarlo es la que se expone en el truco Clases interpuestas de la web de Ian Marteens (dicho sea de paso, creo que Marteens recibe mucha y buena publicidad en estos foros, no estaría mal que se pasara por aquí alguna vez :) ). Saludos |
????
type
TMaskEdit = class(Mask.TMaskEdit) protected procedure ValidateError; override; end; TForm1 = class(TForm) { métodos y propiedades } end; implementation procedure TMaskEdit.ValidateError; begin MessageBeep(0); raise EDBEditError.Create('Formato incorrecto'); end; end. **No me funciona en esta, lo que pasa es que me marca error en "procedure ValidateError; override;" |
¿Qué error te marca?
// Saludos |
hola, soy nuevo en el foro y esto es un poco antiguo pero me seria util conseguir que funcionase. A mi tambien me sale un error al poner el codigo de Roman y es el siguiente:
[Error] Unit1.pas(11): Unsatisfied forward or external declaration: 'TMaskEdit.ValidateError' [Fatal Error] Project1.dpr(9): Could not compile used unit 'Unit1.pas' A que puede ser devido? gracias. |
La franja horaria es GMT +2. Ahora son las 05:38:59. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi