Aprovechando al máximo la caja de herramientas - ToolBox
21/03/2020
Autor: Tamar E. Granor y Doug Hennig
La Toolbox ofrece una combinación de la barra de herramientas de controles de formulario y la galería de componentes. En esta sesión, profundizaremos en esta herramienta y mostraremos cómo usarla de manera efectiva. Aprenderá cómo organizar sus clases, cómo especificar qué se muestra en cualquier momento y otros trucos para personalizar la Toolbox.
Índice
A partir de VFP 8, la Toolbox (Caja de herramientas que se muestra en la Figura 1) es la herramienta preferida para agregar controles a formularios y clases. Combina la simplicidad de la barra de herramientas Controles de formulario con la flexibilidad de la Galería de componentes para proporcionar una herramienta mejor que cualquiera.
La Toolbox se divide en categorías, cada una representada por una barra. Cada categoría contiene una lista de elementos. Hay varios tipos de categorías y varios tipos de elementos (descritos más adelante).
De forma predeterminada, hay siete categorías:
- Favorites - Favoritos
- Text Scraps - Fragmentos de texto
- VFP Base Classes - Clases básicas de VFP
- VFP Foundation Classes - Clases básicas FFC de VFP
- My Base Classe - Mis clases básicas
- My XML Web Services - Mis servicios web XML
- My ActiveX Controls - Mis controles ActiveX
Además, la categoría Base Classes (Clases básicas) de VFP contiene todas las base classes (clases básicas), mientras My Base Classes (Mis clases básicas) contiene las subclases de primer nivel de la biblioteca _Base en las clases de FoxPro Foundation. (Puede cambiar el contenido de My Base Classes (Mis clases básicas), pero no las VFP Base Classes (Clases básicas de VFP). Consulte “Agregar elementos a la Toolbox ” a continuación). Las VFP Foundation Classes (Clases básicas FFC de VFP) contienen una serie de las clases más útiles (como el cuadro de diálogo Acerca de y la clase Registro) de las FoxPro Foundation Classes.
Abrir la Toolbox
La forma más fácil de iniciar la Toolbox es hacer clic en el icono correspondiente (un martillo cruzado y una llave inglesa) en la barra de herramientas Estándar. También puede abrir Toolbox seleccionándolo en el menú Herramientas o emitiendo el comando: DO (_TOOLBOX) La variable de sistema _TOOLBOX apunta a la aplicación Toolbox, por defecto, ToolBox.APP en el directorio de inicio. A diferencia de la barra de herramientas Controles de formulario, Toolbox no se abre automáticamente cuando abre Form Designer o Class Designer. (De hecho, en VFP 8, la barra de herramientas Controles de formulario ya no se abre automáticamente a menos que la configure para hacerlo). Es posible que desee escribir un pequeño programa que abra la caja de herramientas y luego abre un formulario o clase especificada. Una versión muy simple de dicho programa podría verse así:
Figura 1. La caja de herramientas. Toolbox ofrece una combinación de la barra de herramientas Controles de formulario y la Galería de componentes.
LPARAMETERS cForm DO (_TOOLBOX) IF EMPTY(cForm) MODIFY FORM ? nowait ELSE MODIFY FORM (cForm) NOWAIT ENDIFUna vez que la Caja de herramientas está abierta, se puede cambiar su tamaño tanto horizontal como verticalmente. El tamaño y la posición de la Toolbox se almacenan en el archivo de recursos.
De manera predeterminada, la Toolbox está configurada para estar siempre en la parte superior. Puede cambiar esa configuración desde el menú contextual. Otro elemento del menú contextual le permite desactivar el panel de texto de Ayuda en la parte inferior de la Caja de herramientas, proporcionando más espacio para el contenido.
En VFP 9, la caja de herramientas se puede acoplar. Para hacerlo acoplable, haga clic derecho en la barra de título y marque el elemento acoplable. Una vez que lo haya hecho, la Caja de herramientas se puede acoplar a la ventana principal de VFP u otros formularios IDE acoplables (como la Ventana de comandos, la Ventana de visualización o la Vista de documentos).
Trabajando con la caja de herramientas
Puede hacer una variedad de cosas con la Toolbox, pero su función principal es colocar controles en formularios o clases. Para abrir una categoría y poder acceder a los elementos que contiene, haga clic en el nombre de la categoría. Si los elementos de la categoría no caben en el área de la Caja de herramientas junto con las barras de categoría, se agregan barras de flecha hacia arriba y / o hacia abajo en la parte superior e inferior para permitirle desplazarse dentro de la categoría. (En la Figura 1, hay una barra de flecha hacia abajo para la categoría de Clases base de VFP). Haga clic en una de las barras de flecha para desplazarse hacia arriba o hacia abajo en un elemento. Mejor, manteniendo el mouse sobre una de estas barras se desplaza continuamente en la dirección especificada. (Puede establecer la velocidad de desplazamiento; consulte "Configuración de la Caja de herramientas" más adelante en este documento).
Cuando el Form Designer (Diseñador de formularios) o el Class Designer (Diseñador de clases) está abierto, al hacer doble clic en un control en la Toolbox (ya sea uno de los controles integrados, una subclase o un control ActiveX), suelta una instancia de ese control en el formulario o clase diseño. (Si hay varias instancias del Diseñador de formularios o Diseñador de clases abiertas, usted elige en qué formulario o clase colocar). Si se selecciona una clase de contenedora en el Diseñador, el nuevo control se agrega a ese contenedor. Si no, el nuevo control se coloca en la esquina superior izquierda del formulario o clase.
También puede arrastrar un control desde el Cuadro de herramientas y soltarlo en un formulario o clase. Si cae en un control de contenedor, el nuevo control se agrega al contenedor; de lo contrario, se coloca directamente en el formulario o clase en el punto en que lo soltó. (Dejar caer sobre un contenedor no requiere que se seleccione el contenedor).
Si intenta agregar un control a algo que no puede mantener el control, recibirá un mensaje de error "La clase de objeto no es válida para este contenedor". Por ejemplo, el error aparece si intenta colocar algo que no sea un botón de opción en un grupo de opciones.
Algunas clases, como Exception and Session (Excepción y Sesión), en realidad están destinadas solo para uso programático. Intentar agregar uno de estos a un formulario o clase da como resultado el mensaje “This class has no visual representation and therefore cannot be dropped onto this container” ("Esta clase no tiene representación visual y, por lo tanto, no se puede colocar en este contenedor").
Algunos de los controles tienen inteligencia adicional. Si intenta agregar una clase de página a un formulario o clase, se agrega automáticamente un marco de página para contenerlo. Del mismo modo, agregar una clase de columna de cuadrícula a un contenedor apropiado que no sea una cuadrícula crea una cuadrícula de una columna en el contenedor. Agregar un solo botón de opción crea un grupo de opciones.
Toolbox también es útil cuando se trabaja con código. Arrastre un objeto fuera de la Caja de herramientas a una ventana de edición de código y se agregará una línea de código que instanciará la clase. Por ejemplo, si arrastra la clase Splash Screen de la categoría VFP Foundation Classes a una ventana de código, se genera esta línea de código:
_splash = NEWOBJECT("_ splash", "_DIALOGS.VCX")
De hecho, este es realmente un comportamiento predeterminado. Puede especificar dos comportamientos distintos para arrastrar a las ventanas de código: consulte “Determining the behavior of class items” ("Determinación del comportamiento de los elementos de la clase") a continuación. (Un cambio que puede querer hacer es incluir la ruta de la biblioteca de clases en el código generado. El código predeterminado no lo incluye, lo cual no es un problema si está creando una aplicación, pero podría ser para utilidad código.)
Trabajando con categorías
Toolbox admite cinco tipos de categorías, como se muestra en la Tabla 1. La Tabla 2 muestra los tipos de las categorías integradas.
Tabla 1. Tipos de categoría de caja de herramientas. Cada tipo de categoría tiene algunas características únicas.
Tipo de categoría
Propósito
Categoría general
Contiene clases y otros archivos.
Categoría de carpeta dinámica
Contiene todos o un subconjunto especificado de los archivos en una carpeta específica.
Controles ActiveX registrados
Contiene controles ActiveX.
Mensajes de texto
Contiene fragmentos de texto, que pueden contener cadenas para expandirse mediante la combinación de texto.
Servicios web XML
Contiene servicios web XML registrados.
Tabla 2. Tipos de categoría incorporados. Las categorías que vienen con Toolbox demuestran la mayoría de los tipos.
Categoría
Tipo
Favoritos
Favoritos (tipo especial no disponible para nuevas categorías)
Fragmentos de texto
Mensajes de texto
Clases base de VFP
General
Clases básicas de VFP
General
Mis clases base
General
Mis servicios web XML
Servicios web XML
Mis controles ActiveX
Controles ActiveX registrados
Aunque cada categoría tiene un tipo, en realidad no está restringido a colocar elementos del tipo especificado en la categoría.
Algunos de los tipos de categoría proporcionan comportamientos especiales no incluidos en la categoría General. Por ejemplo, una categoría de carpeta dinámica siempre incluye todos los elementos de la carpeta especificada. Sin embargo, también puede agregar otros elementos a la categoría si lo desea. (Consulte “Adding items to the Toolbox” ("Agregar elementos a la Caja de herramientas") más adelante en este documento). Verá este comportamiento en el trabajo en la categoría integrada de servicios web My XML. Esta categoría (como todas las categorías de tipos de servicios web XML) incluye todos los servicios web registrados. Sin embargo, también incluye una serie de otros elementos, como Registrarse y Controlador genérico.
Para agregar una nueva categoría, abra el menú contextual y elija Add Category (Agregar categoría). Aparece el cuadro de diálogo que se muestra en la Figura 2. Especifique el nombre de la nueva categoría y elija su tipo. Cuando hace clic en Aceptar, la nueva categoría se agrega a la Caja de herramientas, pero en la mayoría de los casos, no tiene contenido.
Figura 2. Agregar una nueva categoría. Cuando elige agregar una categoría, aparece este cuadro de diálogo. Especifique el nombre y el tipo de la nueva categoría.
Para cambiar la configuración de una categoría, haga clic derecho en el nombre de la categoría en la Caja de herramientas y elija Propiedades en el menú contextual. (Si la categoría se expande, debe hacer clic en el nombre de la categoría antes de hacer clic con el botón derecho). El cuadro de diálogo que aparece varía según el tipo de categoría. La Figura 3 muestra el cuadro de diálogo Propiedades de categoría para una categoría general. La Figura 4 muestra el cuadro de diálogo para una categoría de carpeta dinámica. La Tabla 3 muestra los diversos elementos que aparecen en el cuadro de diálogo Propiedades de categoría e indica a qué tipos de categoría se aplican.
Figura 3. Cambio de la configuración de categoría. Para una categoría general, puede configurar solo unos pocos elementos.
Figura 4. Configuración de las propiedades de categoría de carpeta dinámica. Cuando una categoría es el tipo de carpeta dinámica, también puede especificar la carpeta y los tipos de archivos enumerados.
Tabla 3. Propiedades de categoría. La lista de propiedades que puede establecer para una categoría varía según el tipo de categoría.
Propiedad
Se aplica a
Notas
Tipo de categoría
Todos los tipos de categoría
Solo lectura, se establece cuando se crea la categoría.
Nombre de la categoría
Todos los tipos de categoría
Especifica el nombre que se muestra para la categoría en la Caja de herramientas.
Texto de ayuda
Todos los tipos de categoría
Especifica el texto que se muestra en el panel de Ayuda en la parte inferior de la Caja de herramientas cuando la barra de categorías tiene el foco.
Archivo de ayuda
Todos los tipos de categoría
Especifica un archivo de Ayuda que contiene Ayuda para esta categoría.
ID de contexto de ayuda
Todos los tipos de categoría
Especifica la identificación del contexto de ayuda para el tema que debe mostrarse cuando se abre la Ayuda. Si se especifica esto y el archivo de Ayuda está vacío, se refiere al archivo de Ayuda VFP.
Inactivo
Todos los tipos de categoría
Indica si la categoría se muestra en la caja de herramientas en este momento.
Carpeta
Tipo de carpeta dinámica
Especifica la carpeta cuyos archivos se muestran para esta categoría.
Tipo de archivo
Tipo de carpeta dinámica
Especifica un conjunto de extensiones de archivo. Solo los archivos en la carpeta especificada que tienen esas extensiones se incluyen en la categoría. Una razón para limitar las extensiones es para que vea solo el archivo "principal" de elementos almacenados en varios archivos, como tablas (DBF / FPT / CDX) o bibliotecas de clases (VCX / VCT). Las diversas listas de extensiones disponibles incluyen los archivos principales, pero no los archivos de soporte.
Modelo
Tipo de servicios web XML
Especifica una plantilla de combinación de texto utilizada para insertar el código necesario para crear instancias y usar un servicio web. Si está vacío, se usa una plantilla de combinación de texto predeterminada.
Biblioteca de la clase
Tipo de servicios web XML
Especifica la clase y la biblioteca de clases utilizada cuando un servicio web de esta categoría se descarta en un formulario o clase.
Clase base
Tipo de servicios web XML
Indica la clase base de la clase especificada para el elemento de la biblioteca de clases. Solo lectura cuando se especifican una clase y una biblioteca de clases. Cuando no se especifican clases ni bibliotecas de clases, este elemento es una lista desplegable de clases base, pero no parece afectar el comportamiento de los elementos en la categoría.
Nombre del objeto
Tipo de servicios web XML
El nombre utilizado para los servicios web incluidos en formularios o clases.
Propiedades
Tipo de servicios web XML
Configuración de propiedad para usar cuando los servicios web se descartan en formularios o clases. (Consulte "Configuración de propiedades de instancia" a continuación).
Las categorías del tipo de servicios web XML tienen algunas propiedades que pertenecen a elementos individuales en otros tipos de categorías. Esto se debe a que el tipo de categoría de servicios web XML es dinámico y no hay oportunidad de especificar estas características para los servicios web individuales.
Trabajando con elementos
Si bien las categorías son útiles para organizar la Caja de herramientas, son realmente los elementos dentro de ellas las que hacen que la herramienta sea útil. Hay varias formas de agregar elementos a la Caja de herramientas, y bastantes cosas que puede hacer para personalizar su comportamiento una vez que los haya agregado.
La Toolbox admite cinco tipos de elementos, enumerados en la Tabla 4. Aunque la mayoría tiene una conexión con un tipo de categoría en particular, puede colocar cualquier tipo de elemento en cualquier categoría.
Tabla 4. Tipos de ítems. La Caja de herramientas le permite agregar una variedad de tipos de elementos.
Tipo de elemento
Notas
Control ActiveX
Todos los controles ActiveX registrados son elegibles.
Clase
Las bibliotecas de clases se agregan como un todo.
Archivo
Se comporta de acuerdo con la configuración del Registro.
Guión
Ejecuta el código especificado e inserta el valor de retorno.
Text scrap
Inserta texto donde se dejó caer. Puede usar la combinación de texto.
Agregar elementos a la Caja de herramientas
Los elementos de clase se agregan a la Caja de herramientas una biblioteca de clases a la vez. Puede eliminar clases individuales dentro de una biblioteca una vez que haya agregado toda la biblioteca y puede ocultar algunas clases de una biblioteca (consulte “Customizing the Toolbox” ("Personalización de la Caja de herramientas") más adelante), pero no hay forma de agregar una sola clase de una biblioteca de clases a Caja de herramientas.
La forma más obvia de agregar elementos de clase es elegir Agregar biblioteca de clases en el menú contextual. Cuando lo haga, aparecerá el cuadro de diálogo que se muestra en la Figura 5. La categoría por defecto es la que está actualmente expandida, pero puede elegir cualquier categoría activa. Cuando especifica la biblioteca de clases para agregar y elige OK (Aceptar), todas las clases en la biblioteca especificada se agregan a la categoría especificada.
Figura 5. Agregar elementos a la Caja de herramientas. Agrega una biblioteca de clase completa a la vez.
También puede agregar clases arrastrando la biblioteca de clases desde el Explorador de Windows y soltándola en la categoría deseada. En este caso, el cuadro de diálogo de la Figura 5 nunca aparece.
Ambas técnicas para agregar elementos de clase le permiten agregar clases basadas en VCX y PRG.
Todos los tipos de elementos también se pueden agregar mediante el cuadro de diálogo Personalizar cuadro de herramientas (que se muestra en la Figura 6), al que se accede a través del menú contextual. (Los elementos generales de este cuadro de diálogo se analizan más adelante, en la sección “Configuring the Toolbox” ("Configuración de la caja de herramientas")).
Figura 6. Agregar elementos a las categorías. Todos los tipos de elementos se pueden agregar a través del cuadro de diálogo Personalizar cuadro de herramientas.
Para agregar un elemento en el cuadro de diálogo, elija la categoría correcta en el panel izquierdo y luego haga clic en el botón Add Item (Agregar elemento). Aparece el cuadro de diálogo Add (Agregar) elemento que se muestra en la Figura 7, con el tipo de elemento predeterminado para la categoría resaltada.
Figura 7. Agregar un elemento. El primer paso es indicar el tipo de elemento.
Una vez que elija un tipo de elemento, especifique el elemento. La secuencia exacta de pasos varía con el tipo de elemento. Para Clase y Archivo, aparece el cuadro de diálogo Open (Abrir) para permitirle especificar la biblioteca de clases (VCX o PRG) o el archivo (cualquier tipo).
Si elige el control ActiveX, el cuerpo principal del panel derecho cambia para mostrar una lista de controles ActiveX registrados (como se muestra en la Figura 8). Puede elegir uno o más para agregar a la categoría al marcarlos. Tenga en cuenta también que, en este caso, la lista desplegable Select (Seleccionar) una vista de elemento cambia a "controles ActiveX". Para volver a mostrar el contenido de la categoría, debe volver a cambiarlo a "<all>” ("<todos>"). (Para obtener más información sobre esta lista desplegable, consulte “Managing categories” ("Gestión de categorías") a continuación).
Figure 8. Adding ActiveX controls. All registered controls are listed. Check the ones you want to add to the category.
Al especificar Script o Text Scrap para el tipo de elemento, se abre el cuadro de diálogo Properties dialog (Propiedades del elemento), que se describe en la siguiente sección, “Setting item properties” ("Configuración de las propiedades del elemento").
Cuando una categoría tiene el tipo de carpetas dinámicas, no necesita agregarle elementos explícitamente. Todos los archivos en la carpeta especificada con las extensiones especificadas se agregan a la categoría automáticamente. Si cambia el contenido de la carpeta, debe actualizar explícitamente la categoría. Para ello, seleccione Refresh Category (Actualizar categoría) en el menú contextual o en el cuadro de diálogo Customize (Personalizar) Toolbox. (Sin embargo, todas las categorías de carpetas dinámicas se actualizan cuando Toolbox se cierra y se vuelve a abrir). Tenga en cuenta que todos los elementos se agregan a este tipo de categoría como elementos de archivo, incluso si contienen clases.
Establecer propiedades del elemento
El menú contextual para elementos (distintos de los que se agregan automáticamente a las categorías de tipo de carpeta dinámica) incluye Properties (Propiedades); al elegirlo, se abre el cuadro de diálogo Properties (Propiedades) del elemento. El contenido del cuadro de diálogo varía según el tipo de elemento. La figura 9 muestra el cuadro de diálogo para un elemento de tipo de clase, la figura 10 lo muestra para un elemento de tipo de archivo y la figura 11 lo muestra para un text scrap (fragmento de texto). (Los cuadros de diálogo para los otros tipos de elementos no se muestran aquí).
A continuación, haga clic en las imagenes para ampliar:
Figura 9. Especificación de las propiedades del item. Esta versión del cuadro de diálogo Propiedades del elemento se utiliza para elementos de tipo Clase.
Figura 10. Propiedades del elemento del archivo. Para los elementos de tipo de archivo, el cuadro de texto Tipo de elemento muestra el tipo de archivo subyacente, no solo "Archivo".
Figura 11. Especificación de fragmentos de texto. El cuadro de diálogo de propiedades para fragmentos de texto y scripts le permite especificar el elemento en sí.
Al igual que con las categorías, muchas de las propiedades que puede especificar son las mismas para todos los tipos, mientras que otras se aplican solo a tipos específicos. La Tabla 5 enumera las propiedades que puede especificar en el Item Properties dialog (cuadro de diálogo Propiedades del elemento).
Tabla 5. Propiedades del elemento. La lista de cosas que puede especificar varía según el tipo de elemento. Lo más intrigante es la capacidad de establecer valores de propiedad para instancias de clases creadas desde la caja de herramientas.
Propiedad
Se aplica a
Notas
Tipo de elemento
Todos los tipos de elementos
Solo lectura; determinado por el tipo de elemento, y para los elementos de tipo de archivo, por el tipo de archivo.
Nombre del árticulo
Todos los tipos de elementos
Especifica el nombre que aparece para el elemento en la Caja de herramientas.
Texto de ayuda
Todos los tipos de elementos
Especifica el texto que se muestra en el panel de Ayuda en la parte inferior del Cuadro de herramientas cuando el elemento tiene el foco.
Archivo de ayuda
Todos los tipos de elementos
Especifica un archivo de Ayuda que contiene Ayuda para este elemento.
ID de contexto de ayuda
Todos los tipos de elementos
Especifica la identificación del contexto de ayuda para el tema que debe mostrarse cuando se abre la Ayuda. Si se especifica esto y la propiedad del archivo de Ayuda está vacía, se refiere al archivo de Ayuda VFP.
Inactivo
Todos los tipos de elementos
Indica si el elemento debe mostrarse en la Caja de herramientas.
Biblioteca de la clase
Clase, control ActiveX
Especifica la biblioteca de clases que contiene la clase o el archivo OCX que contiene el control ActiveX. Solo lectura; Para los elementos de clase, un botón de puntos suspensivos le permite elegir la clase y la biblioteca de clases.
Clase base
Clase
Especifica la clase del elemento. Solo lectura; un botón de puntos suspensivos le permite elegir la clase y la biblioteca de clases.
Nombre de la clase
Control ActiveX
El ProgID del control ActiveX. Solo lectura.
Nombre del objeto
Clase, control ActiveX
Especifica el nombre del control a crear cuando este elemento se agrega a un formulario o clase o el nombre de la variable de objeto cuando el elemento se agrega a un editor de código. Para un elemento de clase, normalmente el nombre de la clase. Para un elemento ActiveX, por defecto, OLEControl.
Propiedades
Clase, control ActiveX
Especifica la configuración de las propiedades que se realizarán sobre la marcha a medida que el elemento se agrega a un formulario o clase. Consulte "Configuración de propiedades de instancia" más adelante.
Constructor
Clase, control ActiveX, Archivo
Determina si el generador del elemento, si se especifica uno, se ejecuta cuando se abre el elemento. Hay tres opciones: usar la configuración de bloqueo del generador, invocar siempre el generador y nunca invocar el generador.
Nombre del archivo
Archivo
El nombre del archivo asociado. Esta configuración en realidad puede ser una llamada a un programa. (Consulte el elemento Registrar en la categoría My XML Web Services para ver un ejemplo).
Fragmento de texto
Mensajes de texto
Especifica el texto que se insertará cuando se use el elemento. Puede incluir elementos para evaluar mediante la combinación de texto.
Evaluar usando la combinación de texto
Mensajes de texto
Indica si la fusión de texto debe realizarse en el desecho de texto antes de insertarlo.
Script
Script
Especifica el código que se ejecutará cuando se use el elemento. El valor de retorno de este código se inserta donde se cae el elemento.
Script de arrastre completo
Script
Especifica el código que se ejecutará después de soltar el elemento. El valor de retorno no se usa, pero puede realizar tareas de interfaz o limpieza.
La categoría Text Scrap (Fragmentos de texto) viene con dos elementos de Fragmentos de texto, uno para escribir informes de errores y otro para los comentarios del encabezado del programa. Sin embargo, no hay elementos de Script en la Caja de herramientas tal como se envían. Los elementos de script son útiles para situaciones en las que necesita realizar un procesamiento significativo antes de insertar los resultados. Los materiales para esta sesión incluyen ClassBuilder.PRG, el código que se utilizará como valor de secuencia de comandos para un elemento de secuencia de comandos que le permite crear clases basadas en código, agregando propiedades y métodos en un solo paso.
Usando elementos
"Trabajar con la Caja de herramientas" describe las cosas más comunes que hace con los elementos de la Caja de herramientas: haga doble clic o arrástrelos y suéltelos para agregar controles a formularios y clases. Sin embargo, la Caja de herramientas en realidad admite mucho más que esto.
El menú contextual de cada elemento varía según el tipo de elemento. Para las clases que no sean las clases base de VFP, incluye Modify (Modificar), que abre el Class Designer (Diseñador de clases). Para las clases que pueden subclasificarse visualmente, el menú incluye Create Subclass (Crear subclase), que abre el cuadro de diálogo New Class (Nueva clase). Para los controles ActiveX, el menú contextual tiene Open in Object Browser (Abrir en el Explorador de objetos). Para las clases de formulario, el menú contextual incluye Create Form (Crear formulario), que abre el Form Designer (Diseñador de formularios) con un nuevo formulario de la clase especificada. Cuando hay formularios o clases de contenedor abiertos en el Form Designer (Diseñador de formularios) o el Class Designer ( Diseñador de clases), se Add (Agrega) un elemento al menú contextual para muchos elementos. Apunta a un submenú que muestra cada contenedor y formulario disponibles. Elegir uno de esos elementos deja caer una instancia de la clase en el contenedor o formulario elegido.
El menú contextual para los fragmentos de texto incluye Copy to Clipboard (Copiar al portapapeles). Para los elementos de tipo de archivo, las opciones varían con el tipo de archivo, pero los más comunes son Modify (Modificar) y Run (Ejecutar). Cuando elige Modify (Modificar), el archivo se abre en su editor nativo (incluso si se trata de una aplicación diferente).
Los elementos del archivo se muestran mediante hipervínculos. Hacer clic en un elemento de archivo es equivalente a elegir Modify (Modificar) para ese elemento y abrirlo en su editor nativo.
La mayoría de los elementos tienen las opciones Rename (Cambiar nombre) y Delete (Eliminar) en el menú contextual que hacen como su nombre lo sugiere. (Por supuesto, eliminar un elemento de la Caja de herramientas en realidad no lo elimina de la biblioteca de la clase. Del mismo modo, Rename (Cambiar nombre) afecta el nombre que ve en la Caja de herramientas, no el nombre real de la clase). Además, el menú contextual para todos los elementos incluyen Add to Favorites (Agregar a favoritos). Al elegirlo, se agrega el elemento a la categoría Favorites (Favoritos) sin eliminarlo de la categoría en la que ya se encuentra. Esta es una manera fácil de tener una organización general, pero junte los elementos que usa todo el tiempo.
Establecer propiedades de instancia
El cuadro de diálogo Item Properties (Propiedades del elemento) para los elementos de la Class (Clase) (que se muestra en la Figura 9) y para los elementos de ActiveX incluye una sección de Properties (Propiedades). Esta sección le permite especificar las propiedades que se establecerán en la Property Sheet (Hoja de propiedades) cuando el elemento se agrega a un formulario o clase. Cuando hace clic en el botón Add (Agregar), aparece el cuadro de diálogo Set Object Property (Establecer propiedad de objeto) (que se muestra en la Figura 12). (Para los controles ActiveX, el control de la izquierda es un cuadro de texto en lugar de una lista desplegable).
Figura 12. Configuración de propiedades sobre la marcha. La configuración que realiza en este cuadro de diálogo se aplica cuando agrega el elemento a un formulario o clase.
Para establecer una propiedad, elíjala de la lista desplegable o escriba el nombre y luego especifique el valor que desea en el cuadro de texto Value (Valor). Tenga en cuenta que no hay IntelliSense u otra ayuda para agregar valores aquí. Necesita saber cuáles son los valores apropiados. Después de hacer clic en OK (Aceptar), la configuración de la propiedad se muestra en el área Properties (Propiedades) del cuadro de diálogo Item Properties (Propiedades del elemento) (como se muestra en la Figura 13). Una vez que se agregan las configuraciones de propiedades allí, puede usar los botones Edit (Editar) y Remove (Eliminar) para modificar o eliminar las configuraciones. Al hacer doble clic en una configuración de la lista, se abre el cuadro de diálogo Set Object Property (Establecer propiedad de objeto) con esa configuración ingresada.
Figura 13. Configuración de propiedad de instancia. Después de agregar configuraciones de propiedades, se muestran en el cuadro de edición Propiedades, donde se pueden editar o eliminar.
Es importante comprender que establecer propiedades de esta manera no crea nuevas subclases. Se parece más a un generador en el sentido de que establece propiedades para una instancia en particular. No use esta capacidad cuando una subclase sea apropiada.
Sin embargo, hay dos cosas bastante interesantes que puede hacer al configurar las propiedades del elemento. Primero, el valor que especifique en realidad puede ser código. Por ejemplo, puede establecer el título en un valor de "(INPUTBOX (" Especificar título "))"; cuando agrega el control a un formulario o clase, se le pedirá que ingrese el título. Tenga en cuenta los paréntesis adicionales alrededor de la llamada a la función; son necesarios para forzar la evaluación del valor en lugar de solo asignarlo a la propiedad. Sin embargo, no incluya las comillas externas.
Además, los listados de propiedades para los controles de miembros (Column Header, Grid Column, Option Button, and Page (Encabezado de columna, Columna de cuadrícula, Botón de opción y Página)) incluyen algunas propiedades especiales que determinan qué sucede cuando coloca uno de estos controles en algo que no sea su contenedor normal. Normalmente, el contenedor apropiado se agrega según las clases base de VFP y luego se le agrega un objeto de la clase especificada. Las propiedades ContainerClass, ContainerClassLib y MemberCount le permiten determinar en qué clase se basa el contenedor y cuántos objetos de la clase elegida se agregan. Estas propiedades no aparecen en ningún lado excepto en este cuadro de diálogo.
Personalizar la caja de herramientas
Dado todo lo que ya se describió, es posible que se pregunte qué más podemos hacer para personalizar Toolbox. De hecho, hay algunos cambios más globales que puede hacer.
Primero, el menú contextual contiene varios botones que afectan a Toolbox en su conjunto. Bloqueo de generador determina si los constructores aparecen para los elementos configurados para seguir la configuración de Builder Lock (Bloqueo de generador). Los elementos en la Caja de herramientas ignoran la configuración global de Builder Lock (Bloqueo de generador) desde el cuadro de diálogo Options (Opciones) en el menú Herramientas y en su lugar utilizan la configuración para la Caja de herramientas.
Mostrar Help Text (texto de ayuda) determina si el panel de Help (Ayuda) aparece en la parte inferior de la Caja de Tools (herramientas). Siempre en la parte superior determina si la caja de herramientas permanece en la parte superior o se cae detrás de otras formas.
Sin embargo, la mayoría de la configuración de la Toolbox se realiza en el cuadro de diálogo Customize Toolbox (Personalizar Toolbox) (que se muestra en la Figura 6 y la Figura 8). En “Adding items to the Toolbox” ("Agregar elementos a la Caja de herramientas") anteriormente, se discutió un uso para este cuadro de diálogo, pero es mucho más capaz que simplemente editar la lista de elementos en una categoría. La sección superior del panel izquierdo proporciona acceso a los elementos que afectan a la Caja de herramientas en su conjunto.
Configurar la Caja de Herramientas
La Figura 14 muestra la vista de General Options (Opciones generales) del cuadro de diálogo. Esta sección contiene una variedad de configuraciones para el comportamiento de la Toolbox, incluidas las tres que se pueden configurar desde el menú contextual. Ejecutar constructores asociados es lo mismo que el elemento del menú contextual Builder Lock (Bloqueo de constructor). La sección de texto de ayuda de Display Toolbox (Mostrar Toolbox) corresponde al elemento Display Help Text (Mostrar texto de ayuda), y Always on Top es un espejo del elemento de menú contextual Always on Top.
Figura 14. Configuración del comportamiento de Toolbox. La vista Opciones del cuadro de diálogo Personalizar caja de herramientas contiene configuraciones que afectan a la Caja de herramientas como un todo.
Mostrar información sobre herramientas determina si la información sobre herramientas se muestra cuando el mouse se desplaza sobre un elemento. La información sobre herramientas utiliza el texto de Help (Ayuda) especificado para los elementos. Si el espacio es escaso, apague la sección de texto de Help (Ayuda) y deje activada la información sobre herramientas.
Hacer doble clic para abrir un elemento se aplica a los elementos del archivo. De manera predeterminada, un solo clic en un elemento de archivo lo abre en su editor nativo. Cuando este elemento está marcado, se necesita un doble clic. Si a menudo abre elementos por accidente, considere cambiar esta configuración.
Los siguientes dos elementos, Set CurrentControl property (Establecer propiedad CurrentControl) cuando un control se suelta en una columna de cuadrícula y Prompt (Preguntar) si desea eliminar el control Text1 al soltar un nuevo control en una columna de cuadrícula, se combinan para determinar qué sucede cuando suelta controles en cuadrículas. Cuando se marca el elemento Prompt (Preguntar), al soltar un control en una columna de cuadrícula que contiene un cuadro de texto predeterminado llamado Texto1, aparece el cuadro de diálogo que se muestra en la Figura 15. Si responde Yes (Sí), no solo el control que está soltando se agrega a la columna, pero el cuadro de texto se elimina. Cuando se marca la opción When the Set CurrentControl (Establecer control actual), el control recién agregado se convierte en el control actual para la columna. Cuando esta opción no está marcada, CurrentControl no se establece en el nuevo control, incluso si elimina el cuadro de texto predeterminado.
Figura 15. Reemplazo de controles de cuadrícula. Cuando suelta un control en una columna de cuadrícula, este cuadro de diálogo le permite deshacerse del cuadro de texto predeterminado.
El elemento final en esta sección, Allow Toolbox to be minimized (Permitir que se minimice Toolbox), agrega un botón de minimización a Toolbox y habilita el cuadro de control, colocando Minimize (Minimizar) en esa lista también. Esta opción solo funciona en VFP 8.
Como se señaló en la sección “Working with the Toolbox” ("Trabajar con la caja de herramientas") anteriormente, manteniendo el mouse sobre las flechas en la parte superior e inferior de una categoría se desplaza dentro de esa categoría. El control de velocidad de desplazamiento de categoría le permite determinar qué tan rápido se desplazan los elementos.
Como era de esperar, el elemento de la tabla de la Toolbox apunta a la tabla que contiene los datos de la Toolbox. Entre otras cosas, la capacidad de cambiar esta configuración significa que puede mantener varios conjuntos de datos de la caja de herramientas (quizás para diferentes proyectos) y cambiar entre ellos. (Consulte “Filtering the Toolbox” ("Filtrado de la caja de herramientas") más adelante en este capítulo para obtener un enfoque alternativo).
Si el Tahoma de 8 puntos que utiliza Toolbox de manera predeterminada no funciona para usted, use el botón Font (Fuente) para elegir su fuente y tamaño favoritos. (Desafortunadamente, no cambia la fuente en ninguno de los cuadros de diálogo asociados).
Finalmente, los dos botones en la parte inferior de esta página le permiten limpiar después de usted. Clean Up Toolbox empaqueta los datos de la Toolbox para deshacerse de los registros eliminados. Restaurar a los valores predeterminados restaura la caja de herramientas original, aunque le da la opción de mantener las categorías y los elementos que ha agregado. En ese caso, todo lo que hace es restaurar los elementos originales a su configuración original (por ejemplo, eliminar la configuración de propiedades que ha agregado). Una copia de la tabla Toolbox se guarda como una copia de seguridad.
Determinar el comportamiento de los elementos de la clase
La vista Class Items (Elementos de clase) del cuadro de diálogo (Figura 16) le permite determinar cómo se nombran los elementos de Class (Clase) cuando se agregan a la Caja de herramientas y qué sucede cuando arrastra elementos de Class (Clase) a las ventanas de edición de código.
Figura 16. Comportamiento del elemento de clase. Esta página del cuadro de diálogo Personalizar cuadro de herramientas determina el nombre predeterminado de los elementos de la Clase y su comportamiento cuando se coloca en las ventanas de código.
Cuando agrega una biblioteca de clases a la Caja de herramientas, cada elemento recibe un nombre. Los botones de opción de convención de nomenclatura predeterminada determinan el formato de ese nombre. (Tenga en cuenta que puede cambiar el nombre en el cuadro de diálogo Item Properties (Propiedades del elemento) o en la página de la categoría correspondiente en el cuadro de diálogo Customize Toolbox (Personalizar cuadro de herramientas)). Para una clase llamada cmdMyButton en una biblioteca de clases llamada MyClasses, las tres opciones son:
- cmdMyButton (MyClasses)
- cmdMyButton
- MyClasses.cmdMyButton
Los dos cuadros de edición en esta página controlan lo que sucede cuando arrastra un elemento de Clase a una ventana de edición de código. La plantilla de texto Drag (Arrastrar) y drop (soltar) se usa para un arrastre normal, mientras que la plantilla de texto Ctrl + Drag (Arrastrar) y drop (soltar) se usa para arrastrar con el botón Ctrl presionado. Cualquier texto que coloque en el cuadro de edición se evalúa mediante la combinación de texto y luego se coloca en la ventana de edición de código.
Por defecto, arrastrar una clase base VFP genera código como:
Text = CREATEOBJECT("Textbox")
Arrastrando cualquier otro elemento de Class (clase) da como resultado el código usando NewObject(), así:
_checkbox = NEWOBJECT("_ checkbox", "_BASE.VCX")
En ambos casos, el nombre utilizado para el nuevo objeto es el nombre del objeto especificado en el cuadro de diálogo Properties (Propiedades) del elemento. Si este código no es lo que desea, escriba su propia plantilla en el cuadro de diálogo. La Tabla 6 muestra los datos relacionados con el elemento que puede usar en su plantilla.
Tabla 6. Creación de plantillas de texto. Estos datos sobre el elemento que está colocando están disponibles para combinar texto en plantillas.
Nombre
Contiene
BaseClass
The base class of the item. - La clase base del elemento.
ClassLib
The class library of the item, with complete path. - La biblioteca de clases del elemento, con la ruta completa.
ClassName
The name of the item’s class. - El nombre de la clase del elemento.
ObjectName
The name specified for the object in the Item Properties dialog. - El nombre especificado para el objeto en el cuadro de diálogo Propiedades del elemento.
Por ejemplo, para crear documentación para una clase, puede colocar esta plantilla en la plantilla Ctrl + Drag (Arrastrar) y drop (soltar):
Base Class: <<BaseClass>> Class Library: <<ClassLib>> Class Name: <<ClassName>> Object Name: <<ObjectName>>
Filtrando la caja de herramientas
La tercera página de la sección General de la Toolbox (que se muestra en la Figura 17) le permite definir y administrar filtros que limitan las categorías que se muestran en la Toolbox en cualquier momento. Cuando se definen filtros, el menú contextual agrega un elemento Filters (Filtros) que abre un submenú que enumera todos los filtros definidos. Elija un filtro de esa lista y la Caja de herramientas muestra solo las categorías especificadas para el filtro. Puede usar filtros para administrar las diferentes bibliotecas de clases necesarias para diferentes clientes o diferentes proyectos.
Figura 17. Gestión de filtros. Un filtro contiene una o más categorías.
Para definir un filtro, haga clic en el botón New Filter (Nuevo filtro). El nuevo filtro se agrega en el cuadro de diálogo y el foco se establece en el cuadro de texto Filter name (Nombre del filtro). Escriba el nombre de su filtro y luego verifique las categorías que se deben mostrar para el filtro. El botón Update (Actualizar) actualiza el nombre del filtro en la lista de Defined filters (filtros definidos).
Puede editar cualquier filtro haciendo clic en él en la lista de Defined filters (filtros definidos) y cambiando las categorías elegidas. Como era de esperar, Delete Filter (Eliminar filtro) elimina un filtro de la lista.
Apply Filter (Aplicar filtro) y Clear Filter (Borrar filtro) le permite configurar y eliminar un filtro, pero también puede hacerlo directamente desde el menú contextual.
Administrar categorías
Las páginas de Categories pages in the Customize Toolbox (Categorías en el cuadro de diálogo Personalizar Toolbox) le permiten administrar la lista de categorías y sus contenidos. Las técnicas para agregar elementos a las categorías se analizan en “Adding items to the Toolbox” ("Agregar elementos a la Toolbox") más arriba.
Cuando se eligen Categorías o cualquier categoría específica, una barra de botones en la parte superior del cuadro de diálogo (que se muestra en la Figura 18; consulte la Figura 6 y la Figura 8 para ver el cuadro de diálogo completo) le permite reorganizar la lista de categorías, add, remove and edit categories, and refresh (agregar, eliminar y editar categorías, y actualice) una categoría individual o toda la Caja de herramientas.
Figura 18. Gestión de categorías. Esta barra de botones aparece en el cuadro de diálogo Personalizar cuadro de herramientas cuando se elige una categoría.
La lista desplegable Select (Seleccionar una) vista de elemento controla lo que aparece en el panel principal del cuadro de diálogo. Las opciones en la lista desplegable son “<all>” ("<todos>"), “Visual FoxPro Class Libraries” ("Bibliotecas de clases de Visual FoxPro") y "Controles ActiveX". La barra de botones debajo de la lista desplegable cambia según la elección en la lista desplegable. Cuando se elige “<all>” ("<todos>", contiene botones (Figura 19) para agregar, eliminar y editar elementos individuales, así como ordenar y reorganizar elementos. Cuando se elige "Bibliotecas de clases de Visual FoxPro" en la lista desplegable, la barra de botones (Figura 20) contiene elementos para administrar bibliotecas de clases completas. Cuando se elige "controles ActiveX", no hay botones disponibles.
Figura 19. Gestión de elementos en el cuadro de diálogo Personalizar cuadro de herramientas. Cuando la vista de elementos se establece en "<todos>", la barra de botones le permite trabajar con elementos individuales. Las flechas hacia arriba y hacia abajo le permiten reorganizar los elementos de la categoría.
Figura 20. Trabajando con bibliotecas. Cuando la vista del elemento se establece en "Bibliotecas de clases de Visual FoxPro", los botones administran bibliotecas completas.
En cualquier vista, marque o desmarque los elementos para mostrarlos u ocultarlos en la Caja de herramientas. La casilla de verificación Show (Mostrar) solo elementos marcados en el cuadro de diálogo determina si ve los elementos ocultos en el cuadro de diálogo Customize Toolbox (Personalizar Toolbox). Además, no importa en qué vista se encuentre, la columna Name (Nombre) del elemento es editable; cambiarla determina lo que aparece para el elemento en la Caja de herramientas.
Trabajando con el código fuente
Al igual que con otras herramientas escritas en VFP, el código fuente de la Toolbox viene con el producto. El origen de todas las “Xbase tools” ("herramientas de Xbase") está en un archivo llamado XSource.ZIP en el directorio HOME() + “Tools\XSource”. Cuando lo descomprimes (asegúrate de seleccionar la opción Use (Usar) nombres de carpeta), se crea un nuevo directorio llamado VFPSource. Cada herramienta tiene un subdirectorio dentro de ese directorio. El proyecto Toolbox está en un directorio Toolbox.
Puede modificar o subclasificar cualquiera de los códigos utilizados para Toolbox y reconstruir la aplicación. De manera predeterminada, Toolbox es Toolbox.APP en el directorio HOME (). Puede cambiar eso configurando la variable de sistema _TOOLBOX.
Por defecto, los datos de Toolbox se almacenan en una tabla llamada Toolbox.DBF en el directorio de datos de la aplicación (el indicado por HOME (7)). Como se señaló en la “Configuring the Toolbox” ("Configuración de la caja de herramientas") anteriormente en este capítulo, puede cambiar la ubicación y el nombre del archivo.
La tabla Toolbox contiene un registro para cada categoría y uno para cada elemento en el Toolbox. La Tabla 7 muestra los campos en la tabla Caja de herramientas.
Tabla 7. Datos de la caja de herramientas. La tabla Toolbox contiene un registro para cada categoría y uno para cada elemento en el Toolbox.
Field - Campo
Type - Tipo
Purpose - Propósito
UniqueID
Character
Un identificador único para el registro. El formato recomendado es "vendor.ID". Para los registros agregados a través de la interfaz de Toolbox, se completa "usuario" para la porción del proveedor y SYS (2015) se usa para proporcionar la porción de ID.
ShowType
Character
Indica el tipo de artículo. Por ejemplo, "C" para la categoría y "T" para el elemento (herramienta). Vea Toolbox.H en el proyecto Toolbox para la lista completa.
ToolTypeID
Character
El tipo de elemento. Para las categorías, en la forma "Category.CategoryType". Para los elementos, solo "ItemType".
ToolType
Memo
El tipo de elemento en formato legible. Este es el tipo que aparece en el cuadro de diálogo Propiedades.
ParentID
Character
Para los elementos, el UniqueID de la categoría que lo contiene.
ToolName
Character
El nombre descriptivo de la categoría o elemento, tal como aparece en la Caja de herramientas.
ImageFile
Memo
El icono a usar para el item. No se utiliza para categorías.
ClassType
Character
Indica el tipo de item. "CATEGORÍA" para categorías, "CLASE" para elementos de clase, etc. Para elementos de archivo, el tipo de archivo, como "APP".
SetID
Memo
Para elementos de clase, la biblioteca de clases que contiene. (Importante porque las bibliotecas de clases se agregan y, a veces, se eliminan como un todo).
ClassName
Memo
El nombre de la clase utilizada para procesar este elemento. Por ejemplo, de forma predeterminada, "_classtool" para elementos de clase y "_activetool" para elementos de ActiveX.
ClassLib
Memo
La biblioteca de clases que contiene la clase nombrada en ClassName. Si está vacío, se utiliza _toolbox.vcx.
ToolTip
Memo
El texto de ayuda para la categoría o elemento. Esto aparece en el panel Mostrar ayuda y como información sobre herramientas.
HelpFile
Memo
El archivo de Ayuda (incluida la ruta) que contiene la Ayuda para este elemento.
HelpID
Numeric
El ID de contexto de ayuda para este elemento en el archivo de Ayuda especificado por HelpFile (o en el archivo de Ayuda de VFP, si HelpFile está vacío).
ToolData
Memo
Datos para esta categoría o artículo. Para los elementos, incluye el nombre de la clase, la biblioteca de la clase, la clase base y la información del nombre del objeto, así como la lista de propiedades para establecer en esta instancia. Para elementos de archivo, incluye el nombre del archivo. Para fragmentos de texto, incluye el texto a insertar. Para guiones, incluye el guión. Para los controles ActiveX, incluye el nombre del archivo OCX, el nombre de la clase y el nombre del objeto.
DisplayOrd
Numeric
El orden de visualización de este artículo. Para las categorías, la posición en la que aparece la categoría. Para artículos, la posición del artículo en la categoría.
LockAdd
Logical
Para las categorías, indica si se pueden agregar elementos. (Verdadero indica que no se permiten adiciones). Ignorado para los artículos.
LockDelete
Logical
Indica si el elemento o la categoría se pueden eliminar. Cuando se establece en Verdadero, Eliminar no aparece en el menú contextual y el botón Eliminar elemento está deshabilitado en el cuadro de diálogo Personalizar cuadro de herramientas.
LockRename
Logical
Indica si se puede cambiar el nombre del elemento o categoría. Cuando se establece en Verdadero, el elemento Cambiar nombre no aparece en el menú contextual.
Inactive
Logical
Indica si el elemento o la categoría se muestran actualmente en la Caja de herramientas. (Verdadero significa que el elemento o categoría no se muestra).
User
Memo
Disponible para información especificada por el usuario.
Modified
DateTime
Marca de tiempo del último cambio al artículo o categoría.
Finalmente, cuando la Toolbox se está ejecutando, la variable _oToolbox contiene una referencia de objeto. La propiedad oToolboxEngine apunta al objeto responsable de gran parte del comportamiento de la Toolbox.
Resumen
La Toolbox es una herramienta increíblemente capaz. Ofrece el poder de la Component Gallery (Galería de componentes) sin su complejidad. Uso la Toolbox exclusivamente y nunca abro la barra de herramientas Form Controls (Controles de formulario).
El material de estas notas está extraído de “What’s New in Visual FoxPro 8.0” ("Novedades de Visual FoxPro 8.0") por Tamar E. Granor y Doug Hennig, Hentzenwerke Publishing y tiene copyright 2003, Tamar E. Granor y Doug Hennig.
Para obtener información adicional, consulte la serie de artículos de Cindy Winegarden en los números de enero, abril y junio de 2003 de FoxPro Advisor. El artículo de junio muestra algunas razones por las que es posible que desee modificar el código de la Toolbox.
Copyright, 2007, Tamar E. Granor.
Usar la Caja de Herramientas - ToolBox
La Caja de Herramientas - ToolBox Vista Por Dentro
Tips: Caja de herramientas - ToolBox
Añadir bibliotecas de clases utilizando la ToolBox - Ventajas - Ej. con FoxRibbon
Aprovechando al máximo la caja de herramientas - ToolBox
Making the Most of the Toolbox - Artículo original en Inglés
Artículo original: Making the Most of the Toolbox
Autor: Tamar E. Granor y Doug Hennig
Traducido por: Camf