Ver Mensaje Individual
  #2  
Antiguo 01-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo empezaría preguntándome cómo hacerlo primero sin crear nuevas componentes. Sólo veo un punto adecuado, el evento OnChange del DBEdit. Ahí comparas la longitud del contenido del control con la de su propiedad MaxLength. Si coinciden, pasas el foco al siguiente control. ¿Cómo haces esto? Con el método SelectNext del formulario donde esté el DBEdit.

Una vez que tienes claro esto puedes comenzar a pasarlo a una nueva componente. El primer punto a notar es que en una gran cantidad de casos, los eventos corresponden a métodos protegidos que son los que lanzan el evento y normalmente lo que se hace entonces es redefinir el método en la nueva componente. En este caso el DBEdit tiene el método Change. Lo usual es que el método redefinido comience llamando al ancestro con inherited y después haga lo que tenga que hacer. Esto último ya lo sabes: comparar longitudes y pasar en dado caso el foco al siguiente control del formulario.

Cuando trabajas con el evento OnChange sabes de qué formulario se trata pero en el caso de una componente no sabes de antemano en qué formulario se va a poner. Pero la VCL dispone de la función GetParentForm que te dice precisamente en qué formulario está un control.

La componente yo la completaría con una propiedad booleana, digamos AutoNext que permita especificar si queremos que el DBEdt se comporte así (paso en automático al siguiente control) o no. Tu método Change simplemente tiene que verificar el valor de esa propiedad.

// Saludos
Responder Con Cita