Hola invitado         07 Sep, 2010 - 01:53
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
El ToolBox visto por dentro (Parte 1/2) lecturas 7989
 Enviado por amby en Martes, 04 Mayo, 2004
Artículos Este magnífico artículo escrito por Beth Massi explica cómo trabaja la Caja de herramientas, (ToolBox ), cómo personalizarlo para que encaje en su estilo de trabajo y sus proyectos. Muestra cómo crear y distribuir herramientas al equipo de desarrolladores y crear paquetes de instalación de conjuntos de herramientas. Muestra la arquitectura del ToolBox y cómo extenderlo fácilmente para incorporarle comportamientos muy potentes (powerful add-in behaviors) Sobre-escribir comportamientos existentes y agregar sus nuevas herramientas y tipos de categorías.

La caja de herramientas (ToolBox) de Visual FoxPro 8.0 vista por dentro (Parte 1/2)

Autor: Beth Massi (www.BethMassi.com)

Texto original:
-- Inside the Visual FoxPro 8.0 ToolBox -- Mayo 2003
http://msdn.microsoft.com/library/en-us/dnfoxgen8/html/vfp8_toolbox.asp

Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para PortalFox (www.PortalFox.com)

Se aplica a: Visual FoxPro 8.0


Resumen

Conocer cómo trabaja la Caja de herramientas, (ToolBox), y ver cómo personalizarlo para que encaje en su estilo de trabajo y sus proyectos. Crear y distribuir herramientas al equipo de desarrolladores y crear paquetes de instalación de conjuntos de herramientas. Aprender la arquitectura del ToolBox y cómo extenderlo fácilmente para incorporarle comportamientos muy potentes (powerful add-in behaviors) Sobre-escribir comportamientos existentes y agregar sus nuevas herramientas y tipos de categorías.

Contenido

  • Introducción
  • Conjuntos de herramientas
  • Conjuntos de herramientas de terceros
  • Arquitectura del ToolBox
  • Crear comportamientos integrados
  • Sobrescribir comportamientos y soportar nuevos tipos de herramientas
  • Soportar nuevas categorías de herramientas
  • Conclusiones

Introducción

La caja de herramientas del Visual FoxPro es una nueva herramienta del Entorno Integrado de Desarrollo (IDE - Integrated Development Environment), que ayuda en la experiencia de desarrollo con Visual FoxPro. El toolbox muestra, agrupados por categorías, los conjuntos de herramientas personalizados por el desarrollador, incluyendo las que se consideren necesarias para la creación de aplicaciones. Los conjuntos de herramientas contienen típicamente clases y componentes; pero pueden guardar además referencias a recursos basados en archivos comunes como formularios, programas, tablas, informes, imágenes, etc. Pueden contener además otros tipos como controles ActiveX, generadores y asistentes, o elementos de Servicios Web XML. Los elementos pueden ser arrastrados al área de trabajo, se puede hacer clic sobre ellos para ejecutar acciones predeterminadas, o pueden contener comportamiento accesible desde elementos de menú contextual.

Debido a que tiene control completo sobre la Caja de herramientas, se convierte en parte esencial del IDE. Y, como prácticamente todas las características del IDE de Visual FoxPro, es extensible. Entonces, si un tipo de herramienta o comportamiento no es permitido actualmente, se pueden agregar nuevos comportamientos y tipos de herramientas sin necesidad de recompilar toda la aplicación ToolBox. Los conjuntos de herramientas individuales son cargados dentro del ToolBox, cuya arquitectura admite comportamientos integrados y categorías. De esta forma, terceros suministradores o arquitectos a nivel empresarial, pueden proporcionar fácilmente su propio conjunto de herramientas dinámico para lograr un óptimo y rápido desarrollo de la aplicación.

En este artículo, aprenderá cómo puede crear y distribuir conjuntos de herramientas a su equipo de desarrolladores y cómo terceros suministradores pueden crear paquetes de instalación de conjuntos de herramientas. Ganará en comprensión de la arquitectura del ToolBox y cómo extender fácilmente el ToolBox creando potentes comportamientos agregados. Aprenderá además cómo sobrescribir comportamientos existentes y añadir su propio conjuntos de herramientas y tipos de categorías.

Para más información sobre el empleo de la caja de herramientas y una discusión completa de las herramientas y categorías integradas, vea el artículo que fue publicado originalmente en Universal Thread Magazine. (Nota de la traductora: Este artículo se encuentra traducido al español en http://www.utmag.com/spanish/February2003/Page32.asp)

Conjuntos de herramientas

Un conjunto de herramientas es un grupo de elementos de herramientas contenidos en el Toolbox, agrupados por categorías. Los elementos dentro del conjunto de herramientas pueden representar objetos de tipos diferentes. Estos objetos pueden ser bibliotecas de clases de Visual FoxPro y pueden ser arrastrados al área de trabajo de la misma forma que arrastra una clase de la barra de herramientas. Pero, mientras la barra de herramientas de Visual FoxPro muestra todas las clases que hay en la biblioteca, el ToolBox puede mostrar sólo las clases que el desarrollador desea. El ToolBox admite además, generadores y asistentes, controles ActiveX Servicios Web XML y retazos de texto (text scraps). Además de todos estos elementos, el ToolBox puede representar recursos basados en archivos como son: bases de datos, tablas, imágenes, informes, etiquetas, menús, formularios, aplicaciones, programas y proyectos.

Cuando se desarrollan sistemas en equipo, es frecuente que un arquitecto o un grupo de expertos creen un framework (armazón y/o entorno de trabajo) de clases de Visual FoxPro y posibles generadores u otros recursos para utilizar en el proyecto. Estos archivos se distribuyen entonces al equipo de desarrolladores. Sin embargo, debido a que todas las clases de una biblioteca de clases se muestran cuando la biblioteca es cargada en la barra de tareas de Visual FoxPro, los miembros del equipo pueden invertir tiempo en comprender qué clases son clases abstractas del framework y cuáles deben utilizarse para el desarrollo. Para ayudar a sus desarrolladores a acceder a las clases que se desea que ellos utilicen, puede establecer un conjunto de herramientas en el ToolBox y distribuirlas a su equipo de desarrolladores. Este conjunto de herramientas no está limitado a clases. Pueden contener cualquier tipo de elementos, incluyendo enlaces a otras aplicaciones o recursos. Puede además establecer carpetas de categorías dinámicas que muestren elementos desde los archivos de la red, de tal forma que los desarrolladores puedan acceder fácilmente a los recursos compartidos.

El ToolBox guarda todo su contenido en una tabla de datos (.dbf) de Visual FoxPro, específica para cada usuario. El Visual FoxPro crea la tabla la primera vez que se abre el ToolBox y guarda el contenido predeterminado. Al personalizar el ToolBox, se modifica el contenido de esta tabla. De forma predeterminada, los nombres para estos archivos de datos son: Toolbox.dbf, Toolbox.fpt, y Toolbox.cdx. Se encuentran en la carpeta HOME(7), \Documents and Settings\UserName\Application Data\Microsoft\Visual FoxPro 8\Toolbox\.

Para crear un conjunto de herramientas para sus desarrolladores, personalice su ToolBox para llenar las categorías con clases, generadores y otras herramientas de su framework que sus desarrolladores pueden utilizar en el proyecto. Puede incluso establecer categorías dinámicas y categorías filtradas. Entonces, todo lo que necesita es distribuir su tabla de contenidos de ToolBox a su equipo de desarrolladores con las bibliotecas de clases y archivos del framework.

Cuando el ToolBox se abre por primera vez, pregunta por la tabla de contenido. El desarrollador puede decidir cargar una tabla que haya sido suministrada previamente, en lugar de la predeterminada, seleccionando la opción adecuada y localizando el archivo .dbf. Después que el ToolBox ha sido llamado una vez, el desarrollador puede alternar entre diferentes tablas de contenido utilizando Customize ToolBox (Personalizar ToolBox) > ficha Options (Opciones), clic derecho en el ToolBox y seleccionando Options en el árbol a la izquierda. Esto muestra todas las opciones del ToolBox. La ruta y nombre de la tabla de contenido se muestra en el medio del formulario (Figura 1). Introduzca el nuevo nombre de la tabla o haga clic en el comando (…) para localizar el archivo.dbf


Figura 1. Para alternar las tablas de contenido del ToolBox, se pueden seleccionar desde Personalizar ToolBox > Opciones.

Las bibliotecas de clases existentes deben ser distribuidas en la misma carpeta relativa de los PC de los desarrolladores para que sea fácil de utilizar. Sin embargo, si el desarrollador utiliza una herramienta y el Toolbox no puede encontrar la clase asociada, pregunta al desarrollador para que localice la biblioteca de clases y actualice los datos de ese elemento del ToolBox. Por ejemplo, si crea un elemento de la herramienta que se referiere a la clase llamada MyClass en la biblioteca de clases localizada en C:\MyFramework\MyClasses.vcx, debe distribuir la biblioteca de clases a la misma carpeta del PC del desarrollador. De no hacerlo así, se le preguntará al desarrollador, para que localice la biblioteca de clases correspondiente, cuando la herramienta es utilizada.

Antes de que establezca el conjunto de herramientas de su entidad en el ToolBox, probablemente no desee distribuir ningún contenido personal que tenga configurado. Por ejemplo, puede que haya creado categoría y filtros que no desee que sean distribuidas. Lo que necesitará será realizar una copia de seguridad de su tabla contenido y luego restaurar la tabla de contenidos original del ToolBox. Puede hacer esto fácilmente desde Customize ToolBox (Personalizar ToolBox) > Options page (página Opciones). Puede restaurar el contenido del ToolBox haciendo clic en el botón Reset ToolBox to Default (Re-Iniciar ToolBox predeterminado). Se muestra la pregunta "Do you want to maintain new categories and Toolbox items that were added by you or a third-party vendor?" (Desea mantener las nuevas categorías y los elementos de ToolBox que han sido añadidos por usted o terceros) Si hace clic en No, se restaura toda la tabla ToolBox a la configuración inicialmente predeterminada, eliminando toda la personalización que haya hecho el usuario, y haciendo una copia en la misma carpeta. (Los archivos de copias (backup) son acumulativos, por ejemplo, el primer backup creado se llama ToolboxBackup, el segundo es ToolboxBackup_1, el tercero es ToolboxBackup_2, etc)

Ahora puede personalizar su ToolBox al crear elementos de herramientas, categorías y filtros. Cuando haya terminado, distribuya la tabla de contenido del ToolBox y todas las bibliotecas de clases y archivos requeridos por sus desarrolladores. Si ha hecho muchas adiciones y ha eliminado mucho contenido, puede limpiar la tabla ToolBox antes de distribuirla a su equipo. Seleccione el botón Clean Up ToolBox (Limpiar el ToolBox) en la página Options (Opciones) para realizar un PACK a la tabla de contenido del ToolBox. Esto elimina permanentemente todos los artículos y reduce el tamaño de la tabla. Puede luego recuperar su contenido personal seleccionando la copia de resguardo de su tabla ToolBox en la página Options (Opciones)

Conjuntos de herramientas de terceros

Los conjuntos de herramientas de terceros se crean de la misma manera que un conjunto de herramientas de la empresa, excepto que tienen un requerimiento adicional de instalación, relacionado directamente con la tabla de contenidos del desarrollador. En lugar de que el desarrollador seleccione, desde el conjunto de herramientas, entre las tablas de contenido del ToolBox, debe estar disponible desde el ToolBox del desarrollador con el contenido personalizado. Esto también puede ser un requerimiento para las herramientas de la empresa. Incluye adicionar y posiblemente, actualizar los registros en la tabla de datos ToolBox.

Crear conjuntos de herramientas

Al crear una herramienta, categoría y elementos de filtro en el ToolBox, los registros se añaden a la tabla de contenido del ToolBox. De forma predeterminada, los ID únicos para estos elementos toman a forma de User.Sys(2015). La función SYS(2015) de Visual FoxPro devuelve un nombre de 10 caracteres único. Si agrega un elemento al ToolBox, el ID único es similar a User._0VC0UV6D2. Esto es importante cuando se crean conjuntos de herramientas de terceros. Después que ha finalizado la creación de su conjunto de herramientas, necesita renombrar el elemento para que sea único en su compañía o producto, por ejemplo, CompanyName.Sys(2015). De esta forma, puede crear la instalación y actualizar los scripts que afecten sólo a estos elementos.

Para crear un conjunto de herramientas de terceros desde el scratch, primero, restablezca la tabla de contenido del ToolBox haciendo clic en el botón Reset ToolBox to Default (Re-Iniciar el ToolBox predeterminado) en Customize ToolBox > Options page. Cuando pregunte Mantain user-added ítems (¿mantener los elementos añadidos por el usuario?) haga clic en No. Esto guardará su tabla de contenidos y eliminará toda la personalización. Ahora, agregue una categoría al ToolBox. Puede hacerlo directamente desde el menú contextual del ToolBox, o seleccionando una categoría en el árbol del formulario Customize (Personalizar) ToolBox y luego, seleccione el botón Add Category (Agregar categoría) en la barra de herramientas de categorías. Para este ejemplo, cree una categoría general llamada "Cool Tools."

Ahora, agregue una biblioteca de clases seleccionando el botón Add Item (Agregar elemento) y seleccionando Class (Clase) en el cuadro de diálogo Add Item y luego elija la biblioteca de clases. Suponga que tiene una biblioteca de clases llamada CoolTools.vcx en la carpeta de Visual FoxPro llamada CoolTools\ que contiene tres clases: CoolBaseControl, CoolControl, y CoolForm. Después que seleccione esta biblioteca de clase, los elementos de la herramienta se muestran en la grid (cuadrícula) y todos se muestran seleccionados de forma predeterminada. Los desarrolladores no deben utilizar CoolBaseControl directamente porque es una clase abstracta, entonces necesita limpiar ese elemento en el grid (Figura 2). Puede además, modificar los nombres de las herramientas directamente en el grid. Si va a distribuir un archivo Help (Ayuda) para sus herramientas, este archivo puede introducirse en la ficha propiedades del elemento haciendo clic en el botón Item Propierties (Propiedades del elemento) en la barra de herramientas de elemento.


Figura 2. El ToolBox puede ser configurado para mostrar sólo las clases que desee mostrar.

Ahora, vea los registros que fueron creados en la tabla contenido. Cierre el ToolBox y abra la tabla ToolBox:

USE HOME(7)+"Toolbox" EXCLUSIVE
GO BOTTOM
BROWSE

Esto asume que su tabla ToolBox está instalada en la localización predeterminada. Verá un registro para la categoría que ha agregado y un registro para cada elemento en la biblioteca de clases, En este caso, hay sólo 3 clases, una de las que está inactiva. Así que verá algo similar a la Tabla 1.

UniqueIDShowtypeToolTypeIDParentIDToolNameInactive
user._0VK0ZMPDLCCATEGORY.GENERA Cool Tools.F.
user._0VK0ZQV7HTCLASSuser._0VK0ZMPDLcoolbasecontrol (COOLTOOLS) .T.
user._0VK0ZQV8VTCLASSuser._0VK0ZMPDLCool Control.F.
user._0VK0ZQVAJTCLASSuser._0VK0ZMPDLCool Form.F.

Tabla 1. Tabla ToolBox para Cool Tools.

La estructura de la tabla ToolBox se explicará en detalles en la siguiente sección; pero por ahora, mire los campos UniqueID, ToolTypeID, ShowType y ParentID. Los campos ShowType y ToolTypeID indican qué tipo de elemento del ToolBox será mostrado. Observe además, que el campo ParentID en el elemento herramienta está establecido con la categoría UniqueID. Estos cuatro registros constituyen los datos para su conjunto de herramientas. Antes de que pueda comenzar a escribir el script de instalación, re-nombre los UniqueIDs para incluir el nombre de la compañía. Esto es beneficioso si el conjunto de herramientas será redistribuido por una actualización. Puede escribir el código para hacer esto automáticamente. Sin embargo, para este ejemplo, es más sencillo hacerlo manualmente desde la ventana Browse (examinar). Los registros del conjunto de herramientas se verán de esta forma ahora:

UniqueIDShowtypeToolTypeIDParentIDToolNameInactive
MASSI.COOLCATCCATEGORY.GENERAL Cool Tools.F.
MASSI.COOLBASETCLASSMASSI.COOLCATcoolbasecontrol (COOLTOOLS) .T.
MASSI.COOLCTRLTCLASSMASSI.COOLCATCool Control.F.
MASSI.COOLFORMTCLASSMASSI.COOLCATCool Form.F.

Tabla 2. La tabla Toolbox una vez que ha renombrado los UniqueIDs.

El siguiente paso es tomar estos registros y colocarlos en una tabla personal para poderla incluir en el paquete de instalación. Para este ejemplo, cree una tabla llamada CoolToolBox.dbf y agregue sólo estos tres registros en la tabla.

CD HOME()+"CoolTools"
USE HOME(7)+"toolbox.dbf" IN 0 ALIAS Toolbox
SELECT Toolbox
COPY TO CoolToolbox FOR LEFT(uniqueid,6) = "MASSI." AND NOT DELETED()

Crear scripts de instalación

Ahora que tiene los registros de su conjunto de herramientas adecuadamente colocados en su tabla, está listo para escribir un script de instalación que agregue estos registros a la tabla de contenido del ToolBox del desarrollador y copiar la biblioteca de clases CoolTools en la carpeta adecuada. Este ejemplo instala el conjunto de herramientas, sólo si no existe ya en el ToolBox. Típicamente, se controla la actualización del conjunto de herramientas y se crea nuevos conjuntos. Sin embargo, esto sólo implica la manipulación estándar de tablas de Visual FoxPro de la tabla de contenidos del ToolBox.

Cree un programa llamado Setup.prg y colóquelo en la misma carpeta que el conjunto de herramientas y archivos de bibliotecas de clases – en este caso \Microsoft Visual FoxPro 8\CoolTools\. El código es muy básico y no tendrá interfaz de usuario; pero podrá crear fácilmente un setup (instalador) que será un formulario en lugar de un programa. El truco de este código setup está en que utiliza la variable global _oToolBox para tomar la ruta de la tabla de contenidos ToolBox y cierra el ToolBox antes de que comience la instalación. Luego, se copia la biblioteca de clases a la carpeta actual a la carpeta destino, y sus registros de conjunto de herramientas se agregan a la tabla de contenido del ToolBox. Existen obviamente, muchas vías para escribir su propio scripts de setup; pero este código hace un buen trabajo para este ejemplo.

LOCAL lQuit, cToolboxTable, cSourceFolder, ;
   cTargetFolder, oExc, cSetDeleted, nPrevArea
lQuit = .F. 
cSourceFolder = ADDBS(JUSTPATH(SYS(16)))
cTargetFolder = HOME()+"CoolTools\"
cSetDeleted = SET("Deleted")   
nPrevArea = SELECT()
SET DELETED ON
*-- Obtiene la ruta de la tabla de contenidos del Toolbox, 
*-- luego, cierra el Toolbox.
TRY
   IF VARTYPE(_oToolbox)<>"O"
      DO (_TOOLBOX) 
   ENDIF
   cToolboxTable = _oToolbox.ToolboxTable
   _oToolbox.Release
CATCH TO oExc
   MESSAGEBOX(oExc.Message)
   lQuit = .T.
ENDTRY   
IF lQuit
   RETURN
ENDIF   
TRY
*-- Abre la tabla de contenidos del Toolbox del usuario y revisa si  
*-- ya existen sus herramientas en ella
   USE (cToolboxTable) IN 0 ALIAS ToolboxTable
   SELECT ToolboxTable
   LOCATE FOR LEFT(UniqueID,10)=="MASSI.COOL"   
*-- Si no se ha encontrado su conjunto de herramientas, 
*-- crea una carpeta para guardar la biblioteca de clases,
*-- copia la biblioteca de clases, y agrega los registros de este conjunto de 
*-- herramientas en la tabla de contenidos del ToolBox.
   IF NOT FOUND()
      TRY 
         MD (cTargetFolder)
      CATCH   
      ENDTRY         
      COPY FILE cSourceFolder+"CoolTools.vc*" TO cTargetFolder+"CoolTools.vc*"
      APPEND FROM (cSourceFolder+"CoolToolbox.DBF")            
   ENDIF         
CATCH TO oExc
   MESSAGEBOX(oExc.Message)
   lQuit = .T.
FINALLY
   IF USED("ToolboxTable")
      USE IN ToolboxTable
   ENDIF
ENDTRY   
IF lQuit
   RETURN
ENDIF   
*-- Re-abre el Toolbox que muestra la herramienta instalada.
DO (_TOOLBOX) WITH "MASSI.COOLCAT"
MESSAGEBOX("Sus Cool Tools han sido instaladas.")
SET DELETED &cSetDeleted 
SELECT (nPrevArea)

Ahora su nuevo conjunto de herramientas Cool Tools está listo para su distribución. Los archivos que necesita distribuir están en la carpeta Microsoft Visual FoxPro 8\CoolTools y se listan en la Tabla 3.

Nombre del campoDescripción
CoolToolbox.dbf
CoolToolbox.fpt
Estos archivos contienen los datos del conjunto de herramientas que serán cargados en el ToolBox.
CoolTools.vcx
CoolTools.vct
Estos archivos contienen la clase Cool que tienen los desarrolladores actualmente para su utilización.
Setup.prgEste es el programa de instalación.

Tabla 3. Los archivos necesarios para distribuir el conjunto de herramientas Cool Tools.

Empaquetar y distribuir conjuntos de herramientas

Hay muchas vías para crear su paquete de instalación, desde la vía de un simple .Zip hasta un paquete instalador completo (Microsoft Installer - MSI). Sin embargo, hay una forma aun mejor para distribuir e instalar este conjunto de herramientas de terceros al crear un panel de tareas en el Administrador del panel de tareas. El Administrador del panel de tareas, es otra nueva característica del IDE de Visual FoxPro 8.0. Se utiliza para crear paneles de tareas que el usuario pueda instalar. Después que el usuario instale el panel, puede proporcionar un enlace que llame primero al código de setup para su conjunto de herramientas. Al crear un panel de tareas, puede además, proporcionar contenido dinámico para comunicar cualquier actualización, ayuda u otra información que se relacione con el conjunto de herramientas Cool Tools. Los paneles pueden consistir de XML/XSLT, HTML, mostrar páginas Web enteras en Internet, llamar a Servicios Web, o contener controles de Visual FoxPro. La mejor parte es, que el Administrador del Panel de tareas empaqueta automáticamente todos los archivos dependientes en un solo archivo, para su distribución.

Para este ejemplo puede crear un panel HTML que traiga contenido dinámico desde un archivo XML en su PC local. En realidad, el contenido del panel debe venir de un Servicio Web de su compañía, una Intranet o Internet. Además de HTML, XML, y XSLT, los paneles de tareas pueden ejecutar también código de Visual FoxPro enriquecido desde una biblioteca de clases o archivo de programa. Si no se ha familiarizado con los lenguajes mark-up (de etiquetas), puede crear fácilmente paneles con código escrito en Visual FoxPro.

Crear un panel de tareas

Primero, abra el Administrador del panel de tareas, haga clic en el botón Options (Opciones) para abrir el cuadro de diálogo del panel de tareas Opciones. En el árbol de la izquierda, seleccione Task Pane Manager (Administrador de Panel de tareas) – Customize (Personalizar) y luego haga clic en el botón Customize Panes (Personalizar paneles). Esto abre el formulario Panel de personalización. Haga clic en el botón New (Nuevo Alt - N) para crear un nuevo panel. Se le pregunta por vendor name (un nombre de suministrador) y un unique ID (ID único). Debe seguir la misma convención para el nombre que fue descrita anteriormente al crear un conjunto de herramientas. En la caja del nombre, escriba Cool Tools, y seleccione HTML como el Pane Type (Tipo de panel) (Figura 3).


Figura 3. Establezca un panel de tareas HTML especificando su nombre de suministrador e ID único.

Se ha creado un nodo Cool Tools en el árbol del panel de contenido, a la derecha, y se muestra una ficha General. Este nodo es referido al contenido de la raíz. Puede seleccionar una imagen para mostrar en el Administrador del panel de tareas haciendo clic en el botón Select Image (Figura 4), en caso contrario, se muestra una imagen predeterminada.


Figura 4 Las secciones de contenido, que se crean, se muestran en el árbol del panel de contenido en el formulario Panel de personalización.

Añadir un panel de contenido

Haga clic en el botón Add (Agregar Alt+D) para añadir una sub-sección de contenido. De forma predeterminada, crea una sección llamada New Content (Contenido nuevo). En la ficha General, escriba el nombre Install. Esta sección, será un vínculo estático que ejecute un código de manipulador que llame al script de instalación (Setup.prg). Abra la ficha Data (Datos), y seleccione Static Text para Source (Origen), y escriba el siguiente HTML:

<a href="vfps:runinstaller" class="button">Install Tool Set</a>

La sintaxis especial href vfps: llama al código del manipulador, pasando la acción runinstaller. Abra la ficha Handler Code (Código del manipulador) y entre el siguiente código de Visual FoxPro:

LPARAMETERS cAction, oParameters, oBrowser, oContent
TRY
   DO CASE
   CASE cAction == "runinstaller"
      DO (oContent.CacheDir+"setup.prg")
   ENDCASE
ENDTRY   

La propiedad CacheDir en el objeto Content devuelve la ruta completa del directorio donde su panel de tareas está instalado. Aquí es donde los archivos del conjunto de herramientas serán instalados (esto lo veremos luego). Cuando hace clic en el enlace Tool Set en el panel de tareas se ejecuta el código del Setup.prg

Luego, cree la sección de contenido dinámico. Si no desea publicar el contenido dinámico en su panel de tareas, puede saltarse la próxima sección.

Agregar panel de contenido dinámico

Para crear una sub-sección de contenido dinámico, haga clic en el botón Add (Agregar Alt+D) y escriba What’s new en el cuadro de texto Name. Esta sub-sección de contenido muestra los datos desde un archivo XML. Entonces, esta sección se mostrará al inicio, haga clic en las flechas mover arriba localizada sobre el árbol del panel de contenido. Luego abra la ficha Data (Datos), y seleccione URL para Source y escriba lo siguiente en el cuadro de texto:

file:///c:/coolinfo.xml

En realidad, esto debe ser una dirección http: para un archivo localizado en Internet. Sin embargo, para este ejemplo, vendrá de un archivo local. Tenga en mente, sin embargo, que este archivo no se distribuye con el panel de tareas, así que especificando un archivo local aquí, no trabajará en otro PC. Sin embargo, esta técnica es muy buena para hacer comprobaciones.

Ahora cree el archivo CoolInfo.xml, y colóquelo en su disco C. El esquema del XML es totalmente decisión suya. En este momento especificará un estilo de hoja, así que tiene total flexibilidad en la forma en que estructure su dato. De hecho, existen muchas vías por las que el panel de tareas puede ser creado que el archivo contenido no sea un XML. Por ejemplo, el contenido XML es muy simple.

<?xml version='1.0' encoding='windows-1252' standalone='no'?>
<VFPData>
   <content>
      <name>Página de inicio de Cool Tools</name>
            <link>
               <![CDATA[vfps:linkto?url=http://www.massitools.com/default.htm]]>
            </link>
      <desc>¡ Haga un viaje por los productos Cool Tool !</desc>
   </content>
   <content>
      <name>Referencias de Cool Tools </name>
         <link>
               <![CDATA[vfps:linkto?url=http://www.massitools.com/help.htm]]>
            </link>
      <desc>Acceso al fichero de ayuda de Cool Tools</desc>
   </content>
   <content>
      <name>Noticias de Cool Tools</name>
         <link>
              <![CDATA[vfps:linkto?url=http://www.massitools.com/news.htm]]>
            </link>
      <desc>Reciba la información más actualizada de Cool Tools.</desc>
   </content>
</VFPData>

Existen tres nodos de contenido definidos en el archivo XML que contienen una breve descripción y las URLs de las páginas Web de Internet (aunque las URLs en este ejemplo no existen en realidad). Ahora especifique la transformación de este dato. Haga clic en la ficha Transform Data (Transformar datos), seleccione XSL como Type (Tipo), Static Text (Texto estático) como Source (Fuente) y entre la siguiente transformación:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="VFPData">   
   <table border="0" width="100%" cellpadding="2" cellspacing="0" >
      <xsl:apply-templates />
   </table>
</xsl:template>
<xsl:template match="content" name="contents">
   <xsl:variable name="linkvar" select="link"/>
   <tr>
      <td>               
      <a href="{$linkvar}"><xsl:value-of select="name"/></a>
      </td>
   </tr>   
   <tr>
      <td class="description"> 
      <xsl:text>-    </xsl:text><xsl:value-of select="desc"/> 
   </td>
   </tr>   
</xsl:template>
</xsl:stylesheet>

Esto transforma su XML en una tabla HTML que será utilizada en la transformación final del contenido raíz. Ahora el XML contenido en el archivo CoolInfo.xml es descargado desde la localización específica y guardado de acuerdo a los parámetros del Administrador del panel de tareas. Si la conexión no puede ser establecida después, se utiliza la copia caché. Si el URL no puede ser encontrado la primera vez, abra la página, puede especificar el dato XML predeterminado para mostrar en la ficha Default Data (Dato predeterminado)

Fusionar sub-secciones de contenido

Ahora que ha creado las sub-secciones de contenido, necesita colocarlas junto a la raíz de la sección de contenido, que es la información mostrada en el panel de tareas. Seleccione la raíz del contenido de Cool Tools desde el árbol del Panel de contenido. Haga clic en la ficha Data (Datos) y seleccione Static Text como Source (Fuente). Entre lo siguiente en el cuadro de edición:

<VFPData>
   <!-- XMLCONTENT -->
</VFPData>

El comentario XML especifica que el XML interno contenido será el dato de origen para este panel. Cuando el Administrador del panel de tareas genere este panel, reemplaza el comentario <!-- XMLCONTENT --> con el dato contenido desde todas las sub-secciones antes de que se ejecute su propia transformación final. Especifique la transformación final en el documento HTML en la ficha Transform Data (Transformación de datos). En esta ficha, seleccione XSL como el Type (Tipo) y Static Text como Source (Origen). Luego escriba la siguiente transformación XSL.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" /> 
<xsl:template match="VFPData">
<html>
<head>
<title>Cool Tools</title>
<style>
   BODY {
      font-family:verdana;
      font-size:9pt;
      margin-top:0px;
      margin-left:2px;
      margin-right:2px;
      margin-bottom:2px;
   }  
   H3   {margin-bottom:0px; margin-top:0px; font-weight: bold}     
   A:link {color: #0033CC;text-decoration: none}
   A:visited {text-decoration: none}
   A:hover {color: #CC0000;text-decoration: underline}
   A    {text-decoration: underline; color: #0066FF}
   TD    {font-size:9pt}
   TD.TableTitle { padding:2px;background-color:#0000FF;color:#FFFFFF; }
   H3     {margin-bottom:0px;margin-top:0px;   font-weight: bold}
   TD.Description   {font-size:8pt;   }
   A.button {
      background:#E0DFE3;
      font-weight:bold;
      padding:2px;
      margin-left:0px;
      margin-right:2px;
      border-top:1px solid #E5E4E8;
      border-left:1px solid #E5E4E8;
      border-bottom:1px solid #6699CC;
      border-right:1px solid #6699CC;   
      color: #0033CC
      font-size:10pt;
      line-height:2em;
      text-align:center;
   }
</style>
</head>
<body>
   <table cellSpacing="0" cellPadding="0" width="100%">
     <tr>
       <td class="TableTitle" width="100%" nowrap="nowrap">
       <h3>Cool Tools</h3>
       </td>
     </tr>
     <tr>
       <td></td>
     </tr>
       <xsl:for-each select="PaneContent">
       <tr>
         <td height="10"></td>
       </tr>
       <tr>
         <td >
           <xsl:value-of select="HTMLText" disable-output-escaping="yes"/>
         </td>
       </tr>
       </xsl:for-each>
   </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet

Este estilo de hoja convierte un XML en un documento HTML final, que es mostrado en el panel. Esto primero especifica los estilos para formatear el HTML en estilo de cascada estándar hojas sintaxis. El código importante, sin embargo, está localizado entre las etiquetas <body></body>. Esto especifica para cada sub-sección de contenido del panel, la salida del dato contenido en el nodo <HTML Text>. Como se mencionó previamente, el Administrador del panel de tareas crea un XML internamente que contiene todas las sub-secciones de contenido del dato transformado. Tiene un nodo <PaneContent> para cada sub-sección que cree que contenga información en la sub-sección de contenido. Es en el nodo <HTMLText> que residen los datos transformados desde la sub-sección. Por tanto en el XSLT precedente, todo lo que hace realmente es sacar el contenido en todas las sub-secciones y formatearlo en un documento HTML bien-formado. Puede echar un vistazo a alguno de los paneles de tareas existentes, tales como Start (Inicio) y Servicios Web XML, para ver más ejemplos de esta técnica.

Al hacer Clic en el botón Apply (Aplicar) en el formulario Panel de personalización, el Administrador del panel de tareas muestra el panel Cool Tools (Figura 5)


Figura 5. Puede crear fácilmente un panel de tareas para distribuir su conjunto de herramientas y mostrar contenido dinámico de Internet.

Verá el contenido XML mostrado en la parte superior de la sección del panel. Si modifica el archivo CoolInfo.xml y hace clic en el botón Refresh en el Administrador del panel de tareas, se actualiza la sección de contenido. Esta es una de las vías por las que puede fácilmente colocar contenido dinámico en los escritorios de los usuarios.

Empaquetar archivos dependientes

Ahora que ya ha establecido el panel de tareas, es el momento de añadir el script del setup y los archivos del conjunto de herramientas en el paquete del panel de tareas. Seleccione View Files (Ver archivos) en la parte superior derecha del formulario de personalización. Esto cambia lo mostrado, de forma que pueda administrar los archivos en su paquete de distribución. Haga clic en el botón Add (Agregar Alt+A) y seleccione Setup.prg, CoolTools.vcx, y CoolToolbox.dbf. (Seleccionando ambos archivos VCX y DBF incluirán los archivos VCT y FPT automáticamente). Luego haga clic en Apply (Aplicar) en la parte inferior del formulario para guardar los cambios. El Administrador del panel de tareas puede ahora empaquetar estos archivos en un archivo de distribución XML. Será instalado en la caché del panel en los PC de los usuarios cuando ellos instalen el panel de tareas. Recuerde, cuando se ejecuta el Setup.prg, el conjunto de herramientas es instalado y la biblioteca CoolTools es copiada a una carpeta debajo del directorio raíz de Visual FoxPro.

Crear, distribuir e instalar el paquete

Para crear el paquete de distribución del panel de tareas, seleccione el panel de tareas Cool Tools en el formulario Panel de personalización, y haga clic en Publish (Publicar Alt+P). Se pregunta por el tipo de paquete a crear. Seleccione Publish all content in pane (Publicar todo el contenido del panel), asegúrese de que esté seleccionada la casilla de verificación Publish file associates with the pane (Publique todos los archivos asociados con el panel), y luego haga clic en OK. Seleccione la carpeta, escriba un nombre para el archivo paquete XML (el nombre predeterminado es cool_tools.xml) y luego haga clic en Save (Guardar). Este proceso empaqueta toda la información del panel y cualquier archivo que haya sido agregado al panel en la sección Files (Archivos). Todo lo que necesita distribuir es un único archivo XML. Cuando el panel está instalado, el panel de tareas desempaqueta todos los archivos y los coloca en el panel caché.

Puede comprobar la instalación de su tarea y el conjunto de herramientas eliminando el panel de tareas Cool Tools. Seleccione el panel, haga clic en Delete (Eliminar) y luego, haga clic en Save (Guardar) en el formulario del panel de personalización. En el cuadro de diálogo Options (Opciones) del Administrador del panel de tareas seleccione Task Pane Manager (Administrador del panel de tareas) > Customize (Personalizar) desde el árbol y haga clic en el botón Install Pane (Instalar panel). Navegue al panel cool_tools.xml y haga clic en OK. El panel Cool Tools aparece al final de la lista. Para verificar adecuadamente la instalación del conjunto de herramientas, primero asegúrese de que ha eliminado la categoría Cool Tools de su ToolBox, si existiera allí. Luego, renombre la carpeta \CoolTools que se encuentra en el directorio raíz. El programa setup crea esta carpeta y copia la biblioteca de clases CoolTools del caché del panel. Haga clic en el vínculo Install Tool Set para ejecutar la instalación y luego mire el ToolBox para ver aparecer la categoría Cool Tools.

Al instalar paquetes de paneles XML, que descarga de Internet, asegúrese de que puede confiar plenamente en su suministrador. Luego, que es instalado un panel de tareas, puede ejecutar código de Visual FoxPro en su contexto seguro – por eso; ¡tenga cuidado! Sin embargo, si usted es un suministrador de herramientas, tendrá ya una firma digital para sus descargas. Distribuir paneles dentro de la comunidad de desarrolladores no es más peligroso que intercambiar cualquier otro código – sólo asegúrese de quien se lo envía.

Nota de la traductora. Si desea conocer todos los detalles del Administrador del Panel de tareas, le recomiendo el artículo Inside the Visual FoxPro 8.0 Task Pane Manager, escrito por Beth Massi, que se encuentra enhttp://msdn.microsoft.com/library/en-us/dnfoxgen8/html/vfp8_taskpanemgr.asp

o su versión en idioma español El Administrador de panel de tareas de Visual FoxPro 8.0 visto por dentro, que se encuentra enhttp://www.portalfox.com/article.php?sid=1007

Ahora que comprende cómo crear un conjunto de herramientas sencillo y cómo distribuirlo, a través de un panel de tareas dinámico, debe conocer sobre el comportamiento de los elementos del ToolBox.

Puede crear un comportamiento personalizado llamado add-in sin que conozca mucho de la arquitectura del ToolBox. Sin embargo, para crear un add-in realmente útil, necesita estar consciente de la arquitectura, tablas de datos y elementos de clases antes, para que pueda beneficiarse de todo el poder que proporciona el ToolBox.

Arquitectura del ToolBox

La aplicación Toolbox reside en el directorio raíz de Visual FoxPro (HOME()) y se llama Toolbox.app. Como ha visto anteriormente, el contenido específico para cada usuario se guarda en el archivo ToolBox.dbf que ToolBox lee para cargar las herramientas, categorías y filtros que el usuario ha creado. La localización del contenido del ToolBox es guardado en el archivo de recursos FoxUser y lo predetermina en la carpeta HOME(7).

La aplicación ToolBox también lee la tabla llamada Tooltype que guarda información sobre las categorías y tipos de herramientas admitidos por ToolBox. Esta tabla controla cómo la aplicación ToolBox va a cargar las clases de herramientas desde la biblioteca de clases _toolbox.vcx. Esta biblioteca de clases contiene la implementación de clases para todas los tipos de categorías y herramientas. La biblioteca de clases ToolBox.vcx y la tabla Tooltype se guardan en una carpeta \ToolBox en la raíz de Visual FoxPro. Tener este metadato y biblioteca de clases guardados fuera de la aplicación ToolBox.app permite que para la creación y distribución de una nueva categoría y herramienta, el desarrollador puede necesitar en el futuro. Esto significa que el ToolBox puede desarrollarse tanto como la propia comunidad de desarrolladores se lo permita.

El motor del ToolBox es responsable de cargar el formulario ToolBox, leer las tablas de datos y cargar las clases de herramientas correctas en tiempo de ejecución. Puede querer cambiar la implementación de un elemento de clases de herramientas sin tener que recompilar ToolBox.app. Cuando vea ejemplos de cómo crear nuevas herramientas y categorías, va a comprender realmente lo valiosa que llega a ser esta característica.

La variable del sistema _TOOLBOX especifica la ruta y nombre de archivo para el ToolBox de Visual FoxPro. De forma predeterminada, esta ruta es el directorio raíz de Visual FoxPro y el nombre es ToolBox.app. Sin embargo, puede especificar una ruta o nombre de archivo para _TOOLBOX en la ficha Archivos en el cuadro de diálogo Opciones de Visual FoxPro. Puede pasar un parámetro de cadena que es el ID de la categoría a la aplicación ToolBox que especifique la categoría a mostrar al abrir.

DO (_TOOLBOX) WITH "MASSI.COOLCAT"

Adicionalmente, cuando el formulario ToolBox se abre en el IDE de Visual FoxPro, la variable global _oToolbox está expuesta. Como ha visto ya, esta variable puede ser manipulada al instalar conjuntos de herramientas de tal forma que el ToolBox pueda ser cerrado mientras se ejecuta el script de instalación. Puede establecer o crear tablas de contenido de ToolBox mediante programación utilizando la propiedad oToolbox.ToolboxTable. Otras propiedades útiles de lectura/escritura son _oToolbox.FilterName y _oToolbox.Category, las que pueden tener un ID único o el nombre del filtro o categoría que quiere aplicar al ToolBox.

Todo el código fuente para la aplicación ToolBox está incluido en el Xsource.zip contenido en la carpeta \Tools\XSource\ bajo el directorio raíz de Visual FoxPro.

Tablas de contenido del ToolBox

Como se ha mencionado previamente, la tabla de contenidos del ToolBox se guarda de forma predeterminada en su carpeta \Documents and Settings\UserName\Application Data\Microsoft\Visual FoxPro 8\Toolbox\ y se llama ToolBox.dbf. El nombre y localización puede ser modificado en Customize Toolbox (Personalizar ToolBox) > Options (Opciones). Esta tabla guarda todos los elementos, categorías, filtros y add-in para cada usuario. Es importante familiarizarse con la estructura de esta tabla, si desea crear comportamientos personalizados o definir conjuntos de herramientas personalizados. La tabla 4 describe la estructura y la descripción para cada campo de la tabla de contenido del ToolBox.

Tipo

Descripción

C(25), Indexado

Un ID único para cada artículo creado. Debe tener el formato de  NombreDeCompañia.IDUnico
Por ejemplo: microsoft.textscraps

C(1), Indexado

Indica el tipo de elemento del Toolbox:

'C' = category (categoría)
'F' = favorites category (categoría favorita)
'S' = filter set (conjunto de filtro)
'T' = tool item (elemento de herramienta)
'I' = filter item (elemento de filtro)
'A' = add-in behaviour (comportamiento add-in)
'M' = pasa el menu contextual como el segundo parámetro que puede ser utilizado para crear un menú en lugar de invocar directamente un comportamiento add-in.

C(25), Indexado

Referencia el tipo de herramienta como está definida en ToolType.dbf, y es copiada directamente desde el campo ToolType.UniqueID al ser creado el registro.

M

Nombre amistoso para el tipo de herramienta. Es copiado directamente desde el campo ToolType.ToolType cuando se crea el registro.

C(25)

Para los elementos del menú y las herramientas (ShowType="T" OR "I"), referencia el Toolbox.UniqueID de la categoría padre o conjunto de filtros a los que pertenece. Para add-in (ShowType="A"), referencia el Toolbox.UniqueID de la opción del menú padre a la que pertenece el add-in.

C(100)

Nombre amistoso para la herramienta, categoría o conjunto de filtros.

M

Imagen a mostrar para el elemento de la herramienta.

C(10)

Designa el tipo de clase. Se corresponde a la propiedad ClassType en el elemento de clases

M

Designa la biblioteca de clases para las herramientas de clase (por ejemplo el nombre del archivo VCX o PRG en el cual está definida la clase de herramienta).

M

Nombre de la clase del elemento del Toolbox. Si no se especifica, se determina de forma predeterminada a partir del campo ShowType, por ejemplo, _classtool.

M

El elemento de biblioteca de clases Toolbox donde está contenida la clase.Si no se especifica, el predeterminado es _toolbox.vcx.

M

Texto que es mostrado en ToolTips y en la sección de texto Help del Toolbox.

M

Archivo de Ayuda a utilizar cuando se presiona F1 o se selecciona Help desde el menú contextual.

N(10,0)

ID de ayuda contextual para utilizar cuando se presiona F1 o se selecciona Help desde el menú contextual.

M

Guarda el dato específico para el elemento. Es la información del cuadro de diálogo propiedades del elemento y categoría. Por ejemplo, para un elemento de clases puede ser específicamente la clase base, nombre del objeto, y propiedades adicionales en este formato:

<baseclass>Editbox</baseclass>
<objectname>Editbox</objectname>
<properties></properties>

I

Indica el orden en que el elemento aparece en este contenedor.

L

Si el registro es una categoría o una categoría favorita, establezca en TRUE para impedir que se agreguen nuevos elementos.

L

Establezca a TRUE (Verdadero) para evitar eliminar este elemento de herramienta o categoría.

L

Establezca a TRUE (Verdadero) para evitar renombrar este elemento o categoría.

L

Establezca a TRUE para marcar el elemento como inactivo para evitar que aparezca en el Toolbox.

M

Definido por el usuario

T

Fecha / hora de última modificación

Nombre del campo

UniqueID

ShowType

ToolTypeID

ToolType

ParentID

ToolName

ImageFile

ClassType

SetID

ClassName

ClassLib

ToolTip

HelpFile

HelpID

ToolData

DisplayOrd

LockAdd

LockDelete

LockRename

Inactive

User

Modified

Tabla 4. Campos en la tabla de contenido del ToolBox.

Tabla ToolType

Además de la tabla de contenidos del ToolBox, existe una tabla ToolType que se localiza en la carpeta \Toolbox\ de la aplicación ToolBox (\Program Files\Microsoft Visual FoxPro 8\Toolbox\). Si esta tabla no puede ser encontrada cuando comienza el ToolBox, se utiliza una versión incluida que se compila dentro de la aplicación ToolBox.app. Las tablas ToolType guardan información sobre las categorías y tipos de herramientas que admite ToolBox. Cada fila representa un tipo de categoría soportada o elemento de herramienta. Cuando el elemento de herramienta y categorías se crean en el ToolBox, la información del tipo de elemento que se crea se copia desde la fila apropiada en esta tabla en la tabla de contenidos del ToolBox. Si desea soportar un nuevo elemento de ToolBox, y/o una categoría, agregue filas en esta tabla.

Tipo

Descripción

C(25)

Un ID por cada registro creado. Las entradas que se agreguen deben tener el formato NombreDeCompañia.IDUnico.

C(1)

Indica el tipo de elemento del Toolbox:

'C' = category (categoría)
'T' = tool item (elemento de herramienta)

C(50)

Nombre amistoso para el tipo de herramienta.

M

Nombre de la clase del elemento del Toolbox. Si no se especifica, se determina de forma predeterminada a partir del campo ShowType, por ejemplo, _classtool.

M

El elemento de biblioteca de clases Toolbox donde está contenida la clase. Si no se especifica, el predeterminado es  _toolbox.vcx.

M

Lista de los tipos de archivos delimitada por comas, a los que se les aplica Tooltype. Se utiliza para determinar el tipo del elemento creado cuando arrastra un archivo desde el Explorador hasta el Toolbox.

M

Actualmente no está en uso. En el futuro, representará el ToolData predeterminado al crear un elemento de este tipo.

L

Establecer a TRUE para mostrar en un cuadro de lista los elementos de tipos disponibles al agregar un Nuevo elemento en el ToolBox.

L

Establecer a TRUE para mostrar el cuadro de diálogo propiedades después de crear un elemento/categoría de este tipo.

C(25)

Para tipos de categoría (ShowType = 'C'), se refiere a ToolType.UniqueID para el elemento predeterminado que debe contener esta categoría.

I

Indica el orden en que el elemento aparece en este contenedor.

M

Texto que es mostrado en ToolTips y en la sección de texto Help del Toolbox..

L

Establezca a TRUE para marcar el elemento como inactivo para evitar que aparezca en el Toolbox.

M

Definido por el usuario

T

Fecha / hora de última modificación

Nombre del campo

UniqueID

ShowType

ToolType

ClassName

ClassLib

FileType

DataValues

ShowNew

PropSheet

DefaultID

DisplayOrd

ToolTip

Inactive

User

Modified

Tabla 5. Campos de la tabla ToolType.

Biblioteca de clases ToolBox

La biblioteca de clases contiene la jerarquía de clases para todos los elementos de herramientas y categorías soportadas en el ToolBox (figura 6). De forma predeterminada, cada tipo de herramienta admitida contenida en la tabla ToolType se corresponde con clases en esta biblioteca. Herede de estas clases para sobrescribir comportamientos o admitir nuevos tipos. Puede además modificar esta biblioteca de clases directamente para cambiar el comportamiento de las clases admitidas. Si sólo desea agregar un nuevo menú contextual de comportamiento para un elemento, puede hacerlo a través de un add-in. Comprender las características generales de las clases en la biblioteca de clases, ayuda, aunque no es imprescindible, a la hora de crear sus propios add-in. Sin embargo, sí será necesario cuando cree su propia herramienta y tipos de categorías. En esta sección, echará un vistazo a algunos de los métodos y propiedades más importantes de esas clases. Se concentrará en los métodos comunes que típicamente sobrescribe para admitir sus propias herramientas.


Figura 6. La jerarquía de clases del elemento de clases del ToolBox.

La jerarquía de clases, de las clases del ToolBox, comienza con la clase _root. Todos los elementos de herramientas y categorías para esta clase. Aquí es donde son definidos los métodos comunes que son utilizados OnClick, OnDblClick, OnKeyPress, OnOleSetData, OnStartDrag, y OnCompleteDrag. Estos métodos proporcionan un control finamente granulado de los comportamientos clic y arrastrar y soltar de todas las categorías y herramientas del ToolBox. Las propiedades más importantes y los métodos de las clases del ToolBox se enumeran a continuación.

Propiedades y métodos comunes

ShowAsLink: Esta propiedad está establecida a .T. (verdadero) si el elemento necesita ser mostrado en estilo de hipervínculo cuando el ratón le pasa por arriba. Esto se aplica solamente a elementos que no son categorías. Por ejemplo, el archivo de herramientas tiene esta propiedad establecida a verdadero.

oEngine: Esta propiedad contiene una referencia al motor del ToolBox y es utilizado para llamar los métodos del motor (verá ejemplos de utilización de esta propiedad al crear add-in y un tipo dinámico de categoría).

OnDblClick(): Este método es llamado cuando se hace doble clic sobre el elemento con el ratón. También se ejecuta para un simple clic, si el doble clic no está seleccionado, para abrir el elemento del cuadro de diálogo Opciones.

OnClick(): Este método es llamado cuando se hace clic sobre el elemento con el ratón.

OnKeyPress(nKeyCode, nShiftAltCtrl): Este método es llamado cuando el objeto tiene el foco y se presiona una tecla.

OnRenderCategory(oToolCollection): Este método está disponible para las clases que heredan de la clase _category. Se ejecuta cuando se abre esta categoría, para llenarla con los elementos de herramientas. (Verá un ejemplo de utilización de este método cuando cree categorías dinámicas más adelante.)

CreateContextMenu(oContextMenu): Este método es llamado cuando es activado el menú contextual para un elemento. Es aquí donde son agregadas opciones del menú contextual. El parámetro oContextMenu es el objeto de menú que puede ser manipulado utilizando el método AddMenu, por ejemplo:

LPARAMETERS oContextMenu
LOCAL oMenuBar
oMenuBar = oContextMenu.Addmenu("Run", "oRef.RunItem()")
oMenuBar.Bold= .T.

El primer parámetro del método AddMenu del menú contextual es el encabezado de la opción de menú. El segundo parámetro es una cadena que contiene el código a ejecutar cuando el elemento de menú es seleccionado, en este caso oRef.RunItem(). La variable oRef evalúa en tiempo de ejecución la instancia del objeto herramienta cuando el usuario escoge la selección del menú. En este ejemplo, es llamado el método RunItem del objeto. Sin embargo, un asistente u otro programa externo pueden ser ejecutados también. El método AddMenu de la clase del menú contextual devuelve un objeto barra de menú para que puedan ser establecidas sus propiedades como se muestra en la tabla 6.

PropiedadTipoValor predeterminadoDescripción
CaptionString Encabezado a mostrar en la barra de menú.
ActionCodeString Código a evaluar y ejecutar cuando la barra de menú es seleccionada.
PictureString Nombre de la imagen a mostrar.
CheckedLogical.F.Indica si la barra de menú es seleccionada.
IsEnabledLogical.T.Indica si la barra de menú está disponible.
BoldLogical.F.Indica si la barra de menú tiene formato en negrita.

Tabla 6. Propiedades de un elemento Menu bar (barra de menú)

Estas propiedades pueden ser pasadas también al método AddMenu como parámetros en el orden mostrado.

oContextMenu.Addmenu("Run", "oRef.RunItem()", "Picture.bmp", .F., .T., .T.)

OnCreateDataValues(): Algunos elementos del ToolBox especifican información adicional en su hoja de propiedades. Por ejemplo, las herramientas basadas en archivos tienen una propiedad para el nombre del archivo. El método es llamado cuando el elemento es instanciado y llena una colección de propiedades para una instancia en particular. Esto se hace llamando al método AddDataValue que agrega una nueva propiedad en la colección oDataCollection. Esto añade opciones a la hoja de propiedades de los elementos:

LOCAL cName, xDefaultValue, cCaption, cToolTip, lReadOnly, ;
cClassName, cClassLibrary
cName         = "filename"
xDefaultValue    = ""
cCaption       = "File name"
cToolTip      = "Specify a file which this tool represents"
lReadOnly      = .F.
cClassName      = "cfoxfilename"
cClassLibrary   = ""
DODEFAULT()
THIS.AddDataValue(cName, xDefaultValue, cCaption, cTooltip, lReadOnly, ;
cClassName, cClassLibrary)
ParámetroTipoDescripción
cNameStringNombre de la opción.
xDefaultValueAny (cualquier tipo)Valor predeterminado.
cCaptionStringEncabezado a mostrar en la ficha propiedades.
cTooltipStringTexto ToolTip.
lReadOnlyLogicalIndica que el control es Sólo-Lectura.
cClassNameStringNombre de la clase del control utilizado para colectar este valor de la propiedad.
cClassLibraryStringBiblioteca de clases donde se define el control a mostrar. Si este parámetro no se especifica o está vacío, se predetermine igual a ToolboxCtrls.vcx que se compila dentro de la aplicación Toolbox.
<dl><dt>Tabla 7. Parámetros del método AddDataValue </dt></dl>

Los últimos dos parámetros de este método especifican el nombre de la clase y la localización de los controles para mostrarlos en la ficha de propiedades. Si una biblioteca de clases, no está especificada, se utiliza la ficha propiedades de la clase control contenida en la biblioteca de clases ToolboxCtrls.vcx compilada. Las clases comunes en esta biblioteca de clases se listan en la tabla 8.

Clase del control en la ficha propiedadesClase Base
cFoxCheckboxCheckbox
cFoxEditboxEditBox
cFoxSpinnerSpinner
cFoxTextBoxTextBox
cFoxDirectoryContainer – (Muestra el cuadro de diálogo GETDIR()
cFoxFileNameContainer – (Muestra el cuadro de diálogo GETFILE()

Tabla 8. Clases comunes en la biblioteca de clases. 

Adicionalmente el método GetDataValue devuelve el valor de la propiedad desde la colección y SetData Values establece un valor para una propiedad existente en la colección. Puede utilizar además el método EvalText para evaluar el valor de la propiedad. Si el valor de la propiedad está rodeado por paréntesis, EvalText devuelve la versión evaluada del valor; en caso contrario, trata el valor como un literal. Esto es útil si la propiedad contiene código script, funciones o variables.

cFileName = THIS.EvalText(NVL(THIS.GetDataValue("filename"), ''))

Métodos OLE Arrastrar y soltar

Las clases de herramientas están basadas en la clase Custom de Visual FoxPro y no heredan de Visual FoxPro el método arrastrar y pegar, que les son tan familiar al desarrollador. Sin embargo, las clases de herramienta son enviadas a los métodos OLE arrastrar y pegar llamados desde el botón ToolBox que las contienen. Por ejemplo, el método OLEStartDrag de la clase toolboxbutton llama al método OnStartDrag del elemento de herramienta de clase. Para más información sobre el OLE de arrastrar y pegar vea el resumen de OLE Arrastrar y pegar en la documentación de Visual FoxPro.

OnOleSetData(oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos): Este método establece el dato a arrastrar y pegar. Puede colocar el dato en el oDataObject en formato especificado con el método SetData.

#include "foxpro.h"
LPARAMETERS oDataObject, eFormat, oDropTarget, nMouseXPos, nMouseYPos
LOCAL cText
IF VARTYPE(eFormat) == 'N' AND eFormat == CF_TEXT AND ;
   VARTYPE(oDropTarget) <> 'O'
   cText = NVL(THIS.GetDataValue("filename"), '')
   oDataObject.SetData(cText, eFormat)
ENDIF

OnStartDrag(oDataObject, nEffect): Se llama cuando comienza la operación arrastrar.

OnCompleteDrag(nEffect, oDropTarget, nMouseXPos, nMouseYPos): Es llamado cuando el elemento ToolBox es soltado en su destino.

LPARAMETERS nEffect, oDropTarget, nMouseXPos, nMouseYPos
LOCAL lcSCXName = ""
THIS.DropOnContainer(oDropTarget, lcSCXName, nMouseXPos, nMouseYPos)
RETURN

DropOnContainer(oDropTarget, cSCXName, nXPos, nYPos): Herramienta que hereda de _baseclasstool que este método, el que es llamado desde el método OnCompleteDrag. El código que se ejecuta establece el dato adecuado a pasar al método. El objeto puede ser soltado en el área de trabajo de diseñadores y ventanas de edición.

Continua en La caja de herramientas (ToolBox) de Visual FoxPro 8.0 vista por dentro (Parte 2/2) ...



 Versión imprimible  
El ToolBox visto por dentro (Parte 1/2) | Entrar/Crear una cuenta | 0 Comentarios
Los comentarios son propiedad de sus respectivos autores.
No somos responsables de su contenido.



Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2010 PortalFox. Todos los derechos reservados.