11.05.2013 Views

La Cara Oculta de Delphi 6

La Cara Oculta de Delphi 6

La Cara Oculta de Delphi 6

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

478 <strong>La</strong> <strong>Cara</strong> <strong>Oculta</strong> <strong>de</strong> <strong>Delphi</strong> 6<br />

<strong>La</strong> reacción instintiva <strong>de</strong> muchos programadores es no utilizar la validación pre<strong>de</strong>finida...<br />

simplemente porque el mensaje sale en inglés. No <strong>de</strong>bería ser así, porque este<br />

“problema” pue<strong>de</strong> resolverse traduciendo los mensajes <strong>de</strong> la aplicación, sin necesidad<br />

<strong>de</strong> usar una sola línea adicional <strong>de</strong> código.<br />

El otro pretexto que he escuchado para no usar este mecanismo es: “...sí, pero yo<br />

quiero a<strong>de</strong>más que se seleccione el control don<strong>de</strong> el usuario <strong>de</strong>be teclear el valor....”<br />

Pero se trata también <strong>de</strong> otra queja sin fundamento. En la clase TField existe el siguiente<br />

método:<br />

procedure TField.FocusControl;<br />

Cuando falla alguna <strong>de</strong> las validaciones impuestas por <strong>Delphi</strong> a nivel <strong>de</strong> campos, la<br />

propia VCL aplica FocusControl sobre el campo conflictivo. <strong>La</strong> implementación <strong>de</strong><br />

FocusControl busca entonces un control visual asociado a ese campo para pasarle el<br />

foco <strong>de</strong>l teclado.<br />

Mucho más interesante es el uso <strong>de</strong> CustomConstraint, pues en ella po<strong>de</strong>mos teclear<br />

una condición que <strong>de</strong>be cumplir el campo. Supongamos que tenemos un campo<br />

llamado Email en el que almacenamos una dirección <strong>de</strong> correo electrónico. Podríamos<br />

utilizar la siguiente expresión en CustomConstraint:<br />

x like '%@%.___' or x like '%@%.__'<br />

¿Por qué x? Simplemente porque x no significa nada en SQL; po<strong>de</strong>mos elegir cualquier<br />

otro i<strong>de</strong>ntificador para representar el valor <strong>de</strong>l campo, siempre que seamos<br />

coherentes en su uso. Notará también que he utilizado el operador like. Esto es posible<br />

porque estamos utilizando un TClientDataSet, y la sintaxis aceptada para los<br />

campos <strong>de</strong> los conjuntos <strong>de</strong> datos clientes es la misma que se utiliza en las condiciones<br />

<strong>de</strong> filtro que ya hemos estudiado.<br />

NOTA<br />

El BDE es la otra interfaz <strong>de</strong> acceso que permite el uso <strong>de</strong> CustomConstraint en sus<br />

campos. No obstante, la sintaxis permitida es diferente, porque es el propio BDE<br />

quien evalúa las expresiones. De todos modos, la mayoría <strong>de</strong> las aplicaciones <strong>de</strong> interfaz<br />

interactiva que se programan actualmente, utilizan TClientDataSet para la capa<br />

visual.<br />

Si ha hecho la prueba <strong>de</strong> activar CustomConstraint en algún campo, habrá visto que el<br />

mensaje que aparece por omisión es <strong>de</strong>masiado “técnico”. Por este motivo existe la<br />

propiedad ConstraintErrorMessage, para que digamos el mensaje que queremos que<br />

aparezca.<br />

Dije al principio <strong>de</strong> la sección que las propieda<strong>de</strong>s anteriores estaban presentes en<br />

todas las clases <strong>de</strong>rivadas <strong>de</strong> TField. En cambio, los campos <strong>de</strong> tipo numérico ofrecen<br />

dos propieda<strong>de</strong>s en exclusiva: Min y Max; pue<strong>de</strong> imaginar para qué se utilizan.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!