Hola invitado         02 Sep, 2010 - 04:36
Menú principal
 
Ads
 
Patrocinadores
 
Anuncios
 
© 2009 PortalFox
Guardar la posición y el tamaño de un formulario lecturas 5741
 Enviado por Luis María Guayán en Viernes, 06 Enero, 2006
Formularios Una forma fácil de guardar y recuperar la posición, el tamaño, o cualquier otra propiedad de un formulario.

Guardar la posición y el tamaño de un formulario

Luis María Guayán Por Luis María Guayán, Tucumán, Argentina


Muchas veces nuestros usuarios desean que al volver a ingresar a un formulario, éste mantenga el tamaño y la posición de la última vez que se ejecutó. Aquí mostraremos una forma simple de realizar esta tarea con un ejemplo al cual Uds. podrán darle la funcionalidad y la complejidad que sus aplicaciones requieran.

¿Qué utilizaremos?

A partir de Visual FoxPro 8.0 se agregó la cláusula NAME a los comandos SCATTER y GATHER, que nos permite actualizar las propiedades de un objeto con el registro actual de una tabla, y a la inversa, reemplazar el registro actual de una tabla a partir de las propiedades de un objeto.

Por ejemplo si tenemos una tabla con los nombres de campos que coincidan con los nombres de las propiedades de un objeto, el siguiente código actualizará las propiedades del objeto con los valores del registro actual de la tabla:

USE MiTablaSCATTER NAME Objeto ADDITIVE

¿Qué haremos?

Lo que vamos a hacer, es crear una tabla libre con nombre "_Prop_" mas el nombre físico del archivo del formulario utilizando la función SYS(1271). En el caso de crear el formulario programáticamente (como en el ejemplo) la función SYS(1271) retorna .F., con lo cual agregaremos "Form" al nombre de la tabla. Los campos de la tabla solo serán las propiedades que nos dan la posición y el tamaño del formulario (Top, Left, Width y Height)  y el color de fondo (BackColor).

Importante: Tener en cuenta que las tablas libres solo soportan nombres de campos de hasta 10 caracteres de longitud. En el caso de este ejemplo, las propiedades a guardar son Top, Left, Width, Height y BackColor con lo cual no tendremos inconvenientes ya que ninguna supera los 10 caracteres de largo, pero si deseamos poder guardar y recuperar propiedades de mas de 10 caracteres de longitud, debemos reemplazar la tabla libre por una tabla contenida en una base de datos que soportan nombres de campos de hasta 128 caracteres de longitud.

En el método Init del formulario tomamos los valores de las propiedades con en comando SCATTER NAME ThisForm ADDITIVE y en el método Destroy guardamos los valores con el comando GATHER NAME ThisForm.

El código de ejemplo

Copie el código siguiente en un archivo PRG, ejecútelo, y cambie el tamaño, posición y color de fondo del formulario. Luego salga y ejecútelo nuevamente y verá que conserva las propiedades que ha cambiado.

PUBLIC oMiForm
oMiForm = CREATEOBJECT("MiForm")
oMiForm.SHOW(1)
RETURN

DEFINE CLASS MiForm AS FORM
TOP = 10
LEFT = 10
HEIGHT = 180
WIDTH = 324
CAPTION = "Guardar posición, tamaño y color de fondo"
BACKCOLOR = RGB(200,220,255)
NAME = "frmMiForm"

ADD OBJECT cmdColor AS COMMANDBUTTON WITH ;
TOP = 12, LEFT = 12, HEIGHT = 27, WIDTH = 132, ;
CAPTION = "Cambiar BackColor", NAME = "cmdColor"

ADD OBJECT cmdSalir AS COMMANDBUTTON WITH ;
TOP = 48, LEFT = 12, HEIGHT = 27, WIDTH = 132, ;
CAPTION = "Salir", NAME = "cmdSalir"

ADD OBJECT lblAyuda AS LABEL WITH ;
AUTOSIZE = .T., WORDWRAP = .T., BACKSTYLE = 0, ;
CAPTION = "Cambie la posición, tamaño y color del " + ;
"formulario. Salga del formulario y ejecutelo nuevamente.", ;
FONTSIZE = 12, LEFT = 12, TOP = 96, NAME = "lblAyuda"

PROCEDURE INIT
THISFORM.InicializarPropiedades()
THISFORM.TomarPropiedades()
THISFORM.RESIZE
ENDPROC

PROCEDURE DESTROY
THISFORM.GuardarPropiedades()
ENDPROC

PROCEDURE RESIZE
THISFORM.lblAyuda.WIDTH = THISFORM.WIDTH - 24
ENDPROC

PROCEDURE InicializarPropiedades
LOCAL lcScx
*-- Creo propiedades
THISFORM.ADDPROPERTY("Prop_Alias")
THISFORM.ADDPROPERTY("Prop_Tabla")
*-- Nombre de la tabla de propiedades
lcScx = SYS(1271,THISFORM)
THISFORM.Prop_Alias = "_Prop_" + IIF(EMPTY(lcScx),"Form",JUSTSTEM(lcForm))
THISFORM.Prop_Tabla = FORCEEXT(FULLPATH("")+ THISFORM.Prop_Alias, "DBF")
*-- Si no existe la tabla la creo
IF NOT FILE(THISFORM.Prop_Tabla)
CREATE TABLE (THISFORM.Prop_Tabla) FREE ;
(TOP I, LEFT I, WIDTH I, HEIGHT I, BACKCOLOR I)
APPEND BLANK
GATHER NAME THISFORM
USE IN SELECT(THISFORM.Prop_Alias)
ENDIF
ENDPROC

PROCEDURE TomarPropiedades
*-- Tomo las propiedades de la tabla
SELECT 0
USE (THISFORM.Prop_Tabla)
SCATTER NAME THISFORM ADDITIVE
USE IN SELECT(THISFORM.Prop_Alias)
ENDPROC

PROCEDURE GuardarPropiedades
*-- Guardo las propiedades en la tabla
SELECT 0
USE (THISFORM.Prop_Tabla)
GATHER NAME THISFORM
USE IN SELECT(THISFORM.Prop_Alias)
ENDPROC

PROCEDURE cmdColor.CLICK
THISFORM.BACKCOLOR = GETCOLOR(THISFORM.BACKCOLOR)
ENDPROC

PROCEDURE cmdSalir.CLICK
THISFORM.RELEASE
ENDPROC

ENDDEFINE

Para terminar

La idea de este código para publicar en PortalFox fue tomada de uno de los ejemplos de la aplicación "Solution" que viene con Visual FoxPro (si no conoces esta aplicación, mira este artículo de Esparta Palma en PortalFox: ¿Y tu? ¿Has explorado el ejemplo Solution.app?). Este formulario de ejemplo (que viene a partir de VFP 8.0) lo podemos ver ejecutando:

DO FORM (HOME(2) + "Solution\Toledo\ScatterName")

Hasta la próxima.

Luis María



 Versión imprimible  
Guardar la posición y el tamaño de un formulario | 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.