26 de octubre de 2004

VFP 9.0. Mejoras en diseñador de formularios y clases

Autor: Drew Speedie
Traducido por: Ana María Bisbé York


Resumen

Esta sesión intenta documentar y demostrar todas las características de VFP 9.0 que mejoran, o en cualquier caso afectan, la forma en que se diseñan formularios y clases. Por tanto, el énfasis está hecho en el IDE de VFP, y el diseñador de clases y formularios en particular, pero tenemos otras características de VFP 9.0 que están directamente relacionadas con la productividad mientras creamos formularios y clases.

Mejoras en Ficha Propiedades (Properties)

El área donde VFP 9.0 tiene más cambios relativos al diseño de formularios y clases es sin dudas la ficha Propiedades, así que voy a comenzar por aquí. La Figura1 muestra una parte de la ficha Propiedades mejorada, donde lo primero que salta a la vista son los iconos que preceden las Propiedades, Eventos, y Métodos (PEM). Lo que no está mostrado en la Figura 1 es que el icono indica además la visibilidad de cada PEM. El icono para PEMs ocultos incluye un candado y el icono para PEMs protegidos, incluye una llave.


Figura 1: Ficha Propiedades - lo primero que se observa es el icono que identifica cada elemento

Estos iconos ya son familiares porque se han visto en la lista desplegable de miembros de IntelliSense, el cuadro desplegable para el método, del editor del método Snippet en VFP 8.0 y otros entornos de desarrollo orientados a objeto. Incluir los iconos lo hace más productivo ya que la clave visual identifica instantáneamente cada PEM por el tipo como se ven en la lista.

Fuente personalizada en la ficha Propiedades

Una vez que comienza a agregar propiedades personalizadas y establecer explícitamente PEMs, verá otras características que son bienvenidas. Para comenzar, la ficha Propiedades admite personalización de la fuente y los colores (quizás ha notado que la fuente en la figura 1 es Tahoma). Como se ve en la figura 2 hay además otras características nuevas, las iremos viendo por turnos comenzando con la personalización de la fuente.



Figura2: Colores, fuentes, favoritos, y más. Puede establecer los atributos de la fuente desde la ficha Propiedades y especificar los colores para varias categorías de PEMs en la lista. Existe una nueva ficha Favoritos (Favorities) y se preservan las mayúsculas y minúsculas para los PEMs.

El menú contextual para la ficha propiedades incluye una opción Fuente… (Font…), como se ve en la figura 2 donde la fuente para la ficha propiedades está establecida en Comic Sans MS. La opción del menú contextual Fuente sustituye a las antiguas opciones Fuente Pequeña, Fuente mediana, Fuente Grande. Los atributos de fuente seleccionados se aplican a la lista de PEMs, el panel opcional de descripción debajo de la lista y el objeto desplegable. Las fuentes Negrita y Cursiva han tenido siempre significados específicos (PEMs con valores asignados y PEMs de solo lectura), por tanto no le veo mucha utilidad el poder establecer fuentes Negrita o itálica. Pero el diálogo GETFONT() incluye la configuración de estilos por lo que lo puede establecer si desea. Si usted define fuente negrita y/o itálica, VFP es lo suficientemente inteligente como para utilizar atributos inversos para los PEMs con valores asignados /solo lectura: Si establece la letra en negrita, los PEMs con valores asignados en estilo no Negrita, si establece la fuente en itálica, los PEMs de solo lectura se muestran en estilo no itálica.

Mucho más útil es la posibilidad de establecer el nombre de la fuente y el tamaño. Para el trabajo diario es magnífico poder trabajar con la fuente favorita y para las presentaciones es invaluable poder establecer un mayor tamaño de fuente.

La configuración de fuente se guarda en su archivo de recursos FoxUser.DBF, en el registro donde Type="PREFW" e ID="PROPWIND".

Cuando sea liberado VFP 9.0, podría verse los siguientes cambios a la personalización de la fuente en la ventana Propiedades, sugeridos por los beta testers:
  • Una opción de menú contextual para Restablecer Fuente Predeterminada (Reset to Default Font)
  • Las fuentes establecidas adicionalmente se apliquen al cuadro de edición en el generador de expresiones y los valores desplegables para propiedades como: ShowWindow, BorderStyle, etc.

Personalizar colores en la ficha Propiedades

Como se observa en la Figura 2, se pueden personalizar además los colores que utiliza para varias categorías de PEMs. Los colores que se han seleccionado se corresponden con la propiedad ForeColor para cada tipo de PEM.
Las cuatro categorías que se ven en el menú contextual en la Figura 2 son un poco confusas al inicio, porque existen algunos solapes: Las propiedades "Non-Default" pueden ser de cualquier tipo; las propiedades "Instance" son también "Custom"; y las modificadas "Instance" nunca se muestran en el color de las propiedades "Non-Defaut"; pero si con el color de las propiedades "Instance" y en negritas.
Algunos de estos comportamientos y terminologías pueden cambiar cuando se libere el VFP 9.0; pero no importa el diseño que escoja el Fox Team, puede indudablemente personalizarlo, luego de un corto tiempo desarrollando VFP 9.0. Y tiene la opción de ignorar esta característica del todo y si lo prefiere tener la vista monocromática, como versiones anteriores - para ello tendrá que establecer manualmente los colores para las cuatro categorías, estableciendo el negro como predeterminado.
Con la salida del VFP 9.0 es posible que vea una opción "Establecer color prederminado" ("Reset Colors to Default") en el menú contextual.

_MemberData y el motor Member Data

La figura 2 demuestra además dos de las características que se manejan con la nueva propiedad _MemberData y el motor MemberData: La preservación de las letras mayúsculas y minúsculas de sus PEMs de usuario, y la ficha Favoritos (Favorites).

El FoxTeam no ha agregado la propiedad _MemberData a todas sus clases base, hay que agregar la propiedad _MemberData por si mismo. Esto es fácil de hacer agregándola a cada una de las clases base. Una vez que haya agregado la propiedad _MemberData a un formulario o clase, VFP la reconoce y sabe qué hacer con eso. La existencia de la propiedad _MemberData y su comportamiento es lo que yo llamo "MemberData" o "Motor MemberData".

La propiedad _MemberData es, por supuesto, inicialmente vacía, y por tanto no habilita nada. Al actualizarla, en una cadena XML _MemberData en el formato requerido, quedan especificadas las propiedades a configurar para ambos tipos de PEMs (nativos o de usuario), como se ve en la Figura 3. El motor MemberData, sirve de esta forma para extender la ficha propiedades, la cual lee el XML y aplica las personalizaciones indicadas.


Figura 3: _MemberData como una cadena XML – Se hizo Clic en el nuevo botón Ampliar (Zoom) junto al generador de expresiones; la longitud de la cadena XML MemberData es mostrada en el diálogo Zoom ampliado. La propiedad MemberData especifica cuáles PEMs son de usuario, junto con la personalización para cada una. He establecido la fuente como Tahoma para la ficha Propiedades.

El XML guardado en la propiedad MemberData indica cuáles PEMs son de usuario, junto con la personalización para cada una:
  • El alcance, aceptando ajustes en la personalización en instancias o subclases.
  • La vía en que deben ser mostrados los PEMs en la ficha Propiedades, para soportar la preservación de su mayúsculas / minúsculas (vea figura 2 y 4).
  • Si aparecerá o no la PEM en la ficha Favoritos (Favorities) (vea Figuras 2 y 4).
  • Un código VFP (script) asociado para cada propiedad personalizada o nativa, que no tenga todavía un editor de propiedad o selección desplegable (vea figura 4).
Si introduce una cadena XML no válida en la propiedad MemberData, VFP la ignora completamente. Si agrega atributos aparte de los que reconoce el motor de MemberData, VFP ignora estos atributos. Sin embargo, el hecho de que puede crear sus propios atributos, significa que puede extender el XML para _MemberData en cualquier forma que desee. Por ejemplo, puede utilizar esta característica para imitar las características de XML Docs en .NET.

A nivel global, el motor DataMember está provisto por registros agregados en la tabla FoxCode.DBF que en cualquier caso maneja IntelliSense. Para cada PEM para la cual ha especificado un member data global, el campo Tip contiene la cadena XML que indica varios atributos de member data. Como se muestra en las figuras 3 y 4, la propiedad _MemberData de un formulario individual o clase puede sobrescribir cualquier configuración global para un member data.

El editor de MemberData

El hecho que la propiedad _MemberData deba contener una cadena XML como se muestra en la Figura 3 puede desalentarlo a utilizar _MemberData en su trabajo. No se preocupe - VFP 9.0 incluye una utilidad MemberDataEditor.APP que simplifica grandemente todo acerca del motor MemberData.

Al ejecutar DO MemberDataEditor.APP desde la ventana de comandos, MemberDataEditor.APP se asegura de que la tabla FoxCode.DBF/IntelliSense contenga los registros necesarios. El registro _memberdata se agrega a la tabla FoxCode.DBF asegura que el diálogo MemberDataEditor.APP sea llamado como el editor para la propiedad _MemberData en la ficha Propiedades. Incluso establece un script FoxCode que asegura automáticamente que la propiedad _MemberData existe para cada formulario o clase cuando lo abre en el Diseñador de formularios y clases.

En la versión liberada, habrá una integración fuerte del editor de MemberData en el IDE VFP, haciendo de esta forma más sencillo establecer estas características. La versión liberada se verá algo diferente de lo que hay ahora en la beta pública, agregando algunas opciones adicionales.

Además, hay un par de vías, por las que puede traer la interfaz MemberDataEditor.APP mientras se encuentra en el Diseñador de clases y formularios. Puede seleccionarlo en cualquier momento desde el menú de Formularios y Clases. Puede seleccionar la propiedad _MemberData en la ficha Propiedades y luego hacer Doble Clic en ella, o Clic en el comando editor de a la derecha del cuadro de texto del valor de la propiedad. La versión liberada puede admitir una o dos vías adicionales para llamarlo, incluyendo una opción en el menú contextual disponible para la ventana Propiedades.


Figura 4: Interfaz del editor de MemberData - Este diálogo hace más fácil mantener el dato XML contenido en el _MemberData para el objeto actual.

Cuando hace cambios en varios controles del editor de MemberData y luego selecciona el botón OK, el editor de MemberData actualiza la cadena XML _MemberData adecuadamente.

Si lo desea, puede incluso escribir su propio editor _MemberData. Actualice el contenido del campo Tip en FoxCode.DBF para el registro donde el campo Abbrev está establecido como "memberdata". A partir de ese momento, VFP invoca el editor personalizado en lugar del editor nativo de VFP, cuando se requiere el editor de propiedades para la propiedad _MemberData en la ventana Propiedades. Este comportamiento puede cambiar en la versión liberada, y funcionar a través de la arquitectura de Generadores.

MemberDataEditor.App es una herramienta escrita en VFP, separa del propio VFP. En este sentido es mucho más ligera que otras herramientas que instala en la carpeta HOME(). Incluyendo Browser.APP (el Examinador de clases) y Toolbox.APP (la Caja de herramientas).

Preservación del tipo de letra (may/min) en la ventana Propiedades

Los desarrolladores VFP hace mucho que deseaban que VFP respetara el tipo de letra de los nombres de las propiedades y métodos de usuario. Nunca apreciamos el hecho de que VFP cambiara "MipropiedadPersonalizada" por "mipropiedadpersonalizada". La espera ha terminado finalmente.
VFP continúa guardando los nombres de propiedades de usuario en letras minúsculas en los archivos .SCX y .VCX. Pero puede especificar cómo se deben mostrar sus propiedades y métodos de usuario en la ventana Propiedades e IntelliSense, estableciendo el atributo "display=" de esas propiedades y métodos en el dato XML guardado en la propiedad _MemberData. No necesita conocer nada de XML si utiliza el editor de MemberData para establecer la cadena "Mostrar como" ("Display as") como se ve en la figura 4.

Sea consciente de que las propiedades se ordenan en la ventana propiedades utilizando un orden Alfa numérico ASCII, por tanto si establece la cadena "Mostrar como" para comenzar con letra mayúscula, las propiedades de usuario y métodos se ordenan junto con las PEMs nativas. Tardaremos en acostumbrarnos a este comportamiento, después de 10 años viendo propiedades y métodos de usuario al final de la ventana propiedades, después de todas las PEMs nativas. Existen algunas opciones que puede considerar:
  • Deje sus PEMs de usuarios en letras minúsculas (no especifique una cadena "Mostrar como"), en ese caso se ordenarán al final de la lista como ha sido siempre.
  • Especifique el color para las PEMs de usuario y las instanciadas, así cuando vea la ventana propiedades, las PEMs de usuario (coloreadas) contrastan con las PEMs nativas (monocromáticas).
  • Ponga todos sus PEMs en la ficha Favoritos (Favorities), que se explicará luego, así si necesita ver una lista de sus PEMs de usuario, puede verlos filtrados en su ficha Favoritos. Algunos beta testers han solicitado otra ficha "Custom" en la ventana propiedades, llenada automáticamente por las PEMs de usuario – las que siempre estaban ordenadas al final de la lista en versiones anteriores de VFP. Una ficha Custom dejaría la ficha Favoritos para su propósito original; veremos si esto es posible en la versión liberada.
  • Asegúrese de que cuando especifica la cadena "Mostrar como", el primer carácter es minúsculas, de esta forma todas sus PEMs de usuario se ordenarán al final de la lista, como ha ocurrido hasta ahora.
Observe que VFP ignora cualquier asignación en "Mostrar como" para PEMs nativas. En el Editor MemberData, el cuadro de texto "Mostrar como" está inhabilitado para las PEMs nativas.

Ficha Favoritos (Favorites) en la ventana propiedades

Otro pedido de los desarrolladores que ha resuelto Microsoft es incluir una nueva ficha Favoritos en la ventana Propiedades, como se ve en la Figura 2 y se llena en la Figura 5. La ficha Favoritos incluye aquellas PEMs para las que el atributo "favorites=" de su member data está establecido a "True" ("Verdadero"), como se ve en la Figura 3. La Figura 4 muestra cuán fácil resulta mantener la ficha Favoritos desde la interfaz del editor MemberData. Si todo lo que desea hacer es enviar una propiedad o método a la ficha Favoritos, existe además una opción "Agregar a favoritos" ("Add to Favorites") en el menú contextual para PEMs en la ventana Propiedades, ahorrando tiempo de tener que ir al editor del MemberData para establecer ese único atributo.

Puede mostrar en Favoritos cualquier PEM, incluyendo nativas y de usuario.

Observe, por favor, que en la beta pública, las propiedades Caption, Name y Value se muestran en la ficha Favoritos de forma predeterminada (están establecidas globalmente en la tabla FoxCode.DBF predeterminada) para garantizar esta característica. Sin embargo, en la versión liberada de VFP 9.0, lo más probable es que la ficha Favoritos se muestre vacía, y se vayan especificando cuáles PEMs son las que se desea ver en Favoritos.

Cuando sea liberado VFP 9.0, la casilla de verificación Favoritos podría aparecer también en los diálogos Nueva propiedad (New Property) y Nuevo método (New Method).

MemberData scripts

Otro entorno de desarrollo como .NET admite editores personalizados invocados desde la ventana propiedades. Ahora VFP lo hace, también, vía la sección Script del XML de _MemberData, como se ve en las Figuras 3 y 4. Como implica el término "Script", puede especificar un script (código snippet VFP) para cada propiedad de usuario.

Una vez que ha especificado un script para una propiedad de usuario, VFP muestra el botón editor de propiedades a la derecha del cuadro de texto del valor de la propiedad, como se ve en la Figura 5. Este es el mismo botón que muestra VFP para las propiedades nativas, por ejemplo ForeColor.

Cuando hace Clic en el botón editor de propiedades (o doble clic en una PEM de la lista), VFP ejecuta el código que ha colocado en la sección script de _MemberData, lo más común es ejecutar un editor personalizado asociado con esa propiedad.


Figura 5: Editor de propiedad personalizado – Especificando un script para una propiedad, y VFP muestra el botón de editor de propiedad, que se ve aquí, a la derecha del cuadro de texto del valor de la propiedad. Estas son las PEMs que yo he decidido colocar en la ficha Favoritos.

Los script no están limitados a las propiedades de usuario. Puede especificar un script para aquellas PEMs nativas en las que aún no exista un texto desplegable para la selección del valor o un botón de editor de propiedad – si el área donde se ve el botón editor de propiedad en la Figura 5 está vacía. El editor de _MemberData incluye, por esta razón, las PEMs nativas en su cuadro de lista (ListBox).

El código que se muestra a continuación, es un ejemplo de un simple Script que puede modificar para trabajar con cualquier propiedad, nativa o de usuario, cuyo valor puede ser establecido como una cadena de texto. Cuando selecciona el botón editor de propiedad (o hace doble clic a una propiedad de la lista), VFP ejecuta el Script, y entonces INPUTBOX() sirve como "editor de propiedad personalizado". La última línea de código coloca el texto introducido a una propiedad Comment que he utilizado en este ejemplo.

LOCAL lcText, laSelObj[1], loSelObj
ASELOBJ(laSelObj)
IF EMPTY(laSelObj[1])
  * outermost container
  ASELOBJ(laSelObj,1)
ENDIF
loSelObj = laSelObj[1]
lcComment = INPUTBOX('Comment:', ;
  loSelObj.Name+'.Comment', ;
  loSelObj.Comment)
loSelObj.Comment = lcComment

He aquí otro ejemplo, para ayudar a captar la idea. Abro un formulario, invoco el editor MemberData, y escribo el código que se muestra a continuación como un script global para la propiedad Tag. Después, seleccionando el botón editor de propiedad para la propiedad Tag, de cualquier control o formulario de VFP, lo que ocurre es que se invoca al generador especificado en _Builder, como si la opción Builder… fuera seleccionada del menú contextual en el Diseñador. Además, existe otra forma en la que puede invocar el generador estándar o el personalizado (piense en el generador como en un editor de propiedades high-end), aunque sería mejor utilizar script para propiedades personalizadas en lugar de utilizarlo en la propiedad Tag, yo lo he utilizado así para la demostración.

LOCAL laSelObj[1]
ASELOBJ(laSelObj)
DO (_Builder) WITH 'PSHEET',m.laSelObj 

Puede pensar además, que un script de member data está provisto con un gancho en la ventana Propiedades que no es necesario para establecer un valor de propiedad. Digamos que ha creado un formulario principal con una cuadrícula (Grid) de sólo lectura, desde el que llama un "subformulario" para manipular la entrada de datos de la cuadrícula a cada momento. Cuando se encuentra manteniendo el formulario principal, necesita frecuentemente revisar o modificar elementos relacionados en el subformulario. Esto es arduo de hacer manualmente, hay que encontrar y abrir ese subformulario desde la ventana comandos, Administrador de proyectos, diálogos Archivo Abrir, etc. En su lugar, puede agregar una propiedad de usuario en el formulario principal, o tomar prestadas las propiedades Tag o Comments. Yo utilizaré la propiedad Tag para la demostración. El valor de la propiedad Tag será igual a la línea de código necesaria para invocar al subformulario en el Diseñador de formularios o clases.

MODIFY FORM MySubForm
o
MODIFY CLASS frmMySubForm OF MyClassLib

Y el script que se muestra, en el member data para la propiedad Tag. En la ventana Propiedades, cuando se invoca el editor de propiedades, VFP abre el subformulario en el diseñador de formularios y clases. Nunca tendrá que recordar el nombre del archivo subform.SCX ni la clase o librería de clases nunca más.

LOCAL lcCommand, laSelected[1]
ASELOBJ(laSelected,1)
lcCommand = ALLTRIM(laSelected[1].CallSubform)
EXECSCRIPT(m.lcCommand)

En la última línea de código mostrado, utilicé la función EXECSCRIPT() en lugar de una macrosustitución, como se podía esperar en su lugar:
&lcCommand
Hasta ahora, el editor del MemberData no lee ni escribe el carácter ampersand de forma tal que pueda ser guardado por el XML (sospecho que también es válido para los caracteres tag < y >). Sin especial manipulación, el carácter ampersand genera un XML no válido y la cadena de propiedad _MemberData es ignorada, como si estuviera vacía. Puede obtener la macrosustitución para trabajar; pero tiene que escribir el código de forma tal que pueda ser guardado en la cadena XML de MemberData:

&amp;lcCommand

Otras mejoras en la ventana Propiedades

El menú contextual para Editar Propiedad/Métodos (Edit Property/Method), para las propiedades de usuario agregadas al formulario o clase llamados en el Diseñador, comienzan ahora el diálogo, en la Propiedad seleccionada actualmente. Esta mejora facilita y agiliza la adición o modificación de la Descripción (Descriptions), actualiza la ortografía para la propiedad, o agrega los métodos Access/Assign.

El diálogo Ampliar (Zoom) y su cuadro de edición (EditBox) (vea la Figura 3) han sido agrandados para posibilitar estas dos mejoras:
  • Todas las propiedades pueden ser establecidas ahora a cadenas de más de 255 caracteres.
  • Puede introducir caracteres extendidos en la cadena de propiedades, tales como retornos, avance de línea y tabuladores. En la Figura 3 puede ver retornos y avances de líneas que introduje en un XML de MemberData para hacer más fácil su lectura.
Estas cadenas tan largas son, obviamente, más fáciles de introducir y mantener en este cuadro de edición Zoom, que en cuadro de texto del valor de la propiedad que es mucho más pequeño. Tampoco es posible introducir directamente retornos, avance de línea y tabuladores en el cuadro de texto del valor de la propiedad. La fuente utilizada para el cuadro de edición en el diálogo Ampliar depende de la que sea especificada en el Windows OS para diálogos MessageBox().

En la versión anterior, el diálogo Zoom estaba sólo disponible desde el menú contextual para la lista PEMs. Ahora que cualquier propiedad de usuario o nativa basada en texto admite cadenas largas, está también disponible el nuevo botón Agrandar que se encuentra entre el botón Generador de expresión (Expresión Builder) y el cuadro de texto del valor de la propiedad, como se ve en las figuras 2,3 y 5. Espero que el Fox team pueda satisfacer el pedido de algunos beta testers de agrandar aun más el diálogo Zoom y hacerlo redimensionable.

El editor de expresiones en el Generador de expresiones también fue agrandado, para acomodar las cadenas de valores de propiedades más largas.

Es esencial, para la propiedad _MemberData como tal, un mayor soporte para alargar la cadena, ya que una cadena XML es, casi siempre, mayor de 255 caracteres. La propiedad CursorSchema de un CursorAdapter es otro ejemplo de una propiedad que excede frecuentemente el viejo límite, y el Generador CursorAdapter admite cadenas largas. Ahora yo deseo poder establecer más de 255 caracteres también para la propiedad Caption de una etiqueta (Label), casilla de verificación (CheckBox) y botones de opción (OptionButton).

Sin embargo, sea consciente de que esta nueva capacidad para el valor de las propiedades tiene su precio. No existe compatibilidad hacia atrás de formas o clases que implementan una propiedad larga o que contienen caracteres extendidos debido a la vía que utilizan estas propiedades para guardarlas en el campo Properties de .SCX/.VCX. Las versiones anteriores de VFP no pueden leer texto extra en el campo Properties y generan un error "El valor de la propiedad está fuera de límites" ("Property value is out of bounds") cuando intente modificar o ejecutar esas clases o formularios.

Otras mejoras en el diseñador de formularios / clases

Esto es todo para la ventana Propiedades. Ahora veremos otras mejoras en el diseñador de formularios / clases.

La fuente utilizada para el editor de método snippet desplegable ahora coincide con la fuente utilizada en el propio código snippet.

El diálogo Nueva propiedad (New property) incluye un cuadro de edición (EditBox) para el Valor predeterminado (Default value), el que elimina la necesidad de guardar la nueva propiedad y luego moverse a la ventana Propiedades para establecer el valor inicial/predeterminado.

La opción Tab Order en el menú Ver (View) ha sido mejorada con una llamada a un submenú. El nuevo submenú Tab Order contiene dos opciones Asignar interactivamente (Assign Interactively) y Asignar por la lista (Assign by List). Este nuevo comportamiento facilita utilizar ambas técnicas, debido a que no es necesario utilizar una única opción de ordenamiento en el diálogo Herramientas – Opciones. Sin embargo, existe todavía un cuadro desplegable "Orden de Tabulación" ("Tab ordering") en la ficha formularios para el diálogo Herramientas – Opciones, para especificar qué técnicas son utilizadas para ordenar al seleccionar el botón Establecer Orden de tabulación (Set Tab Order) en la barra de herramientas del diseñador de formularios.

Sobre esto, el Fox Team ha implementado los scripts MENUHIT y MENUCONTEXT FoxCode.DBF, que podemos utilizar para interceptar selecciones hechas en el menú del sistema de VFP y para interceptar menús contextuales de VFP respectivamente. Por ejemplo, puede interceptar la selección del menú Nueva Propiedad (New Property) y ejecutar en su lugar su propio diálogo Nueva propiedad, incluyendo la configuración de member data de la forma que decida controlarlo. O puede sustituir cualquier menú contextual del sistema con el suyo propio.

Existen dos nuevos accesos directos para teclado (keyboard shortcuts) en los diseñadores de formularios, clases e informes, para garantizar el incremento de espacio entre los controles seleccionados. Mantener la combinación Alt key con cualquiera de las teclas de flechas de movimiento, ajusta el espacio entre los controles seleccionados por un píxel cada vez, en la dirección que señalan las flechas. Alt+Mayúsculas en combinación con cualquiera de las teclas de flechas de movimiento, ajusta el espacio entre los controles seleccionados en un valor de la escala cada vez, en la dirección que señalan las flechas.

Hay algo que me gusta mucho, ya que utilizo la ventana Vista del documento (Document view) la mayor parte del tiempo. La ventana Vista del documento ha sido mejorada, ahora en su menú contextual está activa la opción Ordenar por nombre (Sort By Name). Encuentro que, Ordenar por nombre (Sort By Name) es mucho más útil en formularios y clases que Ordenar por localización (Sort By Location) que es la única opción para ordenar permitida en VFP 7.0 y VFP 8.0.

El nombre de los formularios/clases abiertos en el diseñador está incluido ahora en la barra de título del diálogo Modificar Propiedad/Método (Edit Property/Method), el díalogo Nueva propiedad (New Property), el diálogo Nuevo método (New Method) y el diálogo Información de la clase (Class Info).

Puede imprimir el texto seleccionado desde la ventana del editor, incluyendo el editor de método snippet. Cuando el texto se selecciona en la ventana del editor y selecciona la opción Imprimir… (Print…) del menú Archivos (File), la opción Selección (Selection) en el diálogo Imprimir (Print) está disponible y seleccionada. Si se selecciona parte de una línea, se imprime toda la línea. La versión final liberada puede incluir una opción "Imprimir selección" ("Print selection") en el menú contextual en los editores.

VFP 9.0 agregó entorno de compilación para el código que se escribe en la ventana Comandos, programas y también para el editor de código snippet en el diseñador de formularios y clases. Esta compilación existe también para cuadro de edición Expresión (Expression EditBbox) del diálogo Generador de Expresiones (Expression Builder). Encontrará esta compilación en la ficha Editor del diálogo Herramientas – Opciones (Tools - Options), donde puede desactivarlo o seleccionar entre diferentes formas de estilo de compilación.

La posibilidad de que exista IntelliSense dentro de WITH … ENDWITH y FOR … ENDFOR se aplica al editor de método snipped y programas. Sin embargo, el comportamiento puede no ser el esperado, debido a que tiene que especificar BaseClass o Class+ClassLibrary - ver en la Ayuda WITH … ENDWITH y FOR … ENDFOR.

Mejoras en el Administrador de Proyecto

Ahora puede especificar la fuente utilizada para el control Treeview y el panel Descripción (Description) en el Administrador de proyecto (Proyect Manager). Haga Clic derecho en el Administrador de Proyecto en el área (no en el propio TreeView) y seleccione la nueva opción Fuente… (Font…) en el menú contextual. La configuración de fuente se almacena en su archivo de recursos FoxUser.DBF, en el registro donde Type="PREFW" y ID="PRJUI".

El botón <Modificar…> <Modify…> ahora está activo cuando una biblioteca de clases .VCX es el elemento seleccionado actualmente en el TreeView. Anteriormente, el botón <Modify…> estaba sólo habilitado para las clases. Al seleccionar <Modificar…> para una biblioteca de clases .VCX, VFP invoca el Examinador de clases (Class Browser) en el que es cargada esa .VCX.

Mejoras en el Administrador de Panel de tareas

El administrador del Panel de tareas tiene el nuevo panel Explorador de datos (Data Explorer), similar a los exploradores de datos que ha visto en otros productos. El panel Explorador de Datos admite buscar bases de datos nativas y remotas, como SQL Server. Puede "moverse" (drill down) entre las bases de datos, ver las tablas, vistas y procedimientos almacenado. A diferencia del Enterprise Manager en SQL Server, puede moverse a sus tablas y ver los campos y dentro de los procedimientos almacenados y ver sus parámetros. Hacer Clic derecho en varios nodos para opciones como Examinar (Browse) y Ejecutar Consulta (Run Query).

La información del Explorador de datos es enteramente de sólo lectura. Pienso, que podría ser manipulable si pudiera arrastrar y soltar al menos las tablas VFP y vistas dentro del Entorno de datos (DataEnvironment) en un formulario basado en .SCX o los campos a la superficie del formulario, de la misma forma que puede hacerse desde el Administrador de proyectos o el Diseñador de base de datos. El Fox team está trabajando en ganchos de extensibilidad que puedan admitir personalización del desarrollador, para que sea capaz de agregar esta característica si no es nativa en la próxima versión liberada.

El Explorador de datos es también una aplicación standalone, de tal forma usted puede:
DO (HOME() + "DataExplorer.APP")
Una vez instanciado puede manipularlo programáticamente a través de su referencia de objeto _oDataExplorer. Por ejemplo, tal como está escrito, el formulario DataExplorer es un formulario VFP, y podrá leer o ver en algún otro sitio todos los formularios VFP que admiten anclaje (docking) en VFP 9.0, entonces puede anclarla en el entorno de desarrollo de esta forma:
_oDataExplorer.Dockable = 1 
Espero que para cuando salga VFP 9.0, la ventana DataExplorer tenga la propiedad Dockable establecida a 1 fuera del cuadro.

Al diálogo Administrador de Entorno (Environment Manager) llamado desde el panel Administrador de Entorno (Environment Manager pane) se le han agregado dos fichas: Mapeo de campo (Field mapping) y Formularios (Forms).

La ficha Mapeo de campos permite especificar el mapeo de campos para cada entorno. El diálogo Herramientas - Opciones (Tools - Options) conserva la ficha Mapeo de campos para establecer mapeo global; pero ahora, puede establecer fácilmente un mapeo de campos específico que tome efecto en cualquier momento que seleccione el proyecto en el Administrador de entorno.

La ficha Formularios permite especificar una plantilla predeterminada para formularios / conjuntos de formularios para cada entorno. El diálogo Herramientas – Opciones conserva la posibilidad de establecer la plantilla para formularios / conjuntos de formularios en la ficha Formularios (Forms); pero ahora puede establecer fácilmente para un proyecto determinado plantillas predeterminadas que tengan efecto en cualquier momento que seleccione el proyecto en el Administrador de entorno.
Siempre fue posible llamar a un .PRG en el Examinador de clases (Class Browser); pero no era muy útil, porque no mostraba nada, incluso si el .PRG contenía definiciones de clase por programa. Ahora, el Examinador de clases muestra las clases definidas en un .PRG de igual forma que las clases visuales. Sin embargo, sus opciones para clase basadas en .PRG son limitadas. Muchos de los botones de la barra de herramientas están desactivados, y los menús contextuales para el TreeView incluyen sólo un subconjunto de todas las opciones que se activan cuando es cargada una biblioteca de clase visual. Intente uno de sus .PRGs que contenga definiciones de clases, o la siguiente línea que carga una de las que viene con VFP:
DO (_Browser) WITH (HOME() + "Samples\Classes\Registry.PRG") 
La propiedad _VFP.EditorOptions (lo mismo que Application.EditorOptions) contiene una cadena de valores que determina el número de comportamientos incluyendo opciones de IntelliSense. En las versiones previas, el valor de EditorOptions se establece al valor predeterminado, cada vez que comienza una sesión de VFP. Si actualiza la propiedad EditorOptions para personalizar el comportamiento en su entorno de desarrollo, tiene que establecerlo en cualquier lugar donde esté su programa de Inicio (COMMAND = línea en el archivo CONFIG.FPW). En VFP 9, el valor de _VFP.EditorOptions se guarda en su archivo de recursos FoxUser.DBF, y persiste entre las sesiones.

Misceláneas

El Diseñador de Entorno de datos (DataEnvironment Designer) muestra ahora el camino completo a la base de datos (.DBC) en la barra de estado cuando navega por el cuadro desplegable Base de datos en los diálogos agregar tabla (Add Table) o Ver (View).

Como ya se ha observado, VFP 9.0 agrega el anclaje para la clase base Form, de esta forma los formularios pueden anclarse de igual forma que hacen las ventanas del IDE VFP. La caja de herramientas (ToolBox) de VFP es un formulario VFP, y tiene establecida su propiedad Dockable = 1, entonces ahora puede anclarla en cualquier sitio que desee mientras desarrolla sus clases y formularios.

La función NEWOBJECT() ha sido mejorada para que acepte un tercer parámetro igual a 0/cero, con el cual los eventos Init y Destroy de la clase instanciada no se disparan, similar a lo que ocurre cuando se carga una clase en el Diseñador de clases (Class Designer). Esta característica propicia la instanciación de una clase para inspeccionar sus PEMs y, opcionalmente los PEMs de sus miembros. Esto es útil en el desarrollo de herramientas, especialmente para clases basadas en .PRG, es mucho más fácil realizar tareas del tipo cargar una lista de AMEMBERS(). No espere así como una clase que no haga nada, debe ser liberada una vez que sea examinada por programación.

El comportamiento del diálogo Buscar (Find) (CTRL+F o desde el menú Edición) ha sido mejorada:
  • El diálogo Buscar está disponible en las ventanas Examinar (Watch) y Locales (Locals) del Depurador (Debugger).
  • En los editores, el diálogo Buscar se llena previamente con la primera palabra de cualquier texto seleccionado o la palabra en la que se encuentra posicionado el cursor. Este comportamiento ha provocado cierto desacuerdo entre los beta testers y pudiera cambiar en la versión final.
  • En la ventana Examinar (Browse) la tecla {F3} trabaja como Buscar siguiente (Find Again)
Existe soporte RTF para copiar y pegar (copy-and-paste) de código de otras aplicaciones como Word y Outlook. La idea es preservar la fuente y el color de la sintaxis al copiar y pegar a aplicaciones que tengan RTF. Sin embargo, en este aspecto, algunos beta testers están insatisfechos con el resultado, y el comportamiento que se ve en la beta pública pudiera cambiar con la salida del VFP 9.0.

Cuando salga VFP 9.0 pudiera existir un editor para la propiedad Anchor, que facilite cómo determinar el valor entre el largo número de posibilidades.

No hay comentarios. :

Publicar un comentario

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