24 de abril de 2015

Secretos ocultos del IDE de VFP (Parte 2)

Texto original: Hidden Secrets of the VFP IDE, Part 2
https://msdn.microsoft.com/en-us/library/ms947597.aspx
Autor: Cathy Pountney
Traducido por: Ana María Bisbé York


... Continuación de Secretos ocultos del IDE de VFP (Parte 1)

FoxPro ha tenido siempre diferentes vías para hacer lo mismo. Cuántas veces ha mirado sobre el hombro de otro desarrollador y ha dicho, "¡Hey!, ¿Cómo has hecho eso?" En esta serie de artículos, Cathy Pountney va a descubrir muchas formas de trabajar dentro del IDE, especialmente aquellas que no son tan evidentes o no están documentados. Aprenderá varias vías diferentes de mejorar su productividad. Incluso experimentados desarrolladores aprenderán algo nuevo.

Este es el segundo de dos artículos donde estoy exponiendo varios secretos desconocidos del IDE de VFP. En la primera parte, debatí sobre varios diseñadores, algunos controles, la ventana Propiedades, la herramienta Vista del documento y el cuadro de diálogo Buscar. Además descubrí algunos secretos de IntelliSense y varias herramientas y utilidades incluidas con Visual FoxPro. En este artículo, voy a revelar secretos de la ventana Comandos, varios comandos y para finalizar, resumiré un popurrí de secretos ocultos.

Ventana Comandos y comandos

La ventana Comandos es otro lugar en el que pasamos gran parte de nuestro día. Hay varios trucos que se pueden utilizar en la ventana Comandos, y otros secretos menos conocidos sobre algunos comandos de VFP.

Ventana Comandos

Mucha gente ya sabe que puede resaltar una línea de código en la ventana Comandos, hacer clic derecho y seleccionar Ejecutar selección para ejecutar el código resaltado. Pero ¿sabía que puede resaltar varias líneas de código y ejecutarlas de una vez? Sin embargo, debe tener en cuenta que este trabajo puede no tener los resultados esperados. Cuando se ejecutan múltiples líneas de código, se crea un programa temporal y luego se ejecuta. Esto significa que las variables pueden irse de alcance después de que un fragmento del código sea ejecutado. ¡Esto es más un "atrape oculto" que un "secreto oculto"!

Otra cosa que puede hacer con la ventana de comandos es utilizar punto y coma (;), como un carácter de continuación justo como hace en su código. Esto es muy bueno, cuando copia código desde un programa o cuando crea una instrucción SELECT gigante que desea poder ver íntegramente.

_CLIPTEXT

El primer extra es una variable de sistema llamada _CLIPTEXT. Contiene el contenido del portapapeles de VFP. Puede utilizarlo para establecer otra información basada en qué hay en el portapapeles, y puede utilizarla precisamente, para definir qué hay en el portapapeles. Es una variable de dos sentidos que debe aprovechar en tiempo de diseño e incluso en tiempo de ejecución dentro de su aplicación.

Para demostrarlo, resalte una línea de código en la ventana de comandos y presione Ctrl+C para guardarlo en el Portapapeles. Ahora, introduzca ? _CLIPTEXT en la ventana Comandos y verá que la línea de código que ha resaltado está impresa en la pantalla. Otro ejemplo es ejecutar el siguiente código para crear un programa:

_cliptext = '? "FOX ROCKS"' + CHR(13) + CHR(10) + ;
'? "VFP 8 ES FANTÁSTICO"' + CHR(13) + CHR(10)
ERASE JUNK.PRG
MODIFY COMMAND Junk NOWAIT
KEYBOARD '{CTRL+V}'

El código anterior llena el portapapeles con dos líneas de código, crea un archivo de programa, y luego pega el contenido del portapapeles al programa creado recientemente.

_VFP.DataToClip()

El segundo extra que tiene VFP para ayudarnos con funciones de cortar y pegar es la función _VFP.DataToClip(). Esta función toma los datos desde la tabla o cursor y los coloca en el portapapeles. Desde ahí, puede pegarlos en cualquier otro lugar, incluyendo Microsoft Excel. El tercer parámetro define el formato de los datos. Si utiliza un 1 (uno) en el tercer parámetro, el dato utiliza un espacio para separar cada campo. Sin embargo, si utiliza un 3 en la tercera columna, se utilizan tabs para separar cada campo, lo cual es perfecto para insertar en Excel u otra aplicación.

Imprimir el portapapeles

Otra característica poco conocida en VFP es el hecho de que pueda imprimir lo que sea que esté en el portapapeles. Esto es muy bueno cuando quiere imprimir un fragmento de código de su programa; pero no un programa entero. Resalte el texto que desee imprimir y seleccione Archivo – Imprimir en el menú principal de VFP para llamar al cuadro de diálogo Imprimir (puede utilizar Ctrl.+P para invocar este mismo diálogo). Desde el diálogo Imprimir, seleccione el botón Opciones para mostrar el cuadro de diálogo Opciones de impresión. De forma predeterminada el combobox Tipo aparece relleno con el nombre del programa actual. Sin embargo puede desplegarlo y seleccionar Porta papeles, seleccionar Aceptar y luego regresar al cuadro de diálogo Imprimir para finalizar la selección del resto de los parámetros de impresión.

Teclas de la ventana Examinar (BROWSE)

Al utilizar el comando BROWSE, existe un grupo de teclas que pueden ayudarlo a realizar operaciones especiales, como se muestra en la Tabla1.

Combinación de teclas¿Qué hace?
Ctrl+FBusca el siguiente (Find)
Ctrl+GBusca el anterior
Ctrl+YAñade un regitro
Ctrl+TAlterna la bandera de eliminar
Ctrl+HomeEdita un campo memo
Ctrl+WGuarda y cierra
Ctrl+F10Alterna entre maximizar y restaurar

Tabla1. Teclas con el comando BROWSE.

¿Qué hay en un NAME?

La cláusula NAME puede ser muy útil para pasar datos. Los comandos SCATHER, GATHER e INSERT INTO tienen la cláusula NAME. Esto los hace mucho más poderosos que días anteriores cuando hubiera utilizado SCATTER con MEMVAR. Ahora puede utilizar SCATTER con un nombre en NAME, puede pasar el dato a otro objeto como un parámetro. El siguiente código muestra un ejemplo de cómo hacerlo:

*-- Abrir tablas
CLOSE TABLES ALL
USE MyTable1 IN 0
USE MyTable2 IN 0 EXCLUSIVE
ZAP IN MyTable2
*-- Copiar registros desde MyTable1 hasta MyTable2
SELECT MyTable1
GOTO TOP
SCAN
SCATTER NAME oMyTable
AddToTableGather('MyTable2', oMyTable)
AddToTableInsert('MyTable2', oMyTable)
ENDSCAN
SELECT MyTable2
BROWSE
*-- Cerrar tablas
CLOSE TABLES ALL
RETURN
*************************
FUNCTION AddToTableGather
*************************
LPARAMETERS pcTable, poFields
LOCAL lcAlias
lcAlias = ALIAS()
SELECT (pcTable)
poFields.Descr = ALLTRIM(poFields.Descr) + 'G'
APPEND BLANK
GATHER NAME poFields
SELECT (lcAlias)
RETURN
*************************
FUNCTION AddToTableInsert
*************************
LPARAMETERS pcTable, poFields
poFields.Descr = ALLTRIM(poFields.Descr) + 'I'
INSERT INTO (pcTable) FROM NAME poFields
RETURN

Otro buen ejemplo de la utilización de la cláusula NAME es con el comando BROWSE. En la ventana comandos, escriba lo siguiente:

USE MyTable1
BROWSE NAME oBrowse

Ahora, en la ventana Comandos, entre la cadena "oBrowse." (no olvide el punto final) y verá el impacto de IntelliSense en cuanto escriba el punto. Esto es muy bueno, la ventana Examinar es ahora un objeto que puede manipular. Empiece a escoger algunas propiedades como FontBold o RowHeight, desde IntelliSense y puede manipular la ventana examinar precisamente desde la ventana Comandos.

TRANFORM() implícito

En VFP 8, algunos comandos tienen implementado una característica de TRANSFORM() implícito. Esto significa que puede utilizar los tipos de datos que no son de carácter, y el comando los transformará automáticamente por usted. Si el elemento ha sido transformado es un objeto, es utilizado el texto "(Object)".

Intente el siguiente comando y se sorprenderá de que no lanzará un error.

WAIT WINDOW DATE()
MESSAGEBOX(500)
DEBUGOUT DATE()
? _VFP

Popurrí

Existen más secretos ocultos que se desparraman por todo Visual FoxPro.

Truco tramposo

Utilizar la tecla Mayúsculas antes de seleccionar una opción de menú, puede cambiar las opciones de menú. Por ejemplo, presionar Mayúscula y seleccionar el menú Archivos cambia la opción Cerrar por Cerrar todo. Utilizar Mayúsculas desde la ventana de menú cambia, Ocultar por Ocultar todo. Normalmente, la opción Formato – Fuente cambia la fuente en la ventana de Comandos. Sin embargo, utilizar la tecla Mayúsculas con el menú Formato cambia la fuente de la pantalla, por tanto, cambia la fuente de la pantalla de VFP.

Otra característica, que tiene ya cerca de años y años en FoxPro y VFP, es la característica de Fuera de vista (outshow) Presionar Ctrl+Alt+Shift oculta todas las ventanas excepto la de salida. Están ocultas mientras continúe presionando la combinación de teclas. En cuanto las libere, las ventanas ocultas aparecen nuevamente. Esto es extremadamente útil cuando muestra algo desde la ventana de comandos con el carácter signo de interrogación (?) y el resultado final se mostrará detrás del resto de las ventanas.

Copiar una clase

De inicio, parece como si no hubiera una forma de copiar una clase existente en VFP. Puede crear una subclase; pero al parecer no hay forma de copiar una clase. Entonces, utilizará el Administrador de proyectos que puede lograrse bastante fácil con los siguientes pasos:

  1. Arrastre la clase origen desde una biblioteca a otra.
  2. Renombre la clase en la nueva biblioteca.
  3. Arrastre nuevamente la clase renombrada a la biblioteca original.
  4. Elimine la clase de la biblioteca temporal.

Por supuesto, sería agradable si existiera un botón copiar en el menú contextual que se activa con el clic derecho o en algún otro lugar. Pero ¡al diablo!,… no podemos tenerlo todo.

Arrastrar y soltar

En VFP 8, el Administrador de proyectos fue mejorado al permitir adicionar múltiples archivos a la vez. Antes de esta versión, podía añadir solo un archivo cada vez. Sin embargo, puede arrastrar y soltar múltiples archivos, y esta característica ya está hace algún tiempo. Abra el Administrador de proyecto y el Explorador, seleccione algunos archivos en el Explorador y luego arrástrelos al Administrador de proyectos. Una ventaja adicional es que el Administrador de proyectos es suficientemente inteligente como para colocar cada archivo en su ficha correspondiente, en dependencia de la extensión del archivo.

_VFP.SetVar()

Esta función, tan poco conocida, puede ser utilizada para establecer variables en situaciones donde no puede ejecutar un comando; pero puede llamar a una función. Un ejemplo perfecto de cuando utilizarla es el Diseñador de informes. Yo la utilizo todo el tiempo en expresiones Al Entrar (OnEntry) y Al Salir (OnExit) de varias bandas del informe. Por ejemplo, en la expresión Al Salir en el Pie de grupo, puede utilizar _VFP.SetVar('rnRecordCount', 0) para limpiar el valor de la variable rnRecordCount. O, cuando utiliza _VFP.SetVar('rnCountDataGroups', rnCountDataGroups+1) para incrementar una variable que almacena la cantidad de grupos de datos procesados.

Caracteres comodín

Algunos comandos aceptan caracteres comodín, y, a pesar de que es grandioso poder trabajar con ellos, puede ser peligroso. No hay mucho daño en escribir MODI COMM MyProg*. Todo lo que va a hacer es abrir todos los programas que comiencen con MyProg. Sin embargo, el tema de escribir DELETE FILE MyProg*.prg … ¡Peligro!¡Peligro!¡Peligro!... cruzan destellos por mi mente. ¡Sea muy cuidadoso a la hora de utilizar caracteres comodín!

Sólo por diversión

¡Vaya! Tenemos aquí un artículo lleno de información. Hasta ahora, su cerebro está probablemente confundido, por eso, voy a finalizar con algunas cosas divertidas.

Filer

Años atrás, Filer fue lo más utilizado por desarrolladores de Visual FoxPro para Buscar y encontrar archivos. Después de VFP 3.0, desapareció y muchos desarrolladores se quejaron. Bueno, el Equipo de Fox ha escuchado y decidido traerlo de regreso. Escriba lo siguiente en la ventana de Comandos, para ver un ejemplo de cómo ejecutarlo.

DO FORM (HOME(1) + 'Tools\Filer\Filer.scx')

Busque en el archivo de Ayuda de VFP y lea sobre el Nuevo Filer, porque este es orientado a objetos y puede interactuar con el e implementarlo en sus propias aplicaciones. ¡Supongo que podrá llamarlo FilerX!

Puzzle

Esta es otra característica de VFP que nos ha sido devuelta con VFP 8.0. Escriba lo siguiente en la ventana de Comandos. Sin embargo, está advertido… ¡puede disminuir drásticamente su productividad en el trabajo!

ACTIVATE WINDOW PUZZLE

Programas libres de errores

¿Sabe que escribir programas libres de errores, es muy fácil con VFP? Sólo necesita escribir la siguiente línea de código en su programa de inicio, y ya está cubierto.

ON ERROR *

Por supuesto, esto no significa que sus programas están libres de fallas. Significa solamente que no se emitirán mensajes de error por el sistema.

¡Ame su trabajo!

Estoy segura que ama VFP tanto que nunca quisiera dejarlo ir. Muy bien, no hay problemas. Al iniciar VFP, escriba la siguiente línea de código:

ON SHUTDOWN *

No importa, cuánto se esfuerce, no podrá salir de VFP. Esto es genial – ahora puede estar con VFP 24 horas, 7 días de la semana y ¡nunca tendrá que dejarlo! Bien, bien, no es una muy buena idea. Para reparar los daños hay que escribir el siguiente código:

ON SHUTDOWN

¡Trabaje Mejor, no Más!

Este par de artículos están abarrotados de información. Mi objetivo es exponerle tantas características como son posibles y dejarle sus momentos "ah ha". Algunas de ellas pueden que no sean novedosas; pero aquellas que sí le han sido descubiertas, le permitirán ahorrar tiempo en el futuro. Como siempre digo, ¡Trabaje mejor, no más!

Para encontrar más sobre FoxTalk y Publicaciones Pinnacle (Pinnacle Publishing) visite su sitio Web en http://www.pinpub.com

Nota: Este no es un sitio Web de la corporación Microsoft. Microsoft no es responsable por su contenido. Este artículo está reproducido de la edición de este mes de enero de 2004 de FoxTalk, Copyright 2004, por Pinnacle Publishing, Inc., sin alguna otra nota. Todos los derechos reservados. FoxTalk es una publicación independiente de Pinnacle Publishing, Inc. Ninguna parte de este artículo puede ser reproducido (excepto en breves acotaciones utilizadas en revistas y artículos especializados) sin previo consentimiento de Pinnacle Publishing, Inc. Para contactar con Pinnacle Publishing, Inc, favor de llamar al 1-800-788-1900.

1 comentario :

  1. Buenisimos trucos...
    Muchas gracias.
    PD:... tenes algun lugar donde puedea aprender a manejar MUY BIEN LOS REPORTES de multiples lineas, y como pasar un DESDE-HASTA a una variable al reporte.
    Gracias.

    ResponderBorrar

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