Estimados compañeros, para los que gustan de construir sus propias clases, me gustaría comentaros un problemilla que me ha traido de cabeza durante algunas semanas y que a lo mejor os ha ocurrido a vosotros, pues por si os sirve de ayuda, he conseguido solventarlo. Os cuento:
Hace algún tiempo que construí mi propio Browse para Arrays derivado de TControl. Todo muy bien, muy bonito. Todo perfecto. Pero mira por donde que en el último programa me ha ocurrido un hecho curioso. Tengo el browse en una ficha de clientes, como si fuera una tabla que se refresca para cada ficha. Normalmente, cuando salgo de la ventana no ocurre nada anómalo, se cierra la base de datos al cerrarse el diálogo y todo normal; pero si cuando salgo mi Browse tenía el foco y además había pulsado la tecla CURSOR ABAJO (como última tecla pùlsada), al salir del dialogo, éste se refresca de improviso, y como había cerrado la base de datos con el dialogo, pues: ERROR!. Pero sólo con esa combinación, si la última acción es cualquier otra tecla o el ratón, o con el foco en otro control, todo bien.
Hasta que, investigando conseguir darme cuenta de que la clase TCONTROL procesa la tecla VK_DOWN para buscar el siguiente control del diálogo cuando el control pierde el foco, y al perder mi Browse el foco cuando se cierra la ventana, pues nada busca el siguiente control (de un dialogo cerrándose) y: el ERROR de las narices. Lo he solventado poniendo ::oWnd:nLastKey := 0 el mi método KeyDown(...).
Y todo este tostón es por si alguién ha estado, como yo, a punto de comerse el ordenador por un echo que en principio parecía inexplicable. Cuidado con los KeyDown's de vuestras propias clases cuando se derivan de TCONTROL.
Un saludo y que os sea leve...