DEFINE BAR (Comando)

Crea un elemento en un menú creado con DEFINE POPUP.

DEFINE BAR nMenuItemNumber1 | SystemItemName OF MenuName 
   PROMPT cMenuItemText [PICTURE cFileName] [PICTRES cMenubarName]
   [BEFORE nMenuItemNumber2 | AFTER nMenuItemNumber3]
   [FONT cFontName [, nFontSize]] [STYLE cFontStyle]
   [KEY KeyLabel [, cKeyText]] [MARK cMarkCharacter]
   [MESSAGE cMessageText] [SKIP [FOR lExpression]] 
   [COLOR SCHEME nSchemeNumber | COLOR ColorPairList] 
   [MRU] [INVERT]

Parámetros

  • nMenuItemNumber1
    Especifica el número de elemento del menú. Este número permite hacer referencia al elemento del menú en otros comandos y funciones.

  • SystemItemName
    Especifica un elemento de menú en el menú de sistema de Visual FoxPro. Por ejemplo, para proporcionar acceso al elemento de menú Print (Imprimir), ejecute la línea siguiente:

    DEFINE BAR _MFI_PRINT OF popMyPopup PROMPT "Print..."
    

    No están disponibles todos los elementos de menú del sistema de Visual FoxPro. Utilice SYS(2013) para obtener una lista de todos los nombres de menús del sistema Visual FoxPro que están disponibles.

  • OF MenuName
    Especifica el nombre del menú en el que se sitúan los elementos.

  • PROMPT cMenuItemText
    Especifica el texto que aparece en el elemento

    Puede crear y situar una barra de separación entre los elementos si especifica una barra inversa y un guión (\-) en cMenuItemText. Una barra de separación sirve para separar los grupos de elementos en un menú. Por ejemplo, si incluye el comando siguiente en una definición de menú, se creará una barra de separación entre el tercero y el quinto elemento:

    DEFINE BAR 4 OF popMyPopup PROMPT '\-'
    

    Puede crear menús multicolumna si especifica una barra inversa y una barra vertical (\|) al principio de cMenuItemText. El elemento de menú inicia una nueva columna y los elementos de menú sucesivos se colocan en la misma columna hasta que se encuentre otro menú que comience con \|. Por ejemplo, si incluye el siguiente comando en una definición de menú, se crea una nueva columna en el menú:

    DEFINE BAR 4 OF popMyPopup PROMPT '\|Start a new column'
    

    Puede crear una tecla de acceso para un elemento de menú si coloca una barra inversa y un signo menor que (\<) delante del carácter que quiera que sea la tecla de acceso. Por ejemplo:

    DEFINE POPUP popReceive
    DEFINE BAR 1 OF popReceive PROMPT '\<Invoices'
    DEFINE BAR 2 OF popReceive PROMPT 'In\<quiry'
    ACTIVATE POPUP popReceive
    

    El usuario puede presionar la tecla I para elegir Invoices (Facturas) en el menú Receive (Recibir) y la tecla Q para elegir Inquiry (Información) en el mismo menú.

  • PICTURE cPictureName
    Permite utilizar con la barra de menús una imagen existente. Puede especificar cPictureName en una ruta de acceso relativa.

  • PICTRES cMenubarName
    Especifica un nombre de barra de menús del sistema como recurso para un menú. Si cPictureName = "", el contenido del campo Resname de la tabla .mnx se trata como un nombre de archivo para su uso en DEFINE BAR…PICTURE. Esta funcionalidad es nueva para esta versión de Visual FoxPro.

    Nota   Debe incluir una cláusula MARGIN en el comando DEFINE POPUP correspondiente para que las cláusulas PICTURE o PICTRES funcionen correctamente.

  • BEFORE nMenuItemNumber2
    Sitúa un elemento de menú delante del elemento especificado con nMenuItemNumber2.

  • AFTER nMenuItemNumber3
    Sitúa un elemento de menú detrás del especificado con nMenuItemNumber3.

    Nota   Para que BEFORE o AFTER tengan algún efecto, es necesario incluir la cláusula RELATIVE al crear el menú con DEFINE POPUP.

    Puede incluir _MFIRST y _MLAST en las cláusulas BEFORE y AFTER. Si incluye _MFIRST en la cláusula BEFORE, el elemento de menú será el primero del mismo. Si incluye _MFIRST en la cláusula AFTER, el elemento del menú será el segundo del mismo. Si incluye _MLAST en la cláusula AFTER, el elemento de menú será el último del mismo. Si incluye _MLAST en la cláusula BEFORE, el elemento será el penúltimo del menú.

    Los menús que se crean con DEFINE POPUP RELATIVE no incluyen el espacio para elementos de menú no definidos. Por ejemplo, si define los elementos 1, 2, 4 y 5 de un menú, no se reservará espacio para el elemento 3. Puede insertar el elemento 3 más tarde. El menú se expandirá para acomodarlo.

    El programa siguiente muestra las diferencias en el orden y colocación de los elementos en cada tipo de menú:

       * DEFINE POPUP... 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
    
       * DEFINE POPUP... non-relative example
       DEFINE POPUP popRelatNo FROM 1,10
       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 popRelatYes NOWAIT
                 && Display "relative" poup
       ACTIVATE POPUP popRelatNo
                 && Display "non-relative" popup
    
  • FONT cFontName [, nFontSize]
    Especifica una fuente para el elemento de menú. cFontName especifica el nombre de la fuente deseada y nFontSize indica su tamaño en puntos. Por ejemplo, el comando siguiente crea un elemento de menú con la fuente Courier de 12 puntos:

    DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' 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 para el elemento de menú. Si omite la cláusula STYLE, se utilizará el estilo de fuente Normal. Si el estilo de fuente especificado no está disponible, se sustituirá por otro de características similares.

    Éstos son 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 BAR 1 OF popReceive PROMPT '\<Invoices' STYLE 'BI'
    
  • KEY KeyLabel [, cKeyText]
    Especifica una tecla o combinación de teclas de acceso para un elemento de menú. No es necesario que el menú esté activado para elegir el elemento, al contrario que cuando se asigna una tecla de acceso mediante una barra inversa y un signo menor que (\<).

    Para obtener una lista de las teclas y combinaciones de teclas disponibles y sus nombres de etiqueta, vea ON KEY LABEL.

    Nota   Si ya está definida una macro de teclado con la misma etiqueta de tecla, la macro de teclado tendrá preferencia y no se podrá seleccionar el elemento de menú con la tecla o combinación de teclas que especifique.

    Incluya cKeyText para sustituir la etiqueta de tecla por su propio texto. Puede utilizar cualquier carácter en el parámetro cKeyText; por ejemplo, puede utilizar el texto "^B" para indicar una etiqueta de tecla para CTRL+B. Por ejemplo, si incluye KEY CTRL+B se incluirá el texto CTRL+B a la derecha del título de menú. Si especifica KEY CTRL+B, "^B" aparecerá ^+B en el menú. Puede suprimir la presentación de una etiqueta de tecla si especifica la cadena vacía para cKeyText.

  • MARK cMarkCharacter
    Especifica un carácter de marca que aparece a la izquierda del elemento de 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.

    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ú que contenga el elemento 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 Visual FoxPro o de la ventana definida por el usuario en la que está incluido el menú que contiene el elemento en cuestión.

    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ú.

    Los caracteres de marca especificados con DEFINE BAR tienen prioridad sobre los caracteres de marca especificados con MARK en 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 de menú individual o para todos los elementos del menú.

  • 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 gráfica de estado se ha desactivado con SET STATUS BAR OFF, el mensaje se centrará en la última línea de la ventana principal de Visual FoxPro.

  • SKIP [FOR lExpression]
    Especifica una condición por la cual, si lExpression da como resultado verdadero (.T.), el elemento de menú queda desactivado, lo que impide que el usuario lo elija; si da como resultado falso (.F.), el elemento de menú estará activado. Los elementos de menú desactivados aparecen con los colores correspondientes a desactivado.

    También puede desactivar un elemento de menú si coloca una barra inversa (\) delante del texto del indicador. Por ejemplo:

    DEFINE BAR 1 OF popReceive PROMPT '\Invoices'
    

    No se puede seleccionar un elemento de menú desactivado con SKIP o \. Es posible que los menús que haya creado y que incluyan expresiones SKIP FOR no funcionen correctamente si los asistentes o el corrector ortográfico están activos.

    Las expresiones SKIP FOR dependen normalmente del valor de las variables de salto, pero estas variables no permanecen visibles para los menús cuando el corrector ortográfico o los asistentes están activos. En el código de inicialización de las aplicaciones del corrector ortográfico y los asistentes (SPELLCHK.APP y GENGRAPH.APP respectivamente), se emite intencionadamente PRIVATE ALL. Esto oculta las variables que se pasan por alto en los menús definidos por el usuario y provoca un mensaje de error al elegir un menú.

    Para corregir esta situación, se coloca el siguiente código al principio de las aplicaciones del corrector ortográfico y los asistentes:

       IF TYPE("_memvarmask") = "C" and !EMPTY(_memvarmask)
          PRIVATE ALL EXCEPT &_memvarmask
       ELSE
          PRIVATE ALL
       ENDIF
    

    Suponga que es necesario pasar por alto un elemento específico de menú cuando la variable llamada "skipvar" dé como resultado verdadero. Debe incluir las siguientes líneas en el código de inicio del menú para hacer uso de la variable _MEMVARMASK:

       PUBLIC _memvarmask
       _memvarmask = "skipvar"
       STORE .T. TO skipvar     && Skip initially.
    

    Para crear un conjunto de variables de salto, incluya las siguientes líneas en el código de inicio del menú:

       PUBLIC _memvarmask
       _memvarmask = "skip*"
       STORE .T. TO skipthis, skipthat  && Skip initially.
    

    Cuando ejecute el corrector ortográfico y los asistentes, no ocultarán las variables de las expresiones SKIP FOR; así evitará los mensajes de error que pueden surgir cuando se activan el corrector ortográfico o los asistentes.

    Observe que _MEMVARMASK no es una variable del sistema.

  • COLOR SCHEME nSchemeNumber
    Especifica los colores de un elemento de menú individual, para no aplicar los colores predeterminados o los colores especificados con DEFINE POPUP.

  • COLOR ColorPairList
    Especifica los colores de un elemento de menú individual, para no aplicar los colores predeterminados o los colores especificados con DEFINE POPUP. Es posible especificar los colores de todos los elementos de menú, caracteres de marca y mensajes.

    De forma predeterminada, los colores de los elementos de menú están determinados por el esquema número 2 del conjunto de colores actual.

    Para obtener más información acerca de los esquemas y las parejas de colores, vea Introducción a los colores.

  • MRU
    Especifica que el menú muestre corchetes angulares verticales que indican un menú de tipo Usados más recientemente. Deberá proporcionar una secuencia de comandos que controle dinámicamente los menús y agregue las barras de menú nuevas. Para los menús invocados con la palabra clave MRU, Visual FoxPro impone un retardo de 1 ó 2 segundos antes de desencadenar el comando ON SELECTION BAR. El usuario puede hacer clic en la barra de menús para desencadenar inmediatamente el comando ON SELECTION BAR.

    Si utiliza la palabra clave MRU, Visual FoxPro ignorará PROMPT y las demás palabras clave asociadas con la barra.

    DEFINE BAR 4 OF popMyPopup MRU
    
  • INVERT
    Especifica que el menú se muestre con un efecto de bajo relieve.

    DEFINE BAR 4 OF popMyPopup PROMPT '\|Start a new column' ;
       PICTRES _med_copy INVERT
    

Observaciones

DEFINE BAR se utiliza con DEFINE POPUP para crear menús. Con DEFINE POPUP se crea un menú y se le asigna nombre. Los elementos de menú se sitúan en el menú con un conjunto de comandos DEFINE 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ú. Si desea obtener más información acerca de la creación de menús, vea Diseñar menús y barras de herramientas.

También puede crear un menú que contenga registros o campos de una tabla o una lista de archivos disponibles en disco. Para obtener más información al respecto, consulte las cláusulas PROMPT FIELD, PROMPT STRUCTURE y PROMPT FILES en DEFINE POPUP.

Utilice ON BAR para crear un submenú en cascada para un elemento de menú.

Ejemplo

El ejemplo siguiente utiliza DEFINE BAR para crear elementos en 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 títulos nuevos de menús del sistema con DEFINE PAD, y DEFINE POPUP se emplea para crear un menú desplegable para cada título de menú. DEFINE BAR se emplea para crear elementos en cada menú. 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 la indicación del elemento elegido y el nombre del menú que lo contiene. Si elige Salir en el menú Card Info (Info tarjeta), se restaura el menú de sistema original de Visual FoxPro.

_** Name this program DEFINBAR.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 definbar 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 definbar 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 | DEACTIVATE POPUP | DEFINE POPUP | HIDE POPUP | RELEASE BAR | SET MESSAGE | SHOW POPUP