Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Del Programador Cap 9 Al 11
Manual Del Programador Cap 9 Al 11
Pgina 1 de 127
Una interfaz bien diseada puede guiar a los usuarios por su aplicacin. Los formularios, clases,
controles, mens y barras de herramientas ofrecen un conjunto variado de herramientas para disear
una excelente interfaz de usuario.
Captulo 9 Crear formularios
Su aplicacin necesita formularios para permitir a los usuarios ver e introducir datos. Pero tambin
puede personalizar formularios estndar visualmente y mediante programacin para crear un entorno
especializado para sus usuarios.
Captulo 11 Usar controles
Los controles administran las interacciones entre los usuarios y su aplicacin. Visual FoxPro ofrece
diversos controles para mejorar la interfaz de su aplicacin.
Captulo 12 Disear mens y barras de herramientas
Un buen sistema de mens dice mucho a los usuarios acerca del diseo y la estructura de su
aplicacin. Si disea detenidamente los mens puede mejorar la facilidad de uso de su aplicacin,
proporcionar acceso inmediato a tareas comunes y agregar una apariencia de tipo Windows a su
aplicacin.
Disear formularios
Crear un formulario nuevo
Agregar objetos a formularios
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 2 de 127
Manipular objetos
Administrar formularios
Disear formularios
Visual FoxPro proporciona un eficaz Diseador de formularios para que el diseo de formularios
resulte rpido y sencillo. Puede disponer de:
l
l
l
l
l
Los formularios y los conjuntos de formularios son objetos con sus propias propiedades, eventos y
mtodos que pueden establecerse en el Diseador de formularios. Un conjunto de formularios consta
de uno o ms formularios que pueden manipularse como una unidad. Por ejemplo, si tiene cuatro
formularios en su conjunto de formularios, podr mostrarlos u ocultarlos como uno solo mediante un
nico comando en tiempo de ejecucin.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 3 de 127
Para obtener una descripcin ms detallada del Diseador de formularios, consulte el captulo 8,
Administrar datos mediante formularios, del Manual del usuario. Si desea ms informacin sobre las
barras de herramientas, busque el nombre de la barra de herramientas en la Ayuda.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 4 de 127
Descripcin
Valor predeterminado
AutoCloseTables
Verdadero (.T.)
AutoOpenTables
Verdadero (.T.)
InitialSelectedAlias
""
en tiempo de diseo. Si
no se especifica, en tiempo
de ejecucin se seleccionar
inicialmente el primer cursor
agregado a
DataEnvironment.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 5 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 6 de 127
Tambin puede arrastrar un campo desde la tabla principal hasta un campo de la tabla relacionada. Si
no hay ninguna etiqueta de ndice en la tabla relacionada correspondiente al campo de la tabla
principal, se le pedir que cree la etiqueta de ndice.
Modificar relaciones en el Diseador de entornos de datos
Cuando establezca una relacin en el Diseador de entornos de datos, una lnea entre las tablas
indicar la relacin.
Para modificar las propiedades de la relacin
l
Las propiedades de la relacin corresponden a clusulas y palabras clave de los comandos SET
RELATION y SET SKIP.
La propiedad RelationalExpr se establece de forma predeterminada con el nombre del campo clave
principal de la tabla primaria. Si la tabla relacionada est indexada en una expresin, deber
establecer la propiedad RelationalExpr con esta expresin. Por ejemplo, si la tabla relacionada est
indexada en UPPER(cust_id), deber establecer RelationalExpr como UPPER(cust_id).
Si la relacin no es de uno a varios, establezca la propiedad OneToMany como falsa (.F.). Esto
equivale a utilizar el comando SET RELATION sin ejecutar SET SKIP.
Establecer la propiedad OneToMany de una relacin como verdadera (.T.) equivale a ejecutar el
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 7 de 127
comando SET SKIP. Si omite la tabla primaria, el puntero de registro permanecer en el mismo
registro primario hasta pasar a travs de todos los registros relacionados de la tabla secundaria.
Nota Si desea crear una relacin de uno a varios en el formulario o el conjunto de formularios,
establezca como verdadera (.T.) la propiedad OneToMany, aunque se haya establecido una relacin
persistente de uno a varios en la base de datos.
Una aplicacin formada por ventanas sencillas es generalmente una aplicacin SDI, pero algunas
aplicaciones mezclan elementos SDI y MDI. Por ejemplo, Visual FoxPro muestra su depurador como
aplicacin SDI, que a su vez contiene ventanas MDI.
Para admitir ambos tipos de interfaz, Visual FoxPro le permite crear varios tipos de formularios:
l
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 8 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 9 de 127
Nota El formulario de nivel superior debe estar visible y activo cuando se muestre el
formulario secundario. Por lo tanto, no puede usar el evento Init del formulario de nivel
superior para mostrar un formulario secundario, porque el formulario de nivel superior an no
estar activo.
3. Active el formulario de nivel superior y, si es necesario, desencadene el evento que muestra el
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 10 de 127
formulario secundario.
Ocultar la ventana principal de Visual FoxPro
Si est ejecutando un formulario de nivel superior, es posible que quiera que la ventana principal de
Visual FoxPro est visible. Puede usar la propiedad Visible del objeto Application para ocultar y
mostrar la ventana principal de Visual FoxPro cuando sea necesario.
Para ocultar la ventana principal de Visual FoxPro
1. En el evento Init del formulario, incluya la siguiente lnea de cdigo:
Application.Visible = .F.
Asegrese de que tambin proporciona una forma de cerrar el formulario con THISFORM.Release en
algn mtodo o evento.
Nota Tambin puede incluir la lnea siguiente en un archivo de configuracin para ocultar la
ventana principal de Visual FoxPro:
SCREEN = OFF
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 11 de 127
Por ejemplo, puede llamar a un men llamado mySDImenu con este cdigo:
DO mySDImenu.mpr WITH THIS, .T.
Nota Todos los formularios de un conjunto de formularios se cargan cuando se ejecuta el conjunto.
Si necesita cargar muchos formularios con muchos controles, puede tardar varios segundos.
Crear un nuevo conjunto de formularios
Un conjunto de formularios es un contenedor primario para uno o varios formularios. Cuando tenga
activo el Diseador de formularios, podr crear un conjunto de formularios.
Para crear un conjunto de formularios
l
Si no desea trabajar con mltiples formularios como si fueran un grupo de formularios, no ser
necesario que cree un conjunto. Despus de crear un conjunto de formularios, podr agregarle
formularios.
Agregar y eliminar formularios
Cuando haya creado un conjunto de formularios, podr agregarle formularios nuevos y eliminar
formularios existentes.
Para agregar formularios adicionales a un conjunto de formularios
l
30/05/2000
Pgina 12 de 127
Los formularios se guardan con formato de tabla en un archivo que tiene la extensin .scx. Cuando
cree un formulario, la tabla .scx contendr un registro para el formulario, un registro para el entorno
de datos y dos registros de uso interno. Se agregar un registro para cada objeto que agregue al
formulario o al entorno de datos. Si crea un conjunto de formularios, se agregar un registro adicional
para el conjunto de formularios y para cada formulario nuevo. El contenedor principal de cada
formulario es el conjunto de formularios, mientras que el contenedor primario de cada control es el
formulario en el que est situado.
Sugerencia Cuando ejecute un conjunto de formularios, no desear que todos los formularios del
conjunto sean visibles inicialmente. Establezca la propiedad Visible como falsa (.F.) para los
formularios que no desee mostrar cuando se ejecute el conjunto de formularios. Establezca la
propiedad Visible como verdadera (.T.) si desea mostrar los formularios.
Controles
Contenedores
Clases definidas por el usuario
Objetos OLE
Los contenedores pueden ser el objeto primario para otros objetos. Por ejemplo, un formulario,
como contenedor, es un objeto primario para una casilla de verificacin de ese formulario.
Los controles puede estar contenidos en contenedores, pero no pueden ser objetos primarios de
otros objetos. Por ejemplo, una casilla de verificacin no puede contener ningn otro objeto.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 13 de 127
Contenedor
Puede contener
Columna
Botones de comando
Conjunto de formularios
Formulario
Cuadrcula
Columnas
Botones de opcin
Marco de pgina
Pginas
Pgina
Cuadrcula
Marco de pginas
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 14 de 127
Propiedad coleccin
Propiedad contador
Application
Objects
Forms
Count
FormCount
FormSet
Forms
FormCount
Form
Objects
Controls
Count
ControlCount
PageFrame
Pages
PageCount
Page
Controls
ControlCount
Grid
Columns
ColumnCount
CommandGroup
Buttons
ButtonCount
OptionGroup
Buttons
ButtonCount
Column
Controls
ControlCount
ToolBar
Controls
ControlCount
Container
Controls
ControlCount
Control
Controls
ControlCount
Estas propiedades le permiten usar un bucle para manipular mediante programacin todos los objetos
contenidos o algunos objetos especficos. Por ejemplo, las lneas de cdigo siguientes establecen la
propiedad BackColor de columnas de una cuadrcula a verde y rojo de forma alterna:
o = THISFORM.grd1
FOR i = 1 to o.ColumnCount
IF i % 2 = 0 && Columna par
o.Columns(i).BackColor = RGB(0,255,0) && Verde
ELSE
o.Columns(i).BackColor = RGB(255,0,0) && Rojo
ENDIF
ENDFOR
30/05/2000
Pgina 15 de 127
Para obtener ms informacin sobre los controles que puede elegir, consulte el captulo 10, Usar
controles.
Agregar controles vinculados a datos a un formulario
Puede vincular controles a datos de una tabla, una vista, un campo de tabla o un campo de vista si
establece la propiedad ControlSource de un control a un campo de la propiedad RecordSource de una
cuadrcula, a una tabla o una vista. Pero tambin puede crear controles vinculados a datos si arrastra
campos o tablas al formulario directamente desde:
l
l
l
El Administrador de proyectos
El Diseador de bases de datos
El Diseador de entorno de datos
30/05/2000
Pgina 16 de 127
Una de las caractersticas ms potentes de Visual FoxPro es su capacidad para crear clases que se
pueden utilizar y reutilizar fcilmente en distintas partes de las aplicaciones. Cuando haya creado las
clases, podr agregarlas a los formularios o conjuntos de formularios.
Para agregar un objeto basado en una clase personalizada
l
Las clases se pueden agregar directamente desde la barra de herramientas Controles de formularios
cuando las registra.
Agregar bibliotecas de clases a la barra de herramientas Controles
Debe registrar las bibliotecas de clases antes de poder mostrarlas en la barra de herramientas
Controles de formularios.
Para registrar una biblioteca de clases
1. En el men Herramientas, elija Opciones.
2. En el cuadro de dilogo Opciones, elija la ficha Controles.
3. Elija Agregar.
4. En el cuadro de dilogo Abrir, elija una biblioteca de clases que desee agregar a la lista
Seleccionado y elija Abrir.
5. Repita los pasos 3 y 4 hasta agregar todas las bibliotecas que desee registrar.
Las clases de las bibliotecas que se hayan incluido en la lista Seleccionado pueden emplearse en el
Diseador de formularios con la misma facilidad que las clases de base de Visual FoxPro.
Ficha Controles del cuadro de dilogo Opciones
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 17 de 127
Sugerencia Si quiere que las bibliotecas de clases estn disponibles en la barra de herramientas
Controles de formularios cada vez que ejecute Visual FoxPro, elija Establecer como predeterminado
en el cuadro de dilogo Opciones.
Tambin puede registrar bibliotecas directamente en el Diseador de formularios.
Para registrar una biblioteca de clases en el Diseador de formularios
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 18 de 127
3. En el cuadro de dilogo Abrir, elija una biblioteca de clases que desee agregar a la barra de
herramientas Controles de formularios y elija Abrir.
Agregar objetos a un formulario desde una biblioteca de clases
Cuando haya agregado bibliotecas de clases en la ficha Clases del cuadro de dilogo Opciones o
desde el submen Ver clases, tendr acceso a las mismas en el Diseador de formularios.
Para agregar un objeto personalizado desde la barra de herramientas Controles de formularios
3. Haga clic en el control que desee y arrastre para ajustar su tamao en el formulario.
Nota Puede eliminar una biblioteca de clases visuales desde el men de la barra de herramientas Ver
clases si selecciona la biblioteca en la lista Seleccionado de la ficha Controles de formularios del
cuadro de dilogo Opciones y elige Quitar.
Cuando agregue a un formularios objetos que no estn basados en las clases de base de Visual
FoxPro, se almacenar una ruta relativa a la biblioteca de clases (archivo .vcx) en el archivo .scx del
formulario. Si mueve el formulario o la biblioteca de clases a una ubicacin diferente, Visual FoxPro
muestra un cuadro de dilogo cuando intenta ejecutar el formulario de forma que puede localizar
manualmente la biblioteca de clases.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 19 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 20 de 127
30/05/2000
Pgina 21 de 127
clase de formulario.
Para crear un nuevo mtodo para un formulario
1. En el men Formulario, elija Nuevo mtodo.
2. En el cuadro de dilogo Nuevo mtodo, escriba el nombre del mtodo. Opcionalmente, puede
incluir una descripcin del mtodo.
Para llamar a los mtodos definidos por el usuario, como sucede con los mtodos de clase de base,
utilice la sintaxis siguiente:
NombreObjeto.NombreMtodo
El mtodo tambin puede aceptar parmetros y devolver valores. En este caso, se llama al mtodo en
una instruccin de asignacin:
cVariable = NombreObjeto.NombreMtodo(cParmetro, nParmetro)
Manipular objetos
Hay varias formas de manipular los objetos en tiempo de diseo:
l
l
l
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 22 de 127
30/05/2000
Pgina 23 de 127
Si hay un error en la funcin definida por el usuario, no podr ejecutar el formulario de este modo,
pero s podr modificarlo.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 24 de 127
Propiedad
Descripcin
AlwaysOnTop
AutoCenter
Falso (.F.)
BackColor
255,255,255
BorderStyle
Caption
Form1
Closable
Verdadero (.T.)
DataSession
MaxButton
Verdadero (.T.)
MinButton
Verdadero (.T.)
Movable
Verdadero (.T.)
ScaleMode
Scrollbars
0 Ninguna
TitleBar
1 Activo
ShowWindow
0 - En pantalla
WindowState
file://C:\temp\~hh572C.htm
Opcin
predeterminada
30/05/2000
Pgina 25 de 127
0 Sin modo
Utilice la propiedad LockScreen para que el ajuste en tiempo de ejecucin de las propiedades de
diseo de controles parezca ms limpio.
Asignar iconos a formularios
En Visual FoxPro para Windows, puede asignar un icono al formulario; el icono se muestra cuando la
ventana est minimizada en Windows NT y en la barra de ttulo en Windows 95. Para asignar un
icono a un formulario, establezca la propiedad Icon del formulario al nombre de un archivo .ICO.
Para asignar un icono a un formulario
1. Abra el formulario.
2. Abra la ventana Propiedades.
3. Establezca la propiedad Icon al archivo .ICO que quiera mostrar.
Sugerencia Para moverse entre los procedimientos en la ventana Edicin de cdigo, presione AV
PG o RE PG.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 26 de 127
Guardar formularios
Es necesario guardar el formulario antes de poder ejecutarlo. Si intenta ejecutar el formulario o cerrar
el Diseador de formularios cuando an no ha guardado el formulario, Visual FoxPro le pedir que
guarde o que descarte los cambios realizados.
Para guardar un formulario
l
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 27 de 127
Ejecutar un formulario
Un formulario puede ejecutarse directamente desde la interfaz o mediante programacin.
Ejecutar un formulario de forma interactiva
Hay varios modos de ejecutar el formulario que ha diseado.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 28 de 127
O bien
l
Tambin puede ejecutar el formulario si elige Ejecutar en el men Programa, a continuacin elige
Formulario en el cuadro Tipo de archivo y finalmente selecciona el formulario y elige Ejecutar.
Ejecutar un formulario desde un programa
Para ejecutar un formulario mediante programacin, incluya el comando DO FORM en el cdigo
asociado a un evento, en cdigo de mtodo o en un programa o un procedimiento.
Dar nombre al objeto formulario
De forma predeterminada, cuando usa el comando DO FORM, el nombre del objeto formulario es el
mismo que el del archivo .scx. Por ejemplo, la siguiente lnea de cdigo ejecuta Customer.scx. Visual
FoxPro crea automticamente una variable objeto para el formulario llamada customer:
DO FORM Customer
Por ejemplo, los comandos siguientes ejecutan un formulario y crean dos nombres de variable objeto
formulario:
DO FORM Customer NAME frmCust1
DO FORM Customer NAME frmCust2
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 29 de 127
*formtest.prg
DO FORM Customer
Despus de ejecutar el programa, el formulario permanece visible y todos los controles del formulario
estn activos, pero TYPE("Customer") devuelve U, lo que indica que Customer es una variable no
definida. El comando siguiente, ejecutado en la ventana Comandos, generara un error:
Customer.Caption = "Hola"
Sin embargo, s puede tener acceso al formulario mediante las propiedades ActiveForm, Forms y
FormCount del objeto de la aplicacin.
Ajustar el alcance del formulario a la variable de objeto formulario
La palabra clave LINKED del comando DO FORM permite vincular el formulario al objeto
formulario. Si incluye la palabra clave LINKED, cuando la variable asociada al objeto formulario
salga del alcance, se liberar el formulario.
Por ejemplo, el comando siguiente crea un formulario vinculado a la variable de objeto frmCust2:
DO FORM Customer NAME frmCust2 LINKED
Por ejemplo, puede cerrar y liberar el formulario frmCustomer si ejecuta el comando siguiente en un
programa o en la ventana Comandos:
RELEASE frmCustomer
Tambin puede permitir que un usuario cierre y libere un formulario si incluye el comando siguiente
en el cdigo de evento Click de un control, como un botn de comando con el ttulo Salir:
THISFORM.Release
Tambin puede usar el comando RELEASE en el cdigo asociado a un objeto del formulario, pero no
se ejecutar el cdigo que haya incluido en el mtodo Release.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 30 de 127
Referencia
ActiveControl
ActiveForm
ActivePage
Parent
THIS
THISFORM
THISFORMSET
Por ejemplo, para cambiar el ttulo de un botn de comando del formulario frmCust de un conjunto
de formularios almacenado en Custview.scx, use el siguiente comando en un programa o en la
ventana Comandos:
CustView.frmCust.cmdButton1.Caption = "Modificar"
Utilice las palabras clave THIS, THISFORM y THISFORMSET para hacer referencia a objetos que
estn en un formulario o un conjunto de formularios. Por ejemplo, para cambiar el ttulo de un botn
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 31 de 127
de comando cuando hace clic en ste, incluya el comando siguiente en el cdigo de evento Click para
el botn de comando:
THIS.Caption = "Modificar"
La tabla siguiente ofrece ejemplos del uso de THISFORMSET, THISFORM, THIS y Parent para
establecer propiedades de objeto.
Comando
THISFORMSET.frm1.cmd1.Caption = 'Aceptar'
THISFORM.cmd1.Caption = 'Aceptar'
THIS.Caption = 'Aceptar'
THIS.Parent.BackColor = RGB(192,0,0)
Podra determinar el tamao de un botn y establecer el ttulo mediante expresiones con campos de
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 32 de 127
una tabla:
* establecer ancho del botn como longitud de 'Llamada ' + nombre y
* apellido
frmForm1.cmdButton1.Width = 5 + ;
LEN(ALLTRIM(employee.first_name
+ " " + employee.last_name))
* establecer ttulo del botn como 'Llamada ' + nombre y apellido
frmForm1.cmdButton1.Caption = "Llamada " ;
+ ALLTRIM(employee.first_name + " " + employee.last_name)
Tambin podra establecer el ttulo mediante una funcin definida por el usuario:
frsSet1.frmForm1.cmdButton1.Caption = estttulo()
Responder a eventos
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 33 de 127
Las dos casillas de verificacin y el botn de comando de Form1 estn asociados a cdigo de evento.
El nombre del cuadro de texto de frmRight es txtInput.
Cdigo de evento para objetos de LeftForm
file://C:\temp\~hh572C.htm
30/05/2000
Objeto
Evento
Cdigo
chkItalic
Click
THISFORM.txtInput.FontItalic = ;
THIS.Value
chkBold
Click
THIS.txtInput.FontBold = THIS.Value
cmdClear
Click
THISFORM.txtInput.Value = ""
THISFORM.txtInput.FontBold = .F.
THISFORM.txtInput.FontItalic = .F.
THISFORM.chkItalic.Value = .F.
THISFORM.chkBold.Value = .F.
Pgina 34 de 127
El cdigo del evento Click para cmdClear utiliza THISFORM para restablecer los valores de los
dems controles del formulario.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 35 de 127
Observe que debe hacer referencia al conjunto de formularios y al formulario cuando se establecen
propiedades desde otro formulario distinto.
El usuario hace clic en el botn de comando "Cambiar ttulo del formulario de la izquierda" de
frmRight
El cdigo de evento Click del segundo botn de comando de frmRight muestra el cmo se establece
una propiedad de un formulario desde un objeto del formulario:
THISFORM.Caption = ;
ALLTRIM(ThisFormSet.frmLeft.txtInput.Value)
Si el usuario elige este botn, el ttulo de frmRight cambiar al valor del cuadro de texto de frmLeft.
Acceso a objetos de formularios distintos
El cdigo siguiente del evento Click del botn de comando Cambiar negrita cambia el valor de la
casilla de verificacin Negrita de Form1 y llama al cdigo de evento asociado a este control.
THISFORMSET.frmLeft.chkBold.Value = ;
NOT THISFORMSET.frmLeft.chkBold.Value
THISFORMSET.frmLeft.chkBold.InteractiveChange
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 36 de 127
La ltima lnea del ejemplo llama al evento Interactive Change de chkBold. Tambin podra llamar a
este procedimiento mediante el comando siguiente:
THISFORMSET.frmForm1.chkBold.InteractiveChange( )
Observe que la palabra clave THIS se utiliza en el cdigo de evento de un control para hacer
referencia a propiedades del control.
El usuario hace clic en el botn de comando Ocultar formulario izquierdo en el formulario de
la derecha
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 37 de 127
El comando siguiente del evento Click del botn de comando Salir libera el conjunto de formularios;
esto hace que se cierren ambos formularios:
RELEASE ThisFormSet
Administrar formularios
Los procedimientos siguientes describen tareas comunes relacionadas con la administracin de
formularios en una aplicacin.
Ocultar un formulario
Puede ocultar un formulario para que deje de estar visible para un usuario. Cuando el formulario est
oculto, el usuario no puede tener acceso a sus controles, pero sigue teniendo control total sobre ellos
mediante programacin.
Para ocultar un formulario
l
Cuando el usuario haga clic en el botn de comando, el formulario permanecer en memoria, pero no
ser visible.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 38 de 127
Liberar un formulario
Puede permitir que un usuario libere un formulario cuando haya terminado de interactuar con l. Al
liberar un formulario, ya no podr tener acceso a sus propiedades y mtodos.
Para liberar un formulario
l
Por ejemplo, en el cdigo asociado al evento Click de un botn de comando, podra incluir la lnea de
cdigo siguiente:
THISFORM.Release
3. En el cdigo de evento Init para el formulario, asigne los parmetros a las propiedades, como
en este ejemplo:
THIS.ItemName = cString
THIS.ItemQuantity = nNumber
30/05/2000
Pgina 39 de 127
2. En el cdigo asociado al evento Unload del formulario, incluya un comando RETURN con el
valor devuelto.
3. En el programa o el mtodo que ejecuta el formulario, incluya la palabra clave TO en el
comando DO FORM.
Por ejemplo, si BuscarIDCliente es un formulario modal que devuelve un valor de carcter,
la lnea de cdigo siguiente almacenar el valor devuelto en una variable llamada cIDCliente:
DO FORM BuscarIDCliente TO cIDCliente
Cree una propiedad de matriz en el formulario de inicio para almacenar las variables de objeto
asociadas con cada instancia del formulario de mltiples instancias. El modo ms sencillo de
hacer un seguimiento de las variables de instancia cuando no se sabe con antelacin cuntas va
a tener consiste en utilizar una matriz.
Para el formulario que va a tener mltiples instancias, establezca la propiedad DataSession
como 2 Sesin privada de datos. Una sesin de datos privada proporciona un conjunto
independiente de reas de trabajo para cada instancia del formulario de forma que las tablas
seleccionadas y las posiciones de puntero de registro sean todas independientes.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 40 de 127
El ejemplo siguiente proporciona cdigo que muestra cmo se crean mltiples instancias de un
formulario. Para no hacerlo demasiado extenso, este cdigo no est optimizado; est pensado
nicamente para presentar los conceptos.
El formulario siguiente inicia mltiples instancias:
Formulario Launch
Propiedad
Valor
frmLaunch
aForms[1]
" "
Evento
Cdigo
cmdQuit
Click
RELEASE THISFORM
cmdLaunch
Click
nInstance = ALEN(THISFORM.aForms)
DO FORM Multi ;
NAME THISFORM.aForms[nInstance] ;
LINKED
DIMENSION ;
THISFORM.aForms[nInstance + 1]
Para refinar el cdigo de este ejemplo, podra administrar la matriz de objetos de formulario de modo
que se cerraran los elementos vacos de la matriz reutilizados como formularios y se abrieran nuevos
formularios, en lugar de redimensionar siempre la matriz y aumentar en uno el nmero de elementos.
El formulario que puede tener mltiples instancias es Multi.scx. El entorno de datos para este
formulario contiene la tabla Employee.
Mltiples instancias de Multi.scx
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 41 de 127
Propiedad
Valor
txtFirstname
ControlSource
Employee.first_name
txtLastName
ControlSource
Employee.last_name
frmMulti
DataSession
Al elegir Iniciar formulario en el formulario Launch, se crea una instancia del formulario Multi. Al
cerrar el formulario Launch se libera la matriz de propiedades aForms y se destruyen todas las
instancias de Multi.
Visual FoxPro proporciona algunas funciones y propiedades que le ayudan a administrar mltiples
instancias de objetos. Para obtener informacin al respecto, vea AINSTANCE( ), AUSED( ) y
DataSessionID en la Referencia del lenguaje.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 42 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 43 de 127
Pxeles necesarios
Ttulo y men
38
Barra de estado
23
29
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 44 de 127
(predeterminada).
7. En el formulario, agregue los controles que necesite y establezca sus propiedades
ControlSource a los campos apropiados de la vista. Como las dos vistas tienen el mismo alias,
los controles respondern automticamente a la vista que est activa cuando se ejecute el
formulario.
Despus de crear el formulario, puede cambiar los alias de vistas si cambia la propiedad OpenViews
del entorno de datos. Puede hacerlo en el Entorno de datos mientras usa el Diseador de formularios.
De forma alternativa, puede escribir cdigo y adjuntarlo a un evento, lo cual es til si quiere cambiar
vistas en tiempo de ejecucin. Por ejemplo, puede colocar el cdigo en el evento Activate del
formulario:
THISFORM.DataEnvironment.OpenViews = 2 && Usar vista remota
Si crea un formulario que puede alternar entre datos locales y remotos, tambin debe disear el
cdigo de desplazamiento para acomodar ambas vistas, en particular si disea formularios con
relaciones uno a varios. Por ejemplo, su formulario slo tiene acceso a una tabla o vista local, puede
usar cdigo como el siguiente en un botn de comando Siguiente para mover al siguiente registro en
un cursor:
SKIP 1
THISFORM.Refresh()
Sin embargo, este cdigo es ineficaz cuando se desplaza en una vista remota, porque supone que el
cursor contiene todos los datos que requiere el formulario. Como regla general, debe minimizar la
cantidad de datos que transfiere desde el origen de datos remoto.
La solucin consiste en usar una vista parametrizada. Por ejemplo, la definicin para una vista usada
para modificar informacin de clientes podra ser:
SELECT * FROM CUSTOMERS WHERE ;
CUSTOMERS.COMPANY_NAME = ?pCompanyName
Cuando el formulario se ejecuta, puede pedir al usuario un nombre de cliente mediante un cuadro de
dilogo o permitiendo al usuario escribir un nombre en un cuadro de texto. El cdigo para un botn
Mostrar sera similar al siguiente:
pCompanyName = THISFORM.txtCompanyName.Value
REQUERY("customer")
THISFORM.Refresh()
Para obtener ms informacin sobre vistas parametrizadas, consulte Crear una vista parametrizada en
el captulo 8, Crear vistas.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 45 de 127
Cuando cree un formulario nuevo, ste se basar en el formulario de plantilla que se establece en el
cuadro de dilogo Opciones. Si no se especifica ninguna plantilla, el nuevo formulario se basar en la
clase de base Form de Visual FoxPro. Para obtener ms informacin sobre las clases de Visual
FoxPro, consulte el captulo 3, Programacin orientada a objetos.
Ventajas del uso de plantillas de formulario
Las plantillas de formulario permiten establecer propiedades predeterminadas para los formularios, de
forma que todos los formularios de la aplicacin tengan una apariencia parecida y se utilicen de
forma similar. Podra incluir un logotipo de su compaa, por ejemplo, y utilizar un mismo esquema
de colores en todos los formularios diseando una clase de formulario de plantilla con estos atributos.
Si cambiara el logotipo de la compaa, podra cambiar la imagen que aparece en la clase de
formulario de plantilla y todos los formularios creados con esa plantilla heredaran automticamente
el nuevo logotipo.
Puede agregar propiedades y mtodos personalizados a la clase de formulario de Visual FoxPro de
modo que estas propiedades y estos mtodos estn disponibles para todos los formularios de la
aplicacin. Si normalmente crea variables y procedimientos definidos por el usuario cuyo alcance es
un formulario, el uso de propiedades y mtodos personalizados le proporcionar la funcionalidad
necesaria, a la vez que le permitir disponer de un modelo de encapsulado ms limpio.
Especificar la plantilla predeterminada de formulario
Puede especificar una clase de formulario procedente de una biblioteca de clases registrada para la
plantilla de formulario.
Para especificar una plantilla predeterminada de formulario
1. En el men Herramientas, elija Opciones.
2. En el cuadro de dilogo Opciones, elija la ficha Formularios.
3. En el rea Clases de plantilla, active la casilla de verificacin Formulario.
Si no se ha seleccionado ninguna plantilla de formulario, aparecer el cuadro de dilogo
Plantilla de formulario en el que podr elegir una clase de formulario. Si ha seleccionado
alguna plantilla de formulario, puede cambiarla si elige el botn con tres puntos y selecciona
otra clase.
4. Elija Establecer como predeterminado si desea usar la plantilla en posteriores sesiones de
Visual FoxPro.
5. Elija Aceptar.
Ficha Formularios del cuadro de dilogo Opciones
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 46 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 47 de 127
No especificar plantillas.
Al elegir Formulario en el cuadro de dilogo Nuevo (y en los restantes modos de crear un
nuevo formulario) se crear automticamente un formulario basado en la clase de base Form de
Visual FoxPro.
Para obtener informacin adicional, vea Controles y objetos en la Referencia del lenguaje.
Efecto
Casilla de verificacin
Columna
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 48 de 127
Botn de opcin
Control numrico
Cuadro de texto o
cuadro de edicin
Algunas de las tareas que se llevan a cabo con controles, aunque no todas, exigen disponer de datos
dependientes del control.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 49 de 127
Los grupos de botones de opcin son contenedores que alojan botones de opcin. Generalmente, los
botones de opcin permiten a los usuarios especificar una opcin entre varias en un cuadro de
dilogo, en lugar de introducir los datos. Los botones de opcin tambin se pueden emplear para
especificar la salida a un archivo, a una impresora o para realizar una vista previa, como se describe
en el captulo 12, Agregar consultas e informes.
Establecer el nmero de botones de opcin en un grupo
Cuando crea un grupo de botones de opcin en un formulario, se incluyen dos botones de opcin de
forma predeterminada. Puede determinar el nmero de botones de opcin que hay en un grupo si
cambia la propiedad ButtonCount.
Para establecer el nmero de botones de opcin de un grupo
l
La propiedad Value del grupo indica qu botn se ha elegido. Por ejemplo, si un usuario elige el
cuarto botn de opcin de un grupo de seis, el valor del grupo de botones de opcin ser 4.
Si la propiedad ControlSource del grupo es un campo de caracteres o si la propiedad Value se
establece a un valor de tipo Character antes de que se ejecute el formulario, la propiedad Value del
grupo es el ttulo del botn de opcin seleccionado.
Establecer propiedades de botones de opcin
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 50 de 127
Para ajustar manualmente los elementos individuales de un grupo de botones de opcin o de botones
de comando en el Diseador de formularios, elija Modificar en el men de mtodo abreviado del
grupo.
Es posible establecer propiedades de botones individuales en la ventana Propiedades. Tambin puede
establecer estas propiedades en tiempo de ejecucin si especifica el nombre del botn de opcin y el
valor deseado de la propiedad. Por ejemplo, la lnea de cdigo siguiente establece el ttulo de
optCust en el grupo de botones de opcin opgChoices:
THISFORM.opgChoices.optCust.Caption = "Ordenar por Customer"
Tambin puede establecer estas propiedades en tiempo de ejecucin mediante la propiedad Buttons y
especificando el nmero de ndice del botn de opcin del grupo. Por ejemplo, si optCust es el tercer
botn del grupo, la lnea de cdigo siguiente establecer el ttulo de optCust:
THISFORM.opgChoices.Buttons(3).Caption = "Ordenar por Customer"
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 51 de 127
Propiedad
Valor
LstCustomers
RowSourceType
2 - Alias
LstCustomers
RowSource
Customer
Los filtros se establecen en el cdigo del evento Click de los botones de opcin.
Cdigo de evento para filtrar una lista cuando el usuario elige un botn de opcin
Objeto
Evento
Cdigo
OptAll
Click
SET FILTER TO
GO TOP
THISFORM.lstCustomers.Requery
OptCanada
Click
OptUK
Click
Cuando el usuario cierre el formulario, no olvide restablecer el filtro incluyendo SET FILTER TO en
el evento Click del botn de cierre o en el evento Destroy.
Sugerencia Para actualizar una lista cuando el origen de la lista puede haber cambiado, utilice el
mtodo Requery.
Usar botones de opcin para almacenar opciones de usuario en una tabla
Aunque no es tan comn, puede utilizar botones de opcin para obtener informacin de un usuario y
almacenarla en una tabla guardando la propiedad Caption. Por ejemplo, si dispone de una aplicacin
de prueba normalizada, puede utilizar los botones de opcin para permitir que el usuario elija entre
mltiples opciones A, B, C o D. Tambin puede utilizar botones de opcin para indicar el gnero en
una tabla de empleados.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 52 de 127
Los cuadros de lista y los cuadros de lista desplegables (controles de tipo cuadro combinado con la
propiedad Style establecida como 2Lista desplegable) proporcionan al usuario una lista por la que
puede desplazarse y que contiene una serie de opciones o informacin. En un cuadro de lista, puede
haber mltiples elementos visibles en todo momento. En un cuadro de lista desplegable slo se ve un
elemento, aunque el usuario puede hacer clic en el botn de flecha abajo para mostrar una lista
desplegable con todos los elementos del cuadro de lista desplegable.
Cuadro de lista y cuadro de lista desplegable con los mismos valores para la propiedad
RowSource
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 53 de 127
Sugerencia Cuadro de lista y cuadro de lista desplegable con los mismos valores para la propiedad
RowSource.
Propiedades y mtodos comunes de las listas
Las propiedades siguientes de cuadros de lista suelen establecerse en tiempo de diseo.
Propiedad
Descripcin
ColumnCount
ControlSource
MoverBars
Multiselect
RowSource
RowSourceType
Nota La propiedad Value de una lista puede ser numrica o de caracteres. El valor predeterminado
es numrico. Establezca la propiedad Value como una cadena vaca si RowSource es un valor de tipo
Character y desea que la propiedad Value refleje la cadena de caracteres del elemento seleccionado en
la lista. Puede presionar la barra espaciadora y, a continuacin, la tecla retroceso para introducir una
cadena vaca para una propiedad en la ventana Propiedades.
Los siguientes mtodos de cuadro de lista suelen utilizarse con frecuencia:
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 54 de 127
Mtodo
Descripcin
AddItem
RemoveItem
Requery
Valor
Alias
Instruccin SQL
Consulta (.qpr)
Matriz
Campos
Archivos
Estructura
El mtodo RemoveItem permite quitar elementos de la lista. Por ejemplo, la lnea de cdigo siguiente
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 55 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 56 de 127
Para obtener informacin sobre la creacin de propiedades de matrices, consulte el captulo 9, Crear
formularios.
Solucin de problemas Cuando es necesario, Visual FoxPro evala el valor de RowSource de una
lista en la aplicacin, no slo en el mtodo en que se establece la propiedad RowSource. Debe tener
en cuenta este alcance. Si crea una matriz local en un mtodo, esa matriz tendr como alcance el
mtodo y no estar disponible en todos los casos en que Visual FoxPro necesite evaluar el valor de la
propiedad. Si establece la propiedad RowSource de una lista como una propiedad de matriz del
formulario o el conjunto de formularios, deber hacer referencia a la propiedad en relacin a la lista,
no en relacin al mtodo en el que se ha establecido la propiedad. Por ejemplo, si tiene una propiedad
de matriz de formulario llamada arrayprop, las lneas de cdigo siguientes del Init del formulario
producirn resultados distintos:
THIS.lst1.RowSource = "THIS.arrayprop"
&& Error
THIS.lst1.RowSource = "THISFORM.arrayprop" && No hay error.
Para rellenar una lista con los elementos de una matriz multidimensional
1. Establezca la propiedad RowSourceType a 5.
2. Establezca la propiedad RowSource a la matriz multidimensional.
3. Establezca la propiedad ColumnCount al nmero de columnas que desea mostrar.
4. Establezca la propiedad ColumnWidths a los anchos deseados para cada columna.
Campos Si establece la propiedad RowSourceType en 6, podr especificar un campo o una lista de
campos delimitados por comas para rellenar la lista, como:
contact,company,country
Puede incluir los siguientes tipos de informacin en la propiedad RowSource de una lista cuya
propiedad RowSourceType tenga el valor 6Campos:
l
l
l
campo
alias.campo
alias.campo, campo, campo, ...
Si en la lista desea incluir campos de mltiples tablas, establezca la propiedad RowSourceType como
3Instruccin SQL.
A diferencia de un valor RowSourceType de 2Tabla, un valor RowSourceType de 6 Campos
permite mostrar campos independientemente de sus posiciones reales en la tabla.
Archivos Si establece la propiedad RowSourceType en 7, la lista se llenar con los archivos del
directorio actual. Adems, las opciones de la lista permiten elegir una unidad y un directorio distintos
para los nombres de archivos que se muestran en la lista.
Lista rellena con archivos de un directorio
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 57 de 127
Establezca RowSource como la estructura del tipo de archivos que desea mostrar en la lista. Por
ejemplo, para mostrar tablas de Visual FoxPro en la lista, establezca la propiedad RowSource como
*.dbf.
Estructura Si establece la propiedad RowSourceType a 8, la lista se rellenar con los campos de la
tabla que especifique al establecer la propiedad RowSource. Este valor de RowSourceType resulta
til para presentar al usuario una lista de campos en la que buscar valores o una lista de campos por la
que ordenar una tabla.
Emergente Si establece la propiedad RowSourceType a 9, podr rellenar una lista a partir de un
emergente definido anteriormente. Esta opcin se incluye por compatibilidad con versiones
anteriores.
Crear cuadros de lista de mltiples columnas
En Visual FoxPro un cuadro de lista puede contener tantas columnas como desee, aunque su nmero
predeterminado es uno. Un cuadro de lista multicolumna se diferencia de una cuadrcula en que en el
primero se selecciona una fila cada vez, mientras que en el segundo pueden seleccionarse celdas
individuales de una cuadrcula y los datos de la lista no se pueden modificar directamente.
Para mostrar mltiples columnas en un cuadro de lista
1. Establezca la propiedad ColumnCount como el nmero de columnas deseadas.
2. Establezca la propiedad ColumnWidths. Por ejemplo, si hay tres columnas en el cuadro de
lista, el comando siguiente establecera los anchos de columna a 10, 15 y 30, respectivamente:
THISFORM.listbox.ColumnWidths = "10, 15, 30"
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 58 de 127
form.listbox.RowSource = "contact,city,country"
Nota Para que las columnas se alineen correctamente, deber establecer la propiedad
ColumnWidths o cambiar la propiedad FontName a una fuente de espacio simple.
Cuando la propiedad RowSourceType de la lista se establece a 0 - Ninguno, puede usar el mtodo
AddListItem para agregar elementos a un cuadro de lista de mltiples columnas. Por ejemplo, el
cdigo siguiente agrega texto para especificar columnas en un cuadro de lista:
THISFORM.lst1.ColumnCount = 3
THISFORM.lst1.Columnwidths = "100,100,100"
THISFORM.lst1.AddListItem("fila1 col1", 1,1)
THISFORM.lst1.AddListItem("fila1 col2", 1,2)
THISFORM.lst1.AddListItem("fila1 col3", 1,3)
THISFORM.lst1.AddListItem("fila2 col2", 2,2)
Para procesar los elementos seleccionados (para copiarlos a una matriz o incorporarlos en cualquier
lugar de la aplicacin), efecte un bucle a travs de los elementos de la lista y procese aqullos para
los que la propiedad Selected sea verdadera (.T.). Podra incluir el cdigo siguiente en el evento
InteractiveChange de un cuadro de lista para mostrar los elementos seleccionados en un cuadro
combinado cboSelected, y el nmero de elementos seleccionados en un cuadro de texto,
txtNoSelected:
nNumberSelected = 0 && variable para hacer un seguimiento del nmero
THISFORM.cboSelected.Clear
&& borrar el cuadro combinado
FOR nCnt = 1 TO THIS.ListCount
IF THIS.Selected(nCnt)
nNumberSelected = nNumberSelected + 1
THISFORM.cboSelected.Additem (THIS.List(nCnt))
ENDIF
ENDFOR
THISFORM.txtNoSelected.Value = nNumberSelected
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 59 de 127
En el ejemplo siguiente, el cdigo del evento KeyPress de un cuadro de texto agrega el texto del
cuadro de texto al cuadro de lista y borra el texto del cuadro cuando el usuario presiona entrar:
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 13
&& Introducir tecla
THISFORM.lstAdd.AddItem(This.Value)
THIS.Value = ""
ENDIF
Permitir a los usuarios introducir datos en una tabla desde una lista
Si la propiedad ControlSource est establecida como un campo, lo que seleccione el usuario en la
lista se escribir en la tabla. ste es un modo sencillo de asegurar la integridad de los datos de la
tabla. Aunque el usuario puede introducir datos errneos, no podr introducir valores no vlidos.
Por ejemplo, si tiene una lista de regiones o pases para que elija un usuario, el usuario no podr
introducir una abreviatura no vlida de pas o regin.
Permitir a los usuarios ir a un registro seleccionando un valor en una lista
A menudo resultar til dejar que los usuarios seleccionen el registro que quieren ver o modificar.
Por ejemplo, puede proporcionar a los usuarios una lista de nombres de clientes. Cuando el usuario
seleccione un cliente de la lista, se seleccionar el registro del cliente en la tabla y se mostrar la
informacin de ese cliente en los cuadros de texto del formulario. Esto puede llevarse a cabo de
varias formas, segn el origen de datos del formulario.
RowSourceType
2 - Alias
6 - Campos
0 - Ninguno
1 - Valor
3 - Instruccin SQL
4 - QPR
5 - Matriz
30/05/2000
Pgina 60 de 127
A continuacin, cuando disee el formulario, siga los pasos del procedimiento siguiente. Observe que
la vista requiere un valor para el parmetro que no est disponible cuando se carga el formulario. Si
establece la propiedad NoDataOnLoad del objeto cursor de la vista como verdadero (.T.), impide que
la vista se ejecute hasta que se llame a la funcin REQUERY( ), momento en que el usuario habra
seleccionado un valor para la variable utilizada en la vista parametrizada.
Para disear una lista de uno a varios basada en vistas locales o remotas
1. Agregue la tabla y la vista parametrizada al entorno de datos.
2. En la ventana Propiedades para el objeto cursor de vista del Entorno de datos, establezca la
propiedad NoDataOnLoad como verdadero (.T.).
3. Establezca la propiedad RowSourceType del cuadro de lista como 6 - Campos y establezca su
propiedad RowSource al campo al que se hace referencia como clave externa en el parmetro
de la vista.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 61 de 127
Para obtener ms informacin sobre vistas locales y remotas, consulte el captulo 8,Crear vistas.
Mostrar registros secundarios en una lista
Se pueden mostrar registros de una relacin uno a varios en una lista de modo que la lista muestre los
registros secundarios de la relacin a medida que el puntero de registro se mueve a travs de la tabla
primaria.
Para mostrar registros secundarios en una lista
1. Agregue una lista al formulario.
2. Establezca la propiedad ColumnCount de la lista como el nmero de columnas que desea
mostrar.
Por ejemplo, si desea mostrar los campos Order_id, Order_net, y Shipped_on en la lista,
establezca la propiedad ColumnCount a 3.
3. Establezca la propiedad ColumnWidths a los anchos apropiados para mostrar los campos
seleccionados.
4. Establezca la propiedad RowSourceType de la lista a 3 Instruccin SQL.
5. Establezca la propiedad RowSource a la instruccin SELECT. Por ejemplo, la instruccin
siguiente selecciona tres campos de la tabla orders para el registro actual en la tabla customer:
SELECT order_id, order_net, shipped_on from orders ;
WHERE order.cust_id = customer.cust_id ;
INTO CURSOR temp
6. En el evento Init del formulario y en el cdigo que mueve el puntero de registro a travs de la
tabla, vuelva a consultar la lista:
THISFORM.lstChild.Requery
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 62 de 127
Puede establecer la propiedad Picture de la lista como el archivo.bmp que desea mostrar junto a los
elementos de la lista.
Por ejemplo, podra tener un cuadro de lista lleno de archivos, con mapas de bits distintos junto a
cada archivo segn se trate de tablas, programas u otro tipo de archivos.
Cuadro de lista con imgenes
Las casillas de verificacin pueden emplearse para permitir que un usuario especifique un estado
booleano: Verdadero o Falso, Activado o Desactivado, Abierto o Cerrado. Sin embargo, en algunos
casos la evaluacin de algo como Verdadero o Falso no es muy precisa, como preguntas no
contestadas en un cuestionario de tipo Verdadero o Falso.
Para ver ejemplos de uso de casillas de verificacin
1. Ejecute Solution.app en el directorio Visual Studio \Samples\Vfp98\Solution.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 63 de 127
Propiedad Value
0 o .F.
1 o .T.
2
.NULL.
Cuadros de texto
Cuadros de edicin
Cuadros combinados
El cuadro de texto es el control bsico que permite a los usuarios agregar o modificar datos
almacenados en un campo no memo de una tabla.
Para ver ejemplos de uso de cuadros de texto
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 64 de 127
Si establece la propiedad ControlSource para el cuadro de texto, el valor que aparece en el cuadro de
texto se almacenar en la propiedad Value del cuadro de texto y en el campo de la tabla o del cursor
que se especifique en la propiedad ControlSource.
Validar datos en un cuadro de texto
Para comprobar el valor del cuadro de texto, incluya cdigo en el mtodo asociado al evento Valid. Si
el valor no es vlido, se devolver falso (.F.) o 0. Si Valid devuelve falso (.F.) se muestra el mensaje
"La entrada no es vlida". Si desea mostrar su propio mensaje, incluya el comando WAIT WINDOW
o la funcin MESSAGEBOX( ) en el cdigo Valid y devuelva 0.
Por ejemplo, si tiene un cuadro de texto que permite a un usuario escribir la fecha de una cita, puede
asegurarse de que la fecha no ha pasado si incluye el cdigo siguiente en el evento Valid del cuadro
de texto:
IF CTOD(THIS.Value) < DATE( )
= MESSAGEBOX("Debe escribir una fecha futura",1)
RETURN 0
ENDIF
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 65 de 127
Establezca la propiedad PasswordChar del cuadro de texto como * o algn otro carcter
genrico.
Si establece la propiedad PasswordChar como algo que no sea una cadena vaca, las propiedades
Value y Text del cuadro de texto contendrn el valor real que el usuario escribi en el cuadro de
texto, pero ste mostrar un carcter genrico para cada tecla que haya presionado el usuario.
Escribir fechas en un cuadro de texto
Los cuadros de texto tienen varias propiedades que se pueden establecer para facilitar a los usuarios
escribir valores de fecha.
Propiedad
Descripcin
Century
DateFormat
StrictDateEntry
Descripcin
Alignment
ControlSource
InputMask
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 66 de 127
SelectOnEntry
TabStop
Puede permitir que los usuarios modifiquen texto de campos de caracteres o de campos memo largos
en cuadros de edicin. Los cuadros de edicin permiten el ajuste automtico de lnea y ofrecen la
posibilidad de moverse por el texto con las teclas de direccin, las teclas de avance y retroceso de
pgina, y las barras de desplazamiento.
Para ver ejemplos del uso de cuadros de edicin
1. Ejecute Solution.app en el directorio \Samples\Vfp98\Solution de Visual Studio.
2. En la vista de rbol, haga clic en Controles y, a continuacin, haga clic en Cuadro de edicin.
Permitir a los usuarios modificar un campo memo en un cuadro de edicin
Lo nico que debe hacer para permitir a un usuario modificar un campo memo en un cuadro de
edicin es establecer la propiedad ControlSource del cuadro de edicin como el campo memo. Por
ejemplo, si tiene un campo memo llamado comentarios en una tabla llamada registro, podr
establecer la propiedad ControlSource de un cuadro de edicin como registro.comentarios para
permitir que un usuario modifique el campo memo en el cuadro de edicin.
Permitir a los usuarios modificar un archivo de texto en un cuadro de edicin
Tambin puede permitir a un usuario modificar un archivo de texto en un cuadro de edicin. El
formulario siguiente lo demuestra.
Formulario de ejemplo para modificar un archivo de texto en un cuadro de edicin
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 67 de 127
Los otros dos botones de este ejemplo, cmdOpenFile y cmdSave, permiten a un usuario abrir un
archivo de texto y guardar el archivo despus de modificarlo.
Cdigo asociado al evento Click de cmdOpenFile
Cdigo
Comentarios
IF EMPTY(textfile.FileName)
RETURN
ENDIF
THISFORM.edtText.ControlSource = ;
"textfile.mem"
THISFORM.Refresh
THISFORM.cmdSave.Enabled = .T.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 68 de 127
Una vez abierto y modificado el archivo, el botn "Guardar" permite que el usuario vuelva a escribir
los cambios en el archivo.
Cdigo asociado al evento Click de cmdSave
Cdigo
Comentarios
Sugerencia Cuando cambia la propiedad SelStart, el cuadro de edicin desplaza el texto para
mostrar el nuevo valor de SelStart. Si cambia SelStart en un bucle, por ejemplo, al buscar texto, el
cdigo se ejecutar ms rpido si incluye THISFORM.LockScreen = .T. antes de procesar y
THISFORM.LockScreen = .F. despus de procesar.
Para tener acceso al texto seleccionado en un cuadro de edicin o en un cuadro de texto, utilice la
propiedad SelText. Por ejemplo, la lnea de cdigo siguiente escribir en maysculas el texto
seleccionado:
Form1.edtText.SelText = UPPER(Form1.edtText.SelText)
Descripcin
AllowTabs
HideSelection
ReadOnly
file://C:\temp\~hh572C.htm
30/05/2000
ScrollBars
Pgina 69 de 127
El control cuadro combinado tiene la funcionalidad de un cuadro de lista y un cuadro de texto. Hay
dos estilos para un cuadro combinado: cuadro combinado desplegable y cuadro de lista desplegable.
Puede especificar cul desea si cambia la propiedad Style del control. Las listas desplegables se
describieron en la seccin "Usar cuadros de lista y cuadros de lista desplegables" de este mismo
captulo.
Cuadro combinado desplegable
Un usuario puede hacer clic en el botn para ver una lista de opciones o introducir un nuevo elemento
directamente en el cuadro situado junto al botn. La propiedad Style predeterminada de un cuadro
combinado es 0 Cuadro desplegable.
Agregar elementos de usuario a listas combinadas desplegables
Para agregar el nuevo valor de usuario al cuadro combinado desplegable, puede utilizar la lnea de
cdigo siguiente en el mtodo asociado al evento Valid del cuadro combinado:
THIS.AddItem(THIS.Text)
Sin embargo, antes de agregar un elemento, es conveniente asegurarse de que el valor no est ya en el
cuadro combinado desplegable:
lItemExists = .F. && se supone que el valor no est en la lista.
FOR i = 1 to THIS.ListCount
IF THIS.List(i) = THIS.Text
lItemExists = .T.
EXIT
ENDIF
ENDFOR
IF !lItemExists
THIS.AddItem(THIS.Text)
ENDIF
Descripcin
ControlSource
DisplayCount
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 70 de 127
InputMask
IncrementalSearch
RowSource
RowSourceType
Style
Los controles numricos pueden emplearse para permitir a los usuarios realizar selecciones
mostrando los valores o escribiendo directamente el valor en el cuadro del control numrico.
Establecer el intervalo de valores que pueden elegir los usuarios
Establezca las propiedades KeyboardHighValue y SpinnerHighValue como el nmero ms alto que
desea que los usuarios puedan escribir en el control numrico.
Establezca las propiedades KeyboardLowValue y SpinnerLowValue como el nmero ms bajo que
desea que los usuarios puedan introducir en el control numrico.
Disminuir un control numrico cuando el usuario hace clic en el botn Arriba
En algunos casos, si el control numrico refleja un valor como "prioridad", ser conveniente que el
usuario pueda aumentar la prioridad de 2 a 1 haciendo clic en el botn "Arriba". Para hacer que el
nmero del control numrico disminuya cuando el usuario haga clic en el botn "Arriba", establezca
la propiedad Increment como 1.
Recorrido por valores no numricos
Si bien el valor de un control numrico es numrico, puede utilizar el control Spinner y un cuadro de
texto para que los usuarios puedan utilizar diversos tipos de datos. Por ejemplo, si desea que un
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 71 de 127
usuario pueda recorrer un intervalo de fechas, puede ajustar el tamao del control numrico de modo
que slo estn visibles los botones y situar un cuadro de texto junto a los botones del control
numrico. Establezca la propiedad Value del cuadro de texto como una fecha y en los eventos
UpClick y DownClick del control numrico, incremente o disminuya la fecha.
Sugerencia Puede usar la funcin GetSystemMetrics de la API de Windows para establecer el
ancho del control numrico de forma que slo los botones estn visibles y tengan la anchura ptima
para mostrar los mapas de bits flecha hacia arriba y flecha hacia abajo.
1. Establezca la propiedad BorderStyle del control numrico a 0.
2. Incluya el cdigo siguiente en el evento Init del control numrico:
DECLARE INTEGER GetSystemMetrics IN Win32api INTEGER
THIS.Width = GetSystemMetrics(2) && SM_CXVSCROLL
Descripcin
Interval
KeyboardHighValue
KeyboardLowValue
SpinnerHighValue
SpinnerLowValue
Uno de los lugares ms frecuentes para situar el cdigo para acciones especficas es el evento Click
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 72 de 127
de un botn de comando.
Convertir un botn de comando en la opcin predeterminada
Establezca la propiedad Default como verdadera (.T.) para convertir el botn de comando en la
opcin predeterminada. La opcin predeterminada tiene un borde ms grueso que otros botones de
comando. Si un botn de comando es la opcin predeterminada, cuando el usuario presione
ENTRAR, se ejecutar el evento Click del botn de comando.
Nota Si el objeto seleccionado en un formulario es un cuadro de edicin o una cuadrcula, el cdigo
asociado al evento Click de la opcin predeterminada no se ejecutar cuando el usuario presione
ENTRAR. Si se presiona entrar en un cuadro de edicin, se agregar un retorno de carro y un avance
de lnea al valor del cuadro de edicin. Si se presiona ENTRAR en una cuadrcula, se seleccionar un
campo adyacente. Para ejecutar el evento Click del botn predeterminado, presione
CTRL+ENTRAR.
Propiedades comunes de los botones de comando
Las siguientes propiedades de los botones de comando suelen establecerse en tiempo de diseo.
Propiedad
Descripcin
Cancel
Caption
DisabledPicture
DownPicture
Enabled
Picture
Tambin puede incluir botones de comando en un grupo de modo que pueda manipularlos
individualmente o como un grupo.
Administrar opciones de botones de comando a nivel de grupo
Si desea trabajar con un nico procedimiento de mtodo para todo el cdigo de los eventos Click de
botones de comando de un grupo, podr adjuntar el cdigo al evento Click del grupo de botones de
comando. La propiedad Value del grupo de botones de comando indica en qu botones se ha hecho
clic, como demuestra el ejemplo de cdigo siguiente:
DO CASE
CASE THIS.Value = 1
WAIT WINDOW "Ha hecho clic en " + THIS.cmdCommand1.Caption NOWAIT
* realizar alguna accin
CASE THIS.Value = 2
WAIT WINDOW "Ha hecho clic en " + THIS.cmdCommand2.Caption NOWAIT
* realizar otra accin
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 73 de 127
CASE THIS.Value = 3
WAIT WINDOW "Ha hecho clic en " + THIS.cmdCommand3.Caption NOWAIT
* realizar una tercera accin
ENDCASE
Nota Si el usuario hace clic en el grupo de botones de comando pero no en un determinado botn, la
propiedad Value seguir reflejando el ltimo botn de comando seleccionado.
Si ha escrito cdigo para el evento Click de un determinado botn del grupo, cuando el usuario elija
ese botn se ejecutar ese cdigo en lugar del cdigo del evento Click del grupo.
Propiedades comunes de los grupos de botones de comando
Las siguientes propiedades de los grupos de botones de comando suelen establecerse en tiempo de
diseo.
Propiedad
Descripcin
ButtonCount
BackStyle
Cuando se ejecute el formulario puede hacer clic en el botn de comando para saltar al sitio Web de
Microsoft.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 74 de 127
Los controles Cronmetro responden al paso del tiempo independientemente de la interaccin con el
usuario, de modo que pueden programarse para que realicen acciones a intervalos regulares. Suelen
emplearse para comprobar el reloj del sistema y ver si es hora de llevar a cabo una determinada tarea.
Los cronmetros tambin resultan tiles para otros tipos de procesamiento en segundo plano.
Para ver ejemplos del uso de cronmetros
1. Ejecute Solution.app en el directorio Visual Studio \Samples\Vfp98\Solution.
2. En la vista de rbol, haga clic en Controles y, a continuacin, haga clic en Cronmetro.
Cada cronmetro tiene una propiedad Interval, que especifica el nmero de milisegundos que
transcurren entre un evento de cronmetro y el siguiente. A menos que se desactive, un cronmetro
contina recibiendo un evento (denominado de acuerdo con el evento Timer) a intervalos de tiempo
aproximadamente iguales. La propiedad Interval tiene algunas limitaciones que deben tenerse en
cuenta cuando se programa un cronmetro:
l
El intervalo puede estar entre 0 y 2.147.483.647, inclusive, lo que significa que el intervalo ms
largo es de unas 596,5 horas (ms de 24 das).
No se garantiza que el intervalo tenga una duracin exacta. Para asegurar la precisin, el
cronmetro debe comprobar el reloj del sistema cuando lo necesita, en lugar de intentar realizar
un seguimiento interno del tiempo acumulado.
El sistema genera 18 impulsos de reloj por segundo por lo que, aunque la propiedad Interval se
mide en milisegundos, la precisin real de un intervalo no es superior a la decimoctava parte de
un segundo.
Si su aplicacin u otra distinta sobrecarga el sistema (por ejemplo, a travs de bucles largos,
clculos intensivos o acceso al disco, a la red o al puerto), es posible que la aplicacin no
obtenga eventos de cronmetro con la frecuencia que especifica la propiedad Interval.
El cronmetro aparece en el formulario en tiempo de diseo de forma que puede seleccionarlo, ver
sus propiedades y escribir un procedimiento de evento para el mismo. En tiempo de ejecucin, el
cronmetro es invisible y su posicin y tamao son irrelevantes.
Inicializar un control Timer
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 75 de 127
Valor
Enabled
Interval
Observe que la propiedad Enabled del cronmetro es distinta que la de otros objetos. Con la mayora
de los objetos, la propiedad Enabled determina si el objeto puede responder o no a un evento causado
por el usuario. Con el control Timer, al establecer Enabled a falso (.F.) se suspende el funcionamiento
del cronmetro.
Recuerde que el evento Timer es peridico. La propiedad Interval no determina "cunto tiempo", sino
ms bien "con qu frecuencia". La duracin del intervalo debe depender de la precisin que desee.
Puesto que existen posibilidades inherentes de error, cree el intervalo con la mitad de la precisin
deseada.
Nota Cuanto ms frecuentemente se genere un evento de cronmetro, ms tiempo de procesador se
consumir para responder al evento. Esto puede hacer ms lento el rendimiento global. No establezca
un intervalo excesivamente pequeo a menos que lo necesite.
Responder al evento Timer
Cuando transcurre el intervalo del control Timer, Visual FoxPro genera el evento Timer. La respuesta
a este evento suele consistir en comprobar alguna condicin general, como el reloj del sistema.
Un reloj digital es una aplicacin muy sencilla pero de gran utilidad que interviene en un control
Timer. Cuando comprenda cmo funciona la aplicacin, podr mejorarla para que funcione como un
despertador, un cronmetro u otro dispositivo de temporizacin.
La aplicacin de reloj digital incluye un cronmetro y una etiqueta con un borde. En tiempo de
diseo, la aplicacin tiene esta apariencia:
La aplicacin reloj digital
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 76 de 127
Control
Propiedad
Valor
LblTime
Caption
Timer1
Interval
Timer1
Enabled
Verdadero
La propiedad Interval del cronmetro est establecida a 500, siguiendo la regla de establecer el
intervalo en la mitad del perodo ms corto que desea distinguir (en este caso, un segundo). Esto
puede hacer que el cdigo de cronmetro actualice la etiqueta con la misma hora dos veces en un
segundo, lo que podra producir un parpadeo visible. Por ello, el cdigo comprueba si la hora es
distinta de lo que aparece en la etiqueta antes de cambiar el ttulo.
Mostrar informacin
Uno de los principios de un buen diseo consiste en que la informacin relevante est visible. Puede
utilizar los controles siguientes para mostrar informacin a los usuarios:
l
l
l
l
l
Imgenes
Etiquetas
Cuadros de texto
Cuadros de edicin
Formas
Usar imgenes
El control Image permite agregar imgenes (archivos .bmp) al formulario. Un control Image tiene la
gama completa de propiedades, eventos y mtodos que tienen otros controles, por lo que puede
cambiarse dinmicamente en tiempo de ejecucin. Los usuarios pueden interactuar con imgenes
haciendo clic, haciendo doble clic, etc.
La tabla siguiente muestra algunas de las propiedades clave de un control Image.
Propiedad
Descripcin
Picture
BorderStyle
Stretch
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 77 de 127
Se pueden cambiar las propiedades Caption y Visible de las etiquetas mediante programacin para
adaptar la etiqueta a la situacin concreta.
Propiedades comunes de las etiquetas
Las siguientes propiedades de las etiquetas suelen establecerse en tiempo de diseo.
Propiedad
Descripcin
Caption
AutoSize
BackStyle
WordWrap
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 78 de 127
Propiedad
Descripcin
Curvature
FillStyle
SpecialEffect
Propiedad
Descripcin
BorderWidth
LineSlant
Descripcin
Circle
Cls
Line
Pset
30/05/2000
Pgina 79 de 127
Los botones de comando, las casillas de verificacin y los botones de opcin pueden mostrar una
imagen adems de un ttulo. Todos estos controles tienen propiedades que permiten especificar
imgenes que se muestran en los controles.
Propiedad
Descripcin
DisabledPicture
DownPicture
Picture
Si no especifica una propiedad DisabledPicture, Visual FoxPro mostrar la imagen atenuada cuando
se desactive el control. Si no especifica DownPicture, Visual FoxPro mostrar la imagen con los
colores del fondo cambiados de modo que el botn aparezca presionado cuando se presione el botn.
Si no desea que se muestre un ttulo adems de la imagen, establezca la propiedad Caption como una
cadena vaca eliminando el ttulo predeterminado en el cuadro "Edicin de propiedades" de la
ventana Propiedades.
Usar mscaras de imagen
En muchos casos, una imagen .bmp contiene espacio en blanco que no conviene que aparezca en los
controles. Un borde blanco alrededor de una imagen de forma irregular puede dar una mala apariencia
al control. Para evitar este problema, Visual FoxPro crea una mscara temporal predeterminada para
el .bmp. Las reas en blanco reciben un atributo transparente de modo que sea transparente el color
subyacente del botn o el fondo. Para mantener en blanco algunas reas del .bmp, cree una mscara
para el .bmp que no aplique el valor predeterminado.
Para crear una mscara para un .bmp
1. Abra el archivo .BMP en Paint u otra utilidad de mapa de bits.
2. Pinte de negro todas las reas de la imagen que desea que aparezcan tal como son en el .bmp.
Deje en blanco todas las reas que desea que sean transparentes.
3. Guarde el archivo en el mismo directorio y con el mismo nombre que el archivo .bmp pero con
la extensin .msk.
Cuando Visual FoxPro cargue un archivo .bmp especificado por la propiedad Picture para un botn
de comando, un botn de opcin o una casilla de verificacin, buscar en el mismo directorio un
archivo .msk equivalente. Si en el directorio hay un archivo .msk con el mismo nombre que el .bmp,
Visual FoxPro lo utilizar como mscara para el .bmp. Todas las reas en blanco de la imagen .msk
se convierten en transparentes en el .bmp, mientras que las reas negras de la imagen .msk se
muestran tal como aparecen en el .bmp.
Nota La imagen .bmp y la imagen .msk deben tener las mismas dimensiones para que la mscara
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 80 de 127
La cuadrcula es un objeto contenedor. Del mismo modo que un conjunto de formularios puede
contener formularios, una cuadrcula puede contener columnas. Las columnas, a su vez, contienen
encabezados y controles, cada uno de los cuales tiene su propio conjunto de propiedades, eventos y
mtodos, lo que proporciona un gran control sobre los elementos de la cuadrcula.
Contenedor
Puede contener
Cuadrcula
Columnas
Columna
Encabezados, controles
El objeto Grid permite mostrar y manipular filas y columnas de datos de un formulario o una pgina.
Una aplicacin especialmente til del control Grid consiste en crear formularios de uno a varios,
como un formulario de facturas.
Para ver ejemplos del uso de cuadrculas
1. Ejecute Solution.app en el directorio \Samples\Vfp98\Solution de Visual Studio.
2. En la vista de rbol, haga clic en Controles y, a continuacin, haga clic en Cuadrcula.
Un formulario con una cuadrcula llena
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 81 de 127
Si no especifica ningn valor RecordSource para la cuadrcula y hay una tabla abierta en el rea de
trabajo actual, la cuadrcula mostrar todos los campos de esa tabla.
Establecer el nmero de columnas de una cuadrcula
Una de las primeras propiedades que puede establecer para el control Grid es el nmero de columnas.
Para establecer el nmero de columnas de una cuadrcula
1. Seleccione la propiedad ColumnCount en la lista de Propiedades y mtodos.
2. En el cuadro Propiedad, escriba el nmero de columnas que desea.
Si la propiedad ColumnCount est establecida a 1 (el valor predeterminado), la cuadrcula
contendr, en tiempo de ejecucin, tantas columnas como campos haya en la tabla asociada a la
cuadrcula.
Ajustar de forma manual la presentacin de la cuadrcula en tiempo de diseo
Cuando haya agregado columnas a la cuadrcula, podr cambiar el ancho de las columnas y el alto de
las filas. Podr ajustar de forma manual las propiedades de alto y ancho de los objetos columna y fila
en la ventana Propiedades o bien establecer visualmente estas propiedades en modo de diseo de
cuadrcula.
Para cambiar al modo de diseo de cuadrcula
l
Cuando est en modo de diseo de cuadrcula, aparecer un borde grueso alrededor de la cuadrcula.
Para salir de este modo, seleccione el formulario u otro control.
Para ajustar el ancho de las columnas de una cuadrcula
1. En modo de diseo de cuadrcula, site el puntero del mouse entre los encabezados de columna
de la cuadrcula de modo que el puntero cambie a una barra con las flechas que apunta a la
izquierda y la derecha.
2. Seleccione la columna y arrstrela hasta que tenga el ancho deseado
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 82 de 127
O bien
Establezca la propiedad Width de la columna en la ventana Propiedades.
Para ajustar el alto de las filas de una cuadrcula
1. En modo de diseo de cuadrcula, site el puntero del mouse entre el primer botn y el segundo
botn de la parte izquierda del control Grid de modo que el puntero cambie a una barra con las
flechas que apunta hacia arriba y hacia abajo.
2. Seleccione la fila y arrstrela hasta que tenga el alto deseada.
O bien
Establezca la propiedad Height de la columna en la ventana Propiedades.
Sugerencia Puede evitar que un usuario cambie la altura de las filas de cuadrcula en tiempo de
ejecucin si establece AllowRowSizing a falso (.F.).
Establecer el origen de los datos que se muestran en la cuadrcula
Puede establecer el origen de los datos para la cuadrcula y para cada columna individualmente.
Para establecer el origen de datos para una cuadrcula
1. Seleccione la cuadrcula y, a continuacin, haga clic en la propiedad RecordSourceType en la
ventana Propiedades.
2. Establezca la propiedad RecordSourceType como 0 - Tabla, si desea que Visual FoxPro abra
la tabla o como 1 - Alias si desea que la cuadrcula se llene con los campos de una tabla que ya
est abierta.
3. Haga clic en la propiedad RecordSource de la ventana Propiedades.
4. Escriba el nombre del alias o la tabla que va a servir de origen de datos para la cuadrcula.
Si desea especificar determinados campos para que aparezcan en columnas especficas, tambin
puede establecer el origen de datos para una columna.
Para establecer el origen de datos para una columna
1. Seleccione la columna y, a continuacin, haga clic en la propiedad ControlSource de la ventana
Propiedades.
2. Escriba el nombre del alias o la tabla y el campo que va a servir como origen para los valores
que se muestran en la columna. Por ejemplo, puede escribir:
Orders.order_id
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 83 de 127
30/05/2000
Pgina 84 de 127
relacionada con la tabla principal. Por ejemplo, si la etiqueta ChildOrder est indexada en
establezca RelationalExpr con la misma expresin.
"apellido + nombre",
De cualquiera de las formas que establezca el formulario uno a varios, podr agregar controles de
desplazamiento para moverse por la tabla primaria y actualizar los objetos del formulario. Por
ejemplo, el cdigo siguiente puede incluirse en el evento Click de un botn de comando:
SELECT orders && si orders es la tabla primaria
SKIP
IF EOF( )
GO BOTTOM
ENDIF
THISFORM.Refresh
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 85 de 127
Sugerencia Si desea poder centrar una casilla de verificacin en una columna de cuadrcula, cree
una clase de contenedor, agregue una casilla de verificacin a la clase de contenedor y ajuste la
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 86 de 127
Por ejemplo, las lneas de cdigo siguientes del evento Init de una cuadrcula agregan dos controles a
una columna de cuadrcula y especifican una de ellas como el control actual:
THIS.grcColumn1.AddObject("spnQuantity", "SPINNER")
THIS.grcColumn1.AddObject("cboQuantity", "COMBOBOX")
THIS.grcColumn1.CurrentControl = "spnQuantity"
* Las siguientes lneas de cdigo aseguran que el control est visible
* y se muestra en cada fila de la cuadrcula
THIS.grcColumn1.spnQuantity.Visible = .T.
THIS.grcColumn1.Sparse = .F.
spnQuantity
cboQuantity
Text1
Nota Las propiedades establecidas a nivel de cuadrcula no se transfieren a las columnas o los
encabezados. Del mismo modo, deber establecer directamente las propiedades de los encabezados y
los controles contenidos, ya que no heredan sus propiedades de los valores a nivel de columna.
Sugerencia Para presentar mejor los cuadros combinados en columnas de cuadrcula, establezca las
siguientes propiedades de cuadro combinado:
BackStyle = 0
&& Transparente
Margin = 0
SpecialEffect = 1 && Plano
BorderStyle = 0
&& Ninguno
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 87 de 127
Descripcin
ChildOrder
ColumnCount
LinkMaster
RecordSource
RecordSourceType
Descripcin
ControlSource
Sparse
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 88 de 127
Nota La propiedad ReadOnly de un control de una columna queda anulada por la propiedad
ReadOnly de la columna. Si establece la propiedad ReadOnly del control de una columna en el
cdigo asociado al evento AfterRowColChange, el nuevo valor ser vlido mientras se encuentre en
esa celda.
Site una barra inversa y un signo menor que (\<) delante de la letra deseada en la propiedad
Caption del control.
Por ejemplo, el valor de la propiedad siguiente para el ttulo de un botn de comando convierte la
letra A en la tecla de acceso.
\<Abrir
Un usuario puede elegir el botn de comando desde cualquier lugar del formulario presionando
ALT+A.
Para especificar una tecla de acceso para un cuadro de texto o un cuadro de edicin
1. Cree una etiqueta con una barra invertida y un signo menos (\<) delante de la letra deseada,
como C\<liente.
2. Asegrese de que la etiqueta es el control que precede en el orden de tabulacin el cuadro de
texto o el cuadro de edicin que quiere que reciba el enfoque.
30/05/2000
Pgina 89 de 127
El orden de tabulacin predeterminado de los controles del formulario es el orden en que se agregan
los controles al formulario.
Sugerencia Establezca el orden de tabulacin de los controles de forma que el usuario pueda
moverse fcilmente por los controles en un orden lgico.
Para cambiar el orden de tabulacin de controles
1. En la barra de herramientas Diseador de formularios, elija el botn Establecer orden de
tabulacin.
2. Haga doble clic en el cuadro situado junto al control que desea que tenga el enfoque inicial
cuando se abra el formulario
3. Haga clic en el cuadro situado junto a los otros controles en el orden en que quiere que se
llegue a ellos mediante tabulaciones.
4. Haga clic en cualquier lugar fuera de los cuadros de orden de tabulacin para terminar.
Tambin puede establecer el orden de tabulacin para los objetos del formulario por lista, segn los
valores de la ficha Formularios en el cuadro de dilogo Opciones.
Puede establecer el orden de seleccin para los botones de opcin y de comando de un grupo de
controles. Para mover un grupo de controles con el teclado, el usuario tabula al primer botn del
grupo de controles y, a continuacin, usa las flechas para seleccionar otros botones del grupo.
Para cambiar el orden de seleccin de botones de un grupo de controles
1. En la ventana Propiedades, seleccione el grupo en la lista Objeto. Un borde grueso indica que
el grupo est en modo de edicin.
2. Seleccione la ventana del Diseador de formularios.
3. En el men Ver, elija Orden de tabulacin.
4. Establezca el orden de seleccin de la misma forma que lo hara para el orden de tabulacin
para controles.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 90 de 127
Si quiere cambiar el puntero del mouse a otro que no sea uno de los punteros predeterminado,
establezca la propiedad MousePointer a 99 - Personalizado y establezca la propiedad MouseIcon
como su propio archivo de cursor (.cur) o de icono (.ico).
Cuando se establece como falsa (.F.) la propiedad Enabled de un grupo de botones de opcin o de un
grupo de botones de comando, se deshabilitan todos los botones del grupo, pero no se muestran con
las propiedades ForeColor y BackColor deshabilitadas. Al establecer la propiedad Enabled del grupo
no cambia la propiedad Enabled de los botones individuales del grupo. De este modo, se puede
deshabilitar un grupo de botones con algunos de los botones ya deshabilitados. Cuando se habilita el
grupo, los botones que estaban deshabilitados originalmente permanecen deshabilitados.
Si desea deshabilitar todos los botones de un grupo para que aparezcan deshabilitados y no desea
conservar informacin sobre qu botones estaban deshabilitados o habilitados originalmente, puede
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 91 de 127
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 92 de 127
Propiedad DragMode
Propiedad DragIcon
Evento DragDrop
Evento DragOver
Mtodo Drag
Todos los controles visuales pueden arrastrarse en tiempo de ejecucin y todos los controles
comparten las propiedades que se indican en la tabla anterior. Los formularios reconocen los eventos
DragDrop y DragOver, pero no tienen propiedades DragMode y DragIcon.
Habilitar el modo de arrastre automtico
Para permitir que el usuario arrastre un control siempre que haga clic en el control, establezca su
propiedad DragMode como 1. De este modo se habilitar el arrastre automtico del control. Cuando
se establece como Automtico, el arrastre siempre est activado.
Nota Mientras se produce una operacin de arrastre automtico, el control que se arrastra no
reconoce otros eventos del mouse.
Respuestas cuando el usuario coloca el objeto
Cuando el usuario suelta el botn del mouse despus de arrastrar un control, Visual FoxPro genera un
evento DragDrop. Hay muchas formas de responder a este evento. Se puede colocar el control en la
nueva ubicacin (indicada por la ltima posicin del contorno gris). Recuerde que el control no se
mueve automticamente a la nueva ubicacin.
Hay dos trminos muy importantes relativos a las operaciones de arrastrar y colocar: origen y destino.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 93 de 127
Trmino
Significado
Origen
Destino
El objeto sobre el que el usuario coloca el control. Este objeto, que puede
ser un formulario o un control, reconoce el evento DragDrop.
Un control se convierte en el destino si la posicin del mouse se encuentra dentro de sus bordes
cuando se suelta el botn. Un formulario es el destino si el puntero est en una parte en blanco del
formulario.
El evento DragDrop recibe tres parmetros: oSource, nXCoord y nYCoord. El parmetro oSource es
una referencia al control que se coloc sobre el destino. Los parmetros nXCoord y nYCoord
contienen, respectivamente, las coordenadas horizontal y vertical del puntero del mouse dentro del
destino.
Puesto que oSource es un objeto, se utiliza del mismo modo que un control; se puede hacer referencia
a sus propiedades o llamar a uno de sus mtodos. Por ejemplo, las instrucciones siguientes del cdigo
asociado al evento DragDrop comprueban si el usuario ha colocado un control sobre s mismo:
LPARAMETERS oSource, nXCoord, nYCoord
IF oSource.Name != THIS.Name
* Realizar alguna accin.
ELSE
* El control se ha colocado sobre s mismo.
* Realizar otra accin.
ENDIF
Todos los tipos posibles de control para oSource tienen una propiedad Visible. Por lo tanto, un
control puede hacerse invisible cuando se coloca en una determinada parte de un formulario o sobre
otro control. La siguiente lnea del cdigo asociado al evento DragDrop de un control Image hace que
un control arrastrado desaparezca cuando se coloca sobre una imagen:
LPARAMETERS oSource, nXCoord, nYCoord
oSource.Visible = .F.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 94 de 127
Es posible que este cdigo no produzca con precisin los efectos deseados, ya que la esquina superior
izquierda del control est situada en la ubicacin del mouse. El cdigo siguiente sita el centro del
control en la ubicacin del mouse:
LPARAMETERS oSource, nXCoord, nYCoord
oSource.Move ((nXCoord oSource.Width / 2), ;
(nYCoord oSource.Height / 2))
El cdigo funciona mejor cuando se establece DragIcon con un valor distinto del predeterminado
(rectngulo gris). Cuando se usa el rectngulo gris, normalmente se desea mover el control de forma
precisa a la posicin final del rectngulo gris. Para ello, registre la posicin inicial del mouse en el
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 95 de 127
control de origen. A continuacin, use esta posicin como referencia cuando mueva el control. Para
ver un ejemplo, vea Ddrop.scx en el directorio ...\Samples\Vfp98\Solution\Forms de Visual Studio.
Para registrar la posicin inicial del mouse
1. Especifique el arrastre manual del control.
2. Declare dos variables a nivel de formulario, nDragX y nDragY.
3. Active el arrastre cuando se produzca un evento MouseDown. Adems, almacene el valor de
nXCoord y nYCoord en las variables a nivel de formulario de este evento.
4. Desactive el arrastre cuando se produzca el evento MouseUp.
Ampliar formularios
Los marcos de pgina permiten ampliar la superficie de los formularios y los controles ActiveX
permiten ampliar la funcionalidad de los formularios.
Un marco de pgina es un objeto contenedor que contiene pginas. A su vez, las pginas contienen
controles. Las propiedades pueden establecerse a nivel de marco de pgina, de pgina o de control.
Para ver ejemplos del uso de marcos de pginas
1. Ejecute Solution.app en el directorio \Samples\Vfp98\Solution de Visual Studio.
2. En la vista de rbol, haga clic en Controles y, a continuacin, haga clic en Marco de pginas.
El marco de pgina puede considerarse como un contenedor tridimensional que presenta pginas en
capas. Slo los controles de la pgina superior (o sobre el marco de pgina) pueden estar visibles y
activos.
Mltiples pginas en un marco de pgina de un formulario
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 96 de 127
El marco de pgina define la ubicacin de las pginas y la cantidad de pgina que est visible. La
esquina superior izquierda de una pgina est acoplada a la esquina superior izquierda del marco de
pgina. Los controles pueden situarse en pginas que van ms all de las dimensiones del marco de
pgina. Estos controles estn activos, pero no son visibles a menos que se cambien mediante
programacin las propiedades Height y Width del marco de pgina para hacer visibles los controles.
Usar pginas en una aplicacin
Con marcos de pgina y pginas, se pueden crear formularios o cuadros de dilogo con fichas con los
mismos tipos de capacidades de interfaz que se ven en el Administrador de proyectos.
Asimismo, los marcos de pgina permiten definir una regin del formulario en la que pueden
intercambiarse fcilmente controles. Por ejemplo, en los Asistentes, la mayor parte del formulario
permanece constante, pero un rea del formulario cambia con cada paso. En lugar de crear cinco
formularios con pasos de asistente, puede crear un formulario con un marco de pgina y cinco
pginas.
Solution.app, en el directorio ...\Samples\Vfp98\Solution de Visual Studio, contiene dos ejemplos que
demuestran el uso de marcos con y sin fichas.
Agregar marcos de pgina a un formulario
Puede incluir uno o ms marcos de pgina en cualquier formulario.
Para agregar un marco de pgina a un formulario
1. En la barra de herramientas Controles de formularios, elija el botn Marco de pgina y
arrstrelo para ajustar su tamao en la ventana Formulario.
2. Establezca la propiedad PageCount para indicar el nmero de pginas que se van a incluir en el
marco.
Marco de pgina con cuatro pginas
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 97 de 127
3. En el men contextual del marco, elija Modificar para activar el marco como contenedor. El
borde del marco de pgina se ampla para indicar que est activo.
4. Agregue controles del mismo modo que en un formulario.
Nota Al igual que otros controles de contenedor, seleccione el marco de pgina y elija
Modificar en el men que aparece al presionar el botn secundario del mouse o seleccione el
contenedor en la lista desplegable "Objeto" de la ventana Propiedades, de modo que se
seleccione el contenedor (es decir, tenga un borde ms amplio) antes de agregar controles a la
pgina que est diseando. Si no activa el marco de pgina como contenedor antes de agregar
controles, los controles se agregarn al formulario en lugar de a la pgina, aunque puede
parecer que estn en la pgina.
Para seleccionar otra pgina en el marco de pgina
1. Active el marco de pginas como contenedor; para ello, haga clic con el botn secundario del
mouse y elija Modificar.
2. Seleccione la ficha de la pgina que quiere usar.
O bien
l
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 98 de 127
2. En la barra de herramientas Controles de formularios, elija el botn del control que desea y
arrstrelo para ajustarlo a la pgina.
Administrar ttulos largos en fichas de pgina
Si los ttulos de las fichas son ms largos de lo que puede mostrarse en la ficha dado el ancho del
marco de pgina y el nmero de pginas, dispone de dos opciones:
l
Establezca la propiedad TabStretch como 1 - Recortar para mostrar slo los caracteres de los
ttulos que se ajustan a las fichas. Recortar es el valor predeterminado.
Establezca la propiedad TabStretch como 0 - Pila para apilar las fichas de modo que sea visible
el ttulo completo de todas las fichas.
Descripcin
Tabs
TabStyle
PageCount
Agregue un objeto OLE a un formulario; para ello haga clic en esta herramienta y arrstrela para
ajustar su tamao en la ventana Formulario. Esta herramienta puede representar un objeto servidor
como Microsoft Excel o Microsoft Word, o puede representar un control ActiveX si el directorio
SYSTEM de Windows contiene controles ActiveX (archivos con una extensin .ocx). Para obtener
informacin general sobre los controles ActiveX, consulte el captulo 16, Agregar OLE.
file://C:\temp\~hh572C.htm
30/05/2000
Pgina 99 de 127
Puede crear un objeto ActiveX dependiente en un formulario; para ello, haga clic en esta herramienta
y arrstrela para ajustar su tamao en la ventana Formulario. Despus de crear el objeto, conctelo a
un campo General de la tabla. A continuacin, utilice el objeto para mostrar el contenido del campo.
Por ejemplo, si almacena documentos de Word en un campo de tipo General, podr mostrar el
contenido de estos documentos con un objeto OLE dependiente en un formulario.
Para crear un objeto ActiveX dependiente
1. Cree o abra un formulario.
2. En la barra de herramientas Controles de formularios, elija el botn Control ActiveX
dependiente y arrstrelo para ajustar su tamao en el formulario.
3. Vincule el objeto ActiveX a un campo de tipo General; para ello, establezca la propiedad
ControlSource del objeto.
Para ver un ejemplo de cmo se usa el control ActiveX dependiente, consulte el captulo 16, Agregar
OLE.
file://C:\temp\~hh572C.htm
30/05/2000
Cada componente de una aplicacin de Visual FoxPro puede tener su propio sistema de mens o
conjunto de mens. En las secciones siguientes se describe la forma de crear un sistema de mens,
pero no se indica cmo incorporarlo a una aplicacin. Si desea informacin al respecto, consulte el
captulo 13, Compilar una aplicacin.
En las secciones siguientes se describe:
l
l
l
l
file://C:\temp\~hh572C.htm
30/05/2000
Especifique las tareas que los mens deben realizar, como mostrar formularios y cuadros de
dilogo. Incluya tambin un preprograma y postprograma si es conveniente. El preprograma se
ejecuta antes de que se defina el sistema de mens y puede incluir cdigo para abrir archivos,
declarar variables de memoria o colocar el sistema de mens en una pila de forma que se pueda
recuperar despus. El postprograma contiene los procedimientos que usted escribe, se ejecuta
despus del cdigo de definicin de los mens y determina los elementos de men disponibles
o no disponibles para su seleccin.
l
l
Organice el sistema segn las tareas que vayan a realizar los usuarios y no segn la jerarqua de
los programas de la aplicacin.
Los usuarios pueden formarse un modelo mental de la organizacin de la aplicacin si
observan los mens y sus elementos. Para disear estos mens y elementos de forma eficaz,
debe saber cmo piensan los usuarios y cmo realizan su trabajo.
l
l
l
l
l
file://C:\temp\~hh572C.htm
30/05/2000
ellos.
l
file://C:\temp\~hh572C.htm
30/05/2000
Sugerencia Arrastre los botones de movimiento para cambiar la posicin de los mens en la barra
de mens.
Si necesita un men Ayuda, sitelo en ltimo lugar en la barra de mens, de modo que los usuarios
puedan encontrarlo rpidamente.
Antes de poder usar el men en una aplicacin debe generarlo.
Para generar un men
l
Visual FoxPro le pedir que guarde el sistema de mens en un archivo con la extensin .MNX. Este
archivo es una tabla que almacena toda la informacin sobre el sistema de mens. Despus de haber
guardado el sistema de mens, Visual FoxPro le pedir un archivo de salida con la extensin .MPR.
Este archivo contendr el programa de men generado.
Crear un men contextual
Los mens contextuales aparecen cuando hace clic con el botn secundario del mouse en un control o
un objeto, y proporcionan una forma rpida de ofrecer todas las funciones que se aplican a ese objeto
exclusivamente. Puede usar Visual FoxPro para crear mens contextuales y, a continuacin, adjuntar
estos mens a controles. Por ejemplo, puede crear un men contextual que contenga los comandos
Cortar, Copiar y Pegar, y que aparecer cuando el usuario haga clic con el botn secundario en datos
contenidos en un control Grid.
file://C:\temp\~hh572C.htm
30/05/2000
Mientras el Diseador de mens est abierto, elija Opciones generales en el men Ver y
seleccione Formulario de nivel superior.
file://C:\temp\~hh572C.htm
30/05/2000
Crear submens
Para cada elemento de men, puede crear un submen con elementos adicionales.
Para crear un submen
1. En la columna Indicador, haga clic en el elemento al que desee agregar un submen.
2. En el cuadro Accin, seleccione Submen.
Aparecer un botn Crear a la derecha de la lista. Si ya existe un submen, aparecer un botn
Modificar.
3. Haga clic en el botn Crear o Modificar.
4. En la columna Indicador, escriba los nombres de los nuevos elementos de men.
Agregar mens mediante programa
Aunque normalmente los mens y sus elementos se crean con el Diseador de mens, tambin es
posible crearlos con comandos de Visual FoxPro. Por ejemplo, puede crear un men con DEFINE
PAD, un submen con DEFINE POPUP y elementos del submen con una serie de comandos
DEFINE BAR.
Agrupar elementos de men
Para mejorar la legibilidad, puede separar grupos de elementos de men similares con lneas
divisorias. Por ejemplo, en Visual FoxPro, el men Edicin tiene una lnea que separa los comandos
Deshacer y Rehacer de los comandos Cortar, Copiar, Pegar y Pegado especial.
Elementos de men agrupados
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
Escriba \< a la izquierda de la letra que desee que acte como tecla de acceso.
Por ejemplo, para hacer que la tecla de acceso del ttulo del men Cliente sea "l", sustituya
Cliente por C\<liente en la columna Indicador.
Solucin de problemas Si una tecla de acceso a un men no funciona, compruebe si hay teclas de
acceso duplicadas.
Asignar mtodos abreviados de teclado
file://C:\temp\~hh572C.htm
30/05/2000
Adems de asignar teclas de acceso, puede especificar mtodos abreviados de teclado para los mens
o sus elementos. Como ocurre con las teclas de acceso, los mtodos abreviados de teclado permiten
elegir un men o un elemento de men al mantener presionada una tecla mientras presiona otra. La
diferencia entre las teclas de acceso y los mtodos abreviados de teclado es que estos ltimos pueden
utilizarse para elegir un elemento de men sin tener que mostrar primero el men correspondiente.
Los mtodos abreviados de teclado para los elementos de men de Visual FoxPro son combinaciones
de la tecla CTRL o ALT con otra tecla. Por ejemplo, en Visual FoxPro puede crear un archivo nuevo
si presiona CTRL+N
Para especificar un mtodo abreviado de teclado para un men o elemento de men
1. En la columna Indicador, haga clic en el ttulo o elemento de men correspondiente.
2. Elija el botn de la columna Opciones para mostrar el cuadro de dilogo Opciones de la
accin.
3. En el cuadro Etiqueta de tecla, presione una combinacin de teclas para crear un mtodo
abreviado de teclado.
Si un elemento de men no tiene un mtodo abreviado de teclado, Visual FoxPro mostrar
"(presione la tecla)" en el cuadro Etiqueta de tecla.
4. En el cuadro Texto de tecla, agregue el texto que desee que aparezca junto al elemento de
men.
De forma predeterminada, Visual FoxPro repite el mtodo abreviado de teclado del cuadro
Etiqueta de tecla en el cuadro Texto de tecla. Sin embargo, puede modificar el contenido de
Texto de tecla. Por ejemplo, si tanto en Etiqueta de tecla y Texto de tecla aparece CTRL+R,
puede cambiar el contenido de Texto de tecla por ^R.
Nota CTRL+J es un mtodo abreviado de teclado no vlido porque se usa para cerrar ciertos
cuadros de dilogo en Visual FoxPro.
Activar y desactivar elementos de men
Puede activar o desactivar un men o un elemento de men basndose en una condicin lgica.
Para activar o desactivar un men o elemento de men
1. En la columna Indicador, haga clic en el ttulo o elemento de men correspondiente.
2. Elija el botn de la columna Opciones para mostrar el cuadro de dilogo Opciones de la
accin.
3. Haga clic en la casilla de verificacin Saltar por.
Aparecer el Generador de expresiones.
file://C:\temp\~hh572C.htm
30/05/2000
Generador de expresiones
4. En el cuadro Saltar por, escriba la expresin que determinar si el men est activado o
desactivado.
Si la expresin da como resultado falso (.F.), el men o elemento quedar activado. Si la
expresin da como resultado verdadero (.T.), el men o elemento se desactivar y no se podr
seleccionar o elegir. Si desea ms informacin al respecto, vea los temas DEFINE BAR y
DEFINE PAD.
Nota Una vez mostrado el sistema de mens, puede activar y desactivar los mens y sus
elementos con el comando SET SKIP OF..
Marcar el estado de un elemento de men
En un men, una marca de verificacin junto a un elemento indica que est activo. Por ejemplo, si
coloca una marca de verificacin junto al elemento Crdito del men Cliente antes creado, esta
opcin quedar activada.
En tiempo de ejecucin puede colocar una marca de verificacin junto a un elemento de men
mediante el comando SET MARK OF.
Para ver un ejemplo sobre cmo desactivar y marcar el estado de elementos de men, ejecute
Solution.app en el directorio ...\Samples\Vfp98\Solution de Visual Studio.
Asignar tareas a mens o a elementos de men
file://C:\temp\~hh572C.htm
30/05/2000
Cuando se selecciona un men o un elemento de men, ste realiza una tarea, como mostrar un
formulario, una barra de herramientas o bien otro sistema de mens. Para realizar una tarea, el men
o elemento deber ejecutar un comando de Visual FoxPro. Este comando puede estar contenido en
una lnea o puede ser una llamada a procedimiento.
Sugerencia Escriba un procedimiento si va a utilizar el mismo conjunto de comandos en varios
lugares. Debe dar nombre al procedimiento explcitamente y debe escribir un postprograma en el
men o en algn lugar en el que men u objeto puede hacer referencia al mismo.
Realizar tareas con comandos
Para realizar una tarea, puede asignar un comando a un men o elemento de men. Puede tratarse de
cualquier comando vlido de Visual FoxPro, incluyendo una llamada a un programa que exista en la
ruta de acceso o a un procedimiento definido en la opcin Postprograma del cuadro de dilogo
Opciones generales. Para obtener ms informacin, consulte Crear un procedimiento predeterminado
para un sistema de mens, ms adelante en este mismo captulo.
Para asignar un comando a un men o elemento de men
1. En la columna Indicador, haga clic en el ttulo o elemento de men correspondiente.
2. En el cuadro Accin, elija Comando.
3. En el cuadro situado a la derecha del cuadro Accin, escriba el comando correspondiente:
Asignar un comando a un men
Si el comando llama a un procedimiento del postprograma del men, utilice el comando DO con la
sintaxis siguiente:
DO nombreproc IN nombremen
En esta sintaxis, nombremen especifica la ubicacin del procedimiento. Se trata del nombre del
archivo de men y debe tener la extensin .mpr. Si no especifica la ubicacin en nombremen, deber
hacerlo con SET PROCEDURE a nombremen.mpr, si el procedimiento se encuentra en el
postprograma del men.
Mostrar formularios y cuadros de dilogo
Para mostrar un formulario, conjunto de formularios o cuadro de dilogo compilados desde un men
o un elemento de men, puede llamarlos con un comando o con un procedimiento. Por ejemplo, para
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
Haga clic en el botn Modificar y luego en Aceptar, para abrir una ventana de edicin
independiente para escribir o llamar a un procedimiento.
30/05/2000
Todos los mens de Visual FoxPro tienen dos nombres y cada elemento de men tiene un nombre y
un nmero. Visual FoxPro utiliza un nombre en la interfaz de usuario y el otro nombre o el nmero
en el programa de men generado (.mpr). Puede usar estos nombres o nmeros para hacer referencia
a mens de control y a elementos de men en tiempo de ejecucin. Si no proporciona un nombre o un
nmero al crear mens y elementos de men, Visual FoxPro crea uno cuando genera el programa de
men.
Para ver un ejemplo de adicin y eliminacin de mens en tiempo de ejecucin, vea Solution.app en
el directorio ...\Samples\Vfp98\Solution de Visual Studio.
Precaucin Evite utilizar nombres y nmeros generados en el cdigo, ya que cambiarn cada vez
que se genere el programa de men. Si hace referencia a un nombre o nmero generado, el cdigo
puede fallar.
En el Diseador de mens, la columna Indicador muestra lo que aparece en la interfaz de usuario y en
la columna situada a la derecha del cuadro Accin se indica lo que aparece en el programa generado.
Usar Ttulo de men para hacer referencia a un ttulo de men en el programa de men
generado
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
Tambin puede definir una clase de barra de herramientas de las maneras siguientes:
l
l
l
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
En el evento Init del conjunto de formularios, utilice el comando SET CLASSLIB para
especificar la biblioteca que contiene la clase de barra de herramientas y despus cree una barra
de herramientas desde esa clase en el conjunto de formularios.
Por ejemplo, para agregar y ver la barra de herramientas tbrPrint, que est basada en la clase
printing de la biblioteca de clases inventory, agregue el cdigo siguiente al evento Init del
conjunto de formularios:
SET CLASSLIB TO inventory
THIS.AddObject("tbrPrint","printing")
THIS.tbrPrint.Show
Nota Si la clase de barra de herramientas no define las acciones de la barra de herramientas y sus
botones, deber definir las acciones en los procedimientos de evento asociados a la barra de
herramientas y sus botones. Para obtener ms informacin al respecto, consulte "Definir acciones de
barra de herramientas".
Ejemplo: creacin de una barra de herramientas personalizada
Puede definir todos los aspectos de una barra de herramientas en el cdigo. Por ejemplo, si agrega el
cdigo siguiente al evento Init de un conjunto de formularios, cuando se cargue el conjunto de
formularios Visual FoxPro crear y mostrar la barra de herramientas definida en el cdigo. Esta
barra contiene dos botones.
Barra de herramientas con dos botones
Cuando se haga clic en estos botones, cambiarn los atributos de fuente del formulario frmForm1 del
conjunto de formularios.
Cdigo de evento Init del conjunto de formularios
Cdigo
Comentarios
THIS.AddObject("tbrTool1","mibarra")
THIS.tbrTool1.Show
file://C:\temp\~hh572C.htm
30/05/2000
Cdigo
Comentarios
Left = 1
Top = 1
Width = 25
Caption = "Atributos de formulario"
cmdBold.Caption = "B"
cmdBold.Height = 1.7
cmdBold.Width = 10
cmdItalic.Caption = "I"
cmdItalic.Height = 1.7
cmdItalic.Width = 10
cmdItalic.FontBold = .F.
PROCEDURE cmdBold.CLICK
THISFORMSET.frmForm1.FontBold = ;
!THISFORMSET.frmForm1.FontBold
THIS.FontBold = ;
THISFORMSET.frmForm1.FontBold
ENDPROC
PROCEDURE cmdItalic.CLICK
THISFORMSET.frmForm1.FontItalic = ;
!THISFORMSET.frmForm1.FontItalic
THIS.FontItalic = ;
THISFORMSET.frmForm1.FontItalic
ENDPROC
ENDDEFINE
file://C:\temp\~hh572C.htm
30/05/2000
Realizar las mismas acciones cuando el usuario elige botones de barra de herramientas y
elementos de men asociados.
Coordinar la activacin y desactivacin de botones de barra de herramientas y elementos de
men asociados.
Siga los pasos generales al coordinar elementos de men y botones de barra de herramientas:
1. Cree una barra de herramientas; para ello, defina una clase de barra de herramientas, agregue
botones de comando e incluya el cdigo operacional de los mtodos asociados a los eventos
Click de los botones de comando.
2. Cree el men coordinado.
file://C:\temp\~hh572C.htm
30/05/2000
4. Elija el botn de la columna Opciones para abrir el cuadro de dilogo Opciones de la accin y
elija Saltar por.
5. En el Generador de expresiones, escriba una expresin que indique que la opcin de men se
debe saltar cuando el botn de comando de la barra de herramientas no est activado.
Por ejemplo, si el nombre del botn en la barra de herramientas es cmdA, escriba la siguiente
expresin en el cuadro Saltar por:
NOT formset.toolbar.cmdA.Enabled
6. Genere el men.
7. Agregue el men al conjunto de formularios con la barra de herramientas y ejecute el conjunto
de formularios.
Cuando el usuario abra el men, Visual FoxPro evala la condicin Saltar por y desactiva el elemento
de men si el botn de comando de barra de herramientas asociado est desactivado. Cuando el
usuario elija un elemento en el men, el cdigo del evento Click del botn de comando de barra de
herramientas asociado se ejecuta.
Agregar una barra de herramientas y un men coordinados a un conjunto de formularios
Cuando haya creado una clase de barra de herramientas y un men que estn diseados para que
funcionen conjuntamente, es fcil incorporarlos a un conjunto de formularios.
file://C:\temp\~hh572C.htm
30/05/2000
En el evento Init del conjunto de formularios, incluya cdigo con el mtodo AddObject
para agregar la barra de herramientas.
2. En el evento Load del conjunto de formularios, guarde el men existente y ejecute su programa
de men.
l
Por ejemplo, si su nombre de men es mymenu, incluya las siguientes lneas de cdigo con los
comandos PUSH MENU y DO:
PUSH MENU _MSYSMENU
DO mymenu.mpr
3. En el evento Unload del conjunto de formularios, restablezca el men original con el comando
POP MENU:
POP MENU _MSYSMENU
Si algunos comandos de men se usan ms que otros, puede crear barras de herramientas
personalizadas que contengan botones para esos comandos. Los usuarios podrn simplemente hacer
clic en los botones siempre que necesiten los comandos. Sin embargo, si crea una barra de
herramientas, debera sincronizar los comandos de men con sus botones correspondientes. Por
ejemplo, si activa un botn, debera activar su correspondiente comando de men.
Al hacer clic en Vista previa aparecer en el borde superior de la pantalla el sistema de mens que
haya definido. Adems, el cuadro de dilogo Vista previa mostrar el nombre de archivo (o nombre
temporal) del sistema de mens.
Vista previa de un sistema de mens
file://C:\temp\~hh572C.htm
30/05/2000
file://C:\temp\~hh572C.htm
30/05/2000
30/05/2000
Tambin puede especificar la posicin de los ttulos de los mens cuando el usuario modifica un
objeto en la aplicacin. Si incluye un objeto y el usuario lo activa, los ttulos no aparecern en la barra
de mens resultante a menos que lo especifique explcitamente.
Para controlar la posicin de los ttulos de los mens durante la modificacin visual
1. En la columna Indicador, haga clic en el ttulo de men correspondiente.
2. Elija el botn de la columna Opciones para mostrar el cuadro de dilogo Opciones de la
accin.
3. Active la casilla de verificacin Negociar.
4. Elija uno de los botones de opcin siguientes:
l Nada no incluye ningn ttulo en la barra de mens. Elegir Nada es como no elegir
ninguna opcin.
l
.
Si no elige Izquierda, Centro o Derecha, el ttulo de men no aparecer en la barra de mens cuando
el usuario modifique un objeto. Para obtener ms informacin sobre la modificacin visual de
objetos, consulte el captulo 16, Agregar OLE.
30/05/2000
elegirlos. Por ejemplo, este procedimiento general puede incluir la funcin siguiente:
MESSAGEBOX("Caracterstica no disponible")
Haga clic en el botn Edicin, y luego en el botn Aceptar, para abrir una ventana de
edicin independiente en la que escribir o llamar al procedimiento.
file://C:\temp\~hh572C.htm
30/05/2000