DEFINE POPUP (Comando)
Crea un menú.
DEFINE POPUP MenuName [FROM nRow1, nColumn1] [TO nRow2, nColumn2]
[IN [WINDOW] WindowName | IN SCREEN] [FONT cFontName [, nFontSize]]
[STYLE cFontStyle] [FOOTER cFooterText] [KEY KeyLabel] [MARGIN]
[MARK cMarkCharacter] [MESSAGE cMessageText] [MOVER] [MULTISELECT]
[PROMPT FIELD FieldName | PROMPT FILES [LIKE FileSkeleton]
| PROMPT STRUCTURE] [RELATIVE] [SCROLL] [SHORTCUT]
[TITLE cMenuTitleText]
[COLOR SCHEME nSchemeNumber | COLOR ColorPairList]
Parámetros
MenuName
Especifica el nombre del menú que quiere crear.FROM nRow1, nColumn1 TO nRow2, nColumn2
Especifica el lugar donde se situará el menú. nRow1, nColumn1 especifica las coordenadas de la esquina superior izquierda del menú. Si omite la cláusula FROM, Visual FoxPro sitúa la esquina superior izquierda del menú en la primera fila y en la primera columna de la ventana principal de Visual FoxPro o de la ventana definida por el usuario.Para crear un menú con un tamaño específico, también puede incluir TO nRow2, nColumn2 para especificar la ubicación de la esquina inferior derecha del menú. Si incluye FROM nRow1, nColumn1 y omite TO nRow2, nColumn2, Visual FoxPro ajustará automáticamente el tamaño del menú. El menú será tan ancho como lo sea su elemento más largo (si los elementos se crean con DEFINE BAR) y tan largo como sea necesario para mostrar todos los elementos del menú. La longitud del menú está limitada por el tamaño de la ventana principal de Visual FoxPro o de la ventana definida por el usuario donde está incluido el menú. Si un menú no es suficientemente grande como para contener todos los elementos del menú, aparecerá una barra de desplazamiento para que pueda desplazarse por ellos.
IN [WINDOW] WindowName
Coloca un menú en una ventana definida por el usuario especificada con WindowName. Si omite esta cláusula, el menú se situará de forma predeterminada en la ventana principal de Visual FoxPro, a menos que haya una ventana activa definida por el usuario. Si está activa una ventana definida por el usuario, el menú se situará en la ventana activa.IN SCREEN
Sitúa un menú en la ventana principal de Visual FoxPro.FONT cFontName [, nFontSize]
Especifica una fuente predeterminada para el menú. Puede anular la fuente predeterminada para un elemento individual de menú si incluye la cláusula FONT en DEFINE BAR.cFontName especifica el nombre de la fuente y nFontSize especifica el tamaño de la fuente en puntos. Por ejemplo, el comando siguiente crea un menú con la fuente Courier de 12 puntos:
DEFINE POPUP popMyPopup FONT 'Courier', 12
Si la fuente especificada no está disponible, se sustituirá por una fuente de características similares. Si incluye la cláusula FONT pero omite el tamaño en puntos nFontSize, se usará una fuente de 10 puntos.
STYLE cFontStyle
Especifica un estilo de fuente predeterminado para el menú. Puede anular el estilo predeterminado para un elemento individual de menú si incluye la cláusula FONT en DEFINE BAR.Si omite la cláusula STYLE o si el estilo de fuente especificado no está disponible, se utiliza el estilo de fuente Normal.
En la tabla siguiente se indican los estilos de fuente que puede especificar con cFontStyle:
Character Estilo de la fuente B Negrita I Cursiva N Normal Q Opaco - Tachado T Transparente U Subrayado Puede incluir más de un carácter para especificar una combinación de estilos de fuente. Por ejemplo, el comando siguiente especifica Negrita Cursiva:
DEFINE MENU popMyPopup STYLE 'BI'
FOOTER cFooterText
Crea un pie con el texto especificado en cFooterText centrado en el borde inferior del menú.KEY KeyLabel
Especifica una tecla o una combinación de teclas de acceso para un menú. Para obtener una lista de las teclas y combinaciones de teclas disponibles y sus nombres de etiqueta, vea ON KEY LABEL.Incluir KEY equivale a ejecutar el siguiente comando:
ON KEY LABEL KeyLabel ACTIVATE POPUP MenuName
Nota Si ya está definida una macro de teclado con la misma etiqueta de tecla, la macro de teclado tendrá prioridad y el menú no podrá activarse con la tecla o combinación de teclas especificada.
MARGIN
Agrega un espacio adicional a izquierda y a la derecha de cada elemento de menú. Los caracteres de marca se muestran en el espacio situado a la izquierda de los elementos y hay disponibles flechas que indican submenús adicionales en cascada que se muestran a la derecha de los elementos de menú. Si omite MARGIN, los caracteres de marca sobrescribirán el primer carácter de los nombres de los elementos de menú; las flechas jerárquicas sobrescribirán el último carácter de los elementos de menú.Nota Deberá incluir esta cláusula si desea utilizar las cláusulas DEFINE BAR ... PICTURE o PICTRES.
MARK cMarkCharacter
Especifica un carácter que aparecerá a la izquierda de un elemento de menú. El carácter de marca predeterminado es una marca de verificación. La cláusula MARK se pasa por alto y se utiliza el carácter de marca predeterminado en caso de que el menú esté integrado en el menú de sistema de Visual FoxPro. Además, la cláusula MARK también se pasa por alto si FoxFont no es la fuente de la ventana principal de FoxPro o de la ventana definida por el usuario en la que está el menú.MARK se puede incluir para cambiar el carácter de marca predeterminado por el especificado con cMarkCharacter. Si cMarkCharacter incluye más de un carácter, sólo se utilizará el primer carácter como carácter de marca.
Nota Al especificar un carácter de marca no se marca el elemento de menú. Utilice SET MARK OF para marcar un elemento de menú.
La cláusula MARK establece el carácter de marca para todos los elementos del menú. Los caracteres de marca especificados mediante comandos DEFINE BAR tienen prioridad sobre los caracteres de marca especificados con la cláusula MARK de DEFINE POPUP. SET MARK OF se utiliza para desactivar o activar los caracteres de marca y también puede utilizarse para especificar un carácter de marca para un elemento individual de menú o para todos los elementos del mismo.
MESSAGE cMessageText
Muestra un mensaje cuando el usuario selecciona un elemento de menú. El mensaje se incluye en la barra gráfica de estado. Si la barra de estado basada en caracteres se ha activado mediante SET STATUS ON, el mensaje se centrará en la última línea de la ventana principal de Visual FoxPro.MOVER
Coloca una flecha de doble punta () en el cuadro Selector a la izquierda del elemento seleccionado del menú. Puede arrastrar la flecha de doble punta para mover un elemento a otra posición del menú. GETBAR( ) se puede utilizar para determinar en qué lugar del menú está situado cada elemento.No es posible reorganizar los elementos de un menú creado con una cláusula PROMPT.
MULTISELECT
Permite al usuario seleccionar simultáneamente múltiples elementos de un menú. Cuando el usuario elige un elemento de un menú, el carácter de marca se sitúa a la izquierda del elemento.No puede hacer selecciones múltiples en un menú creado con una cláusula PROMPT.
MRKBAR( ) puede utilizarse para determinar las opciones elegidas de un menú.
Si incluye MULTISELECT in DEFINE POPUP, puede que también quiera incluir MARGIN para reservar espacio en cada elemento para el carácter de marca.
En el ejemplo siguiente se crea un menú llamado
popFruits
. Se incluye MULTISELECT para crear un menú que permita elegir varios elementos.Cada uno de los cuatro elementos tiene un carácter de marca distinto. Cuando un usuario elija elementos del menú, éstos se marcarán y una rutina llamada
yourchoice
mostrará los elementos elegidos.CLEAR IF NOT _DOS MODIFY WINDOW SCREEN FONT 'foxfont', 12 ENDIF ACTIVATE SCREEN DEFINE POPUP popFruits FROM 5,5 ; MULTISELECT MARGIN && Create multi-choice menu DEFINE BAR 1 OF popFruits ; PROMPT '\<Apples' MARK CHR(3) && First item DEFINE BAR 2 OF popFruits ; PROMPT '\<Bananas' MARK CHR(4) && Second item DEFINE BAR 3 OF popFruits ; PROMPT '\<Grapes' MARK CHR(5) && Third item DEFINE BAR 4 OF popFruits ; PROMPT '\<Lemons' MARK CHR(6) && Fourth item @ 12,5 SAY 'Your choices:' ON SELECTION POPUP popFruits DO yourchoice && Choice routine ACTIVATE POPUP popFruits PROCEDURE yourchoice && Executed when choice is made @ 13,5 CLEAR FOR gnCount = 1 TO CNTBAR('popFruits') && Loop for # of items IF MRKBAR('popFruits', gnCount) = .T. && Option is marked, ? PRMBAR('popFruits', gnCount) AT 5 && display caption ENDIF NEXT
PROMPT FIELD FieldName
Especifica el nombre de campo de una tabla abierta cuyos registros se convierten en elementos del menú. El menú contendrá un elemento por cada registro de la tabla. Cuando se activa el menú, se selecciona el área de trabajo que contiene la tabla.Sugerencia Si establece un filtro sobre el campo especificado con PROMPT FIELD para utilizarlo en el menú, podrá sacar partido de la optimización Rushmore. Si desea obtener más información acerca de la optimización Rushmore, vea SET OPTIMIZE y Usar Rushmore para agilizar el acceso a los datos en Optimizar aplicaciones.
FieldName también puede contener múltiples nombres de campos y expresiones concatenados con el operador de adición (+). FieldName también puede ser el nombre del campo en una tabla abierta en otra área de trabajo o en una función definida por el usuario.
No hay ningún límite respecto al número de entradas que pueden aparecer en un menú creado con PROMPT FIELD.
PROMPT FILES [LIKE FileSkeleton]
Crea un menú que muestra los nombres de los archivos disponibles en el directorio actual.LIKE FileSkeleton le permite especificar los archivos que se muestran en el menú mediante caracteres comodín. Por ejemplo, para crear un menú que muestre los nombres de tablas del directorio y la unidad predeterminados, incluya el comando siguiente:
PROMPT FILES LIKE *.DBF
Puede crear un menú que muestre los nombres de los archivos de otras unidades o de otros directorios si incluye una especificación de unidad, una especificación de directorio o ambas. Por ejemplo, para crear un menú que muestre los nombres de los archivos de programa de un directorio llamado PROGRAMS en la unidad C, incluya el comando siguiente:
PROMPT FILES LIKE C:\PROGRAMS\*.PRG
PROMPT STRUCTURE
Muestra en el menú los nombres de los campos incluidos en la tabla actual, de acuerdo con la estructura de campos de la tabla. Cuando se activa el menú, se selecciona el área de trabajo que contiene la tabla.RELATIVE
Especifica el orden en el que se colocan los elementos en un menú. Si crea un menú sin la cláusula RELATIVE, cada elemento se coloca en el menú según el orden indicado por el número de barra de elemento. En el menú se reserva espacio para los elementos no definidos. Por ejemplo, si se definen el primer y el tercer elementos y se activa el menú, se incluirá en el menú una línea en blanco reservada para el segundo elemento.Si crea un menú con RELATIVE, los elementos aparecerán en el menú en el orden en que se han definido. No se reservará espacio en el menú para los elementos no definidos.
Definir un menú con RELATIVE también le permite utilizar las cláusulas BEFORE y AFTER en DEFINE BAR para colocar los elementos de un menú de forma relativa a otros elementos. Si crea un menú sin RELATIVE, al incluir BEFORE o AFTER en DEFINE BAR se produce un error.
Ejecute los dos programas de ejemplo siguientes y compare la colocación de los elementos en cada menú.
** RELATIVE Example ** DEFINE POPUP popRelatYes RELATIVE FROM 1,1 DEFINE BAR 4 OF popRelatYes PROMPT '4444' DEFINE BAR 3 OF popRelatYes PROMPT '3333' DEFINE BAR 2 OF popRelatYes PROMPT '2222' DEFINE BAR 1 OF popRelatYes PROMPT '1111' DEFINE BAR 6 OF popRelatYes PROMPT '6666' BEFORE 4 ACTIVATE POPUP popRelatYes ** NON-RELATIVE Example ** DEFINE POPUP popRelatNo FROM 1,1 DEFINE BAR 4 OF popRelatNo PROMPT '4444' DEFINE BAR 3 OF popRelatNo PROMPT '3333' DEFINE BAR 2 OF popRelatNo PROMPT '2222' DEFINE BAR 1 OF popRelatNo PROMPT '1111' DEFINE BAR 6 OF popRelatNo PROMPT '6666' ACTIVATE POPUP popRelatNo
SCROLL
Sitúa una barra de desplazamiento a la derecha del menú que crea. La barra de desplazamiento aparece solamente cuando hay más elementos de los que caben en el menú o si el menú es demasiado largo y no cabe en la ventana principal de Visual FoxPro o en la ventana definida por el usuario en la que está situado.SHORTCUT
Crea un menú contextual. Un menú contextual suele aparecer cuando se hace clic en un botón de selección, de barra de herramientas o de barra de tareas con el botón secundario del mouse. En el menú contextual se muestran los comandos que pertenecen a la región de la pantalla en la que se ha hecho clic con el botón secundario del mouse.Puede incluir MROW( ) y MCOL( ) en la cláusula FROM para activar el menú contextual en la ubicación cuando se haga clic con el mouse.
TITLE cMenuTitleText
Muestra un título en el centro del borde superior del menú. cTitleText especifica el título del menú.COLOR SCHEME nSchemeNumber
Especifica los colores de todos los elementos de un menú. Los colores de los menús creados con DEFINE POPUP se controlan, de forma predeterminada, mediante el esquema de colores 2.COLOR ColorPairList
Especifica los colores de todos los elementos de un menú.Para obtener más información acerca de los esquemas y las parejas de colores, vea Introducción a los colores.
Observaciones
Para situar un conjunto de elementos definidos por usted en un menú, utilice comandos DEFINE BAR. Para situar registros, archivos o campos en un menú, utilice las cláusulas PROMPT FIELD, PROMPT FILES o PROMPT STRUCTURE de DEFINE POPUP.
Al activar y mostrar un menú con ACTIVATE POPUP, puede elegir uno de los elementos del mismo. Según el elemento elegido, puede ejecutarse una rutina o puede mostrarse y activarse otro menú. Un menú que muestra otro menú cuando se elige un elemento se denomina submenú en cascada. Si desea obtener más información acerca de la creación de menús en cascada, vea ON BAR.
Si utiliza el Diseñador de menús para crear un menú, quizá no necesite usar estos comandos. El Diseñador de menús crea automáticamente los comandos para su menú. Este diseñador usa el menú del sistema de Visual FoxPro, que se puede modificar si se agregan los propios elementos de menú.
Para obtener más información acerca de la creación de menús, vea Crear un sistema de menús.
Ejemplo
El ejemplo siguiente usa DEFINE POPUP para crear menús que se activan cuando se elige un título en la barra de menús. En primer lugar, se guarda en memoria la barra de menús actual del sistema con SET SYSMENU SAVE y, a continuación, se eliminan todos los títulos de menús del sistema mediante SET SYSMENU TO.
Se crean dos nuevos títulos de menú del sistema con DEFINE PAD, y DEFINE POPUP crea un menú desplegable para cada título de menú. DEFINE BAR crea elementos en cada uno de los menús. Cuando se elige un título de menú, ON PAD utiliza ACTIVATE POPUP para activar el menú correspondiente.
Al elegir un elemento de un menú, ON SELECTION POPUP usa PROMPT( ) y POPUP( ) para transferir el número de elemento y el nombre de menú al procedimiento CHOICE. CHOICE muestra el texto del elemento elegido y el nombre del menú que lo contiene. Si se elige el elemento Salir del menú Info tarjeta, se restaura el menú de sistema original de Visual FoxPro.
** Name this program DEFINPOP.PRG ** CLEAR SET SYSMENU SAVE SET SYSMENU TO DEFINE PAD convpad OF _MSYSMENU PROMPT '<Conversions' COLOR SCHEME 3 ; KEY ALT+C, '' DEFINE PAD cardpad OF _MSYSMENU PROMPT 'Card <Info' COLOR SCHEME 3 ; KEY ALT+I, '' ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo DEFINE POPUP conversion MARGIN RELATIVE COLOR SCHEME 4 DEFINE BAR 1 OF conversion PROMPT 'Ar<ea' KEY CTRL+E, '^E' DEFINE BAR 2 OF conversion PROMPT '<Length' ; KEY CTRL+L, '^L' DEFINE BAR 3 OF conversion PROMPT 'Ma<ss' ; KEY CTRL+S, '^S' DEFINE BAR 4 OF conversion PROMPT 'Spee<d' ; KEY CTRL+D, '^D' DEFINE BAR 5 OF conversion PROMPT '<Temperature' ; KEY CTRL+T, '^T' DEFINE BAR 6 OF conversion PROMPT 'T<ime' ; KEY CTRL+I, '^I' DEFINE BAR 7 OF conversion PROMPT 'Volu<me' ; KEY CTRL+M, '^M' ON SELECTION POPUP conversion; DO choice IN definpop WITH PROMPT( ), POPUP( ) DEFINE POPUP cardinfo MARGIN RELATIVE COLOR SCHEME 4 DEFINE BAR 1 OF cardinfo PROMPT '<View Charges' ; KEY ALT+V, '' DEFINE BAR 2 OF cardinfo PROMPT 'View <Payments' ; KEY ALT+P, '' DEFINE BAR 3 OF cardinfo PROMPT 'Vie<w Users' ; KEY ALT+W, '' DEFINE BAR 4 OF cardinfo PROMPT '-' DEFINE BAR 5 OF cardinfo PROMPT '<Charges ' DEFINE BAR 6 OF cardinfo PROMPT '-' DEFINE BAR 7 OF cardinfo PROMPT 'E<xit ' ON SELECTION POPUP cardinfo; DO choice IN definpop WITH PROMPT( ), POPUP( ) PROCEDURE choice PARAMETERS mprompt, mpopup WAIT WINDOW 'You chose ' + mprompt + ; ' from popup ' + mpopup NOWAIT IF mprompt = 'Exit' SET SYSMENU TO DEFAULT ENDIF
Vea también
ACTIVATE POPUP | CNTBAR( ) | CREATE MENU | DEFINE BAR | GETBAR( ) | HIDE POPUP | MOVE POPUP | MRKBAR( ) | ON BAR | ON SELECTION BAR | POPUP( ) | PRMBAR( ) | PROMPT( ) | RELEASE POPUPS | SET MARK OF | SET MESSAGE | SIZE POPUP | SHOW POPUP