30 de junio de 2018

Acceder a objetos y su código dentro de contenedores

Muchas veces, mientras trabajamos con los Diseñadores de clases y formularios, repetimos acciones de búsqueda de controles que se encuentran debajo de uno o varios contenedores, o de búsqueda de código relativo a controles. En este escrito, resumo algunas de las técnicas que nos puedes ayudar a ganar productividad.

Acceder a objetos y su código dentro de contenedores

Hoy vamos a comentar sobre técnicas para lograr un acceso más rápido a controles dentro de contenedores y al código de métodos o eventos de estos controles.

Vamos a suponer que tenemos un contenedor (por ejemplo un formulario), que contiene, digamos un pageframe y en una de sus páginas otro contenedor con otro grupo de controles y etc etc. Cada vez que deseamos posicionarnos en un control determinado tenemos varias variantes, por cierto, todas tediosas.

Podemos, por ejemplo, acceder desde la ventana Propiedades. En la esquina superior existe un cuadro desplegable con todos los controles existentes en el formulario o clase en cuestión. Si nos desplazamos por esta lista desplegada nos podemos colocar directamente en el control deseado. Pero sucede que a veces, como en nuestro caso, todos los controles no caben en esta lista lo cual hace necesario buscar por la lista y luego posicionarnos en el control.

Otra opción es aprovechar las teclas de acceso directo que han sido programadas y vienen de forma nativa con VFP. Así tenemos que al trabajar con los contenedores, tales como el pageframe (marco de página) se puede modificar rápidamente el objeto dentro del contenedor utilizando Ctrl+Clic sobre el objeto. Esto "pasa por encima" del contenedor y permite tomar el control del objeto que está dentro. Si existen contenedores dentro de otros contenedores, puede utilizar Ctrl+Shift+Clic para profundizar aun más en el nivel. Por ejemplo, en nuestro caso, tenemos un control optiongroup en una página del pageframe, entonces podemos acceder a uno de los botones presionando Ctrl+Shift+Clic, y VFP pasa por encima de los controles pageframe, page y optiongroups y va directo al control optionbutton.

Pero la verdad es que, al menos yo, no suelo acordarme nunca de esto. Y he aquí que me he encontrado algo que me parece fenomenal en estos casos en que tenemos muchos controles y mucha herencia de contenedores. Se trata de un árbol de contenedores y es sacado de http://fox.wikis.com/wc.dll?Wiki~ContainerTree

Su autor, Burkhard Stiller, ha presentado un código que nos permite obtener un árbol para acceder directamente a cada objeto de nuestra clase o formulario. Es muy cómodo especialmente si tenemos gran cantidad de objetos o controles dentro de varios niveles de contenedores. Es preciso tener VFP 9.0 para poderlo aplicar.

Se trata sólo de copiar y pegar en un editor de programas y ejecutar siempre que nos sea necesario. Automáticamente rellena el árbol a partir del formulario o clase activa. Según el autor puede encontrar datos que estén dentro de un pageframe, que están a su vez, dentro de otro pageframe y a su vez dentro de otro pageframe, .... así sucesivamente ...De esta forma nos ilustra la profundidad de contenedores que tiene en cuenta. Todos los controles son tenidos en cuenta, sin importar si tiene el método SetFocus(). Se puede emplear en contenedores basados en SCX y VSC.

Veamos una imagen para irnos familiarizando. Como vemos, nos encontramos con un árbol en el que se encuentran todos los controles y los contenedores son nodos que se abren para dejar ver los controles contenidos. Podemos cerrar y abrir los nodos que no vamos a necesitar y de esta forma nuestra lista de controles no está abierta para todos aquellos que no vamos a necesitar.

Pero aun no terminan las bondades de este aporte, que como han dicho, puede ser candidato a formar parte del proyecto Sedna. Bueno, ¿qué más tiene? Pues es Anclable, lo que significa que lo podemos mantener abierto formando parte de nuestra configuración y así tenemos que al cerrar el formulario actual y abrir uno nuevo, bastaría con pararnos en la ficha FrmClassTree (que además, podemos renombrar), yo le he llamado Arbol_controles y lo tengo en mi ventana de comandos junto a las otras ventanas que me gusta mantener: la ventana Propiedades, la ventana Sesión de Datos y la ventana Vista de Documento

Para llamar a esta utilidad basta con ejecutar su programa; pero ... ¿qué tal si nos acordamos de IntelliSense? Pues, podemos agregar un registro de usuario a nuestra tabla FoxCode.DBF e indicar una abreviatura y el código o la llamada al prg, como nos parezca mejor. De esta forma, bastaría con escribir la abreviatura para activar nuestro árbol de controles para la sesión de trabajo actual.

¿Qué tal? Yo lo encuentro muy cómodo. ¿Y ... qué tal un acceso directo a los métodos o eventos de los controles contenidos? Pues también hay posibilidad de lograrlo y nos la brinda VFP de forma nativa.

Tenemos la posibilidad de acceder desde la ventana propiedades, ficha Métodos. Lo que sucede es que nos tendríamos que colocar primeramente en el control para que se muestren sus métodos. Otra variante es desde el diseñador de Formularios / Clases; pero ... nuevamente tenemos que localizar el control y luego el método asociado. Aquí la ventaja sobre seleccionarlo desde la ventana Propiedades es que los procedimientos que tienen código en la instancia actual se muestran al inicio para cada control y muchas veces, si no son muchos, no hay que desplazarse.

Una forma más o menos cómoda es recorrer con las teclas de Avance y Retroceso de páginas desde la ventana de códigos de los Métodos y eventos. Esto lo que va a hacer es que nos movamos por los distintos procedimientos que hemos creado para todos los controles. Eso puede ayudar; pero... lo que sí es verdaderamente productivo es emplear una herramienta de VFP a partir de 8.0 que se llama Vista del Documento. La podemos mantener activada todo el tiempo y es válida para programas de procedimientos o con los Diseñadores de Clases y Formularios.

En la figura hay un ejemplo donde los controles no tienen contenedores adicionales; pero trabaja de la misma forma si los controles están contenidos, independientemente de la complejidad de la herencia de contenedores. La vista de Documentos se puede mantener anclada a la ventana comandos y siempre activa, ya que VFP guarda la configuración al salir.

Pues hasta aquí algunas ideas para lograr acceso directo a controles y el código vinculado a ellos. Aplicando estas técnicas ganamos en productividad, tan necesaria para nuestros desarrollos.

Saludos,

Ana María Bisbé York

3 comentarios :

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.