PBToolboxAI v3 ← Site

menubar — u_pbt_menubar #

← Referencia de componentes · Índice de la guía

Barra de menús de la aplicación: menús, submenús, entradas marcables, separadores, iconos y atajos — todo dibujado por la biblioteca, sin ningún menú de Windows.

▶ Verlo en vivo — Aplicación de demostración, mosaico Menu bar: la vista previa, el código que lo genera y esta página, uno al lado del otro.


De un vistazo #

Userobjectu_pbt_menubar
Clase de ítemsn_pbt_menubar_item (una entrada)
Sirve paraDar a su ventana la barra de menús de la aplicación, con el mismo tema que todo lo demás
PrincipioUsted declara los menús y luego sus entradas; cada entrada se recupera por su dirección menu/id

Inicio rápido #

// evento open de la ventana
uo_menus.of_add_menu(/*key*/ "file", /*text*/ "Archivo")
uo_menus.of_add_item(/*keys*/ "file/open", /*text*/ "Abrir")
uo_menus.of_add_item(/*keys*/ "file/save", /*text*/ "Guardar")
// event ue_item_selected : (string as_keys)
choose case as_keys
	case "open"; of_ouvrir()
	case "save"; of_enregistrer()
end choose

El modelo: tres niveles, una clave por nivel #

Una barra de menús tiene tres niveles, y cada uno se indica con su clave:

NivelAñadido porClave
El menú de la barraof_add_menusu id
La entrada de un menúof_add_itemla dirección menu/id
La subentrada de una entradaof_add_itemla dirección menu/entrada/subentrada — tres niveles

Un id de entrada solo es único dentro de su menú: por eso of_item pide dos. Dos menús pueden así tener cada uno su entrada "open" sin estorbarse.

Un separador no tiene clave: of_add_separator traza una línea donde usted lo llama, y después no hay nada que releer.


Propiedades #

PropiedadTipoPredeterminadoFunción
is_theme_stylestringfluentEstilo visual del componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara u oscura (constantes THEME_MODE_*)
il_theme_accentlong-1Color de acento de este componente (-1 = acento del tema)
is_tooltipstring""Información sobre herramientas sencilla al pasar por el componente
is_super_tooltip_titlestring""Título de la información enriquecida (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto de la información enriquecida (se acepta marcado enriquecido)
is_super_tooltip_imagestring""Imagen de la información enriquecida

Propiedades de una entrada — n_pbt_menubar_item #

Obtenidas mediante of_item(menu/id):

PropiedadTipoPredeterminadoFunción
is_textstring—Cambia la etiqueta de la entrada, en caliente
ib_enabledbooleantrueEntrada activa; una entrada atenuada ya no responde al clic
ib_visiblebooleantrueEntrada retirada de la lista sin ser eliminada — submenú y atajo dormidos con ella; conserva su clave y vuelve tal cual
is_shortcutstring""El acelerador mostrado a la derecha de la entrada (Ctrl+S) — y activo: la combinación lanza ue_item_selected para esa entrada, esté donde esté el foco. En un menú se aprenden los atajos de una aplicación; una tecla mostrada que no hace nada enseña lo contrario. La cadena vacía retira ambos
ib_checkedbooleanfalseMarca de verificación delante de la entrada — para una opción que se activa y se desactiva
is_tooltipstring""Información sobre herramientas de esta entrada
is_super_tooltip_titlestring""Título de su información enriquecida
is_super_tooltip_textstring""Texto de su información enriquecida (se acepta marcado enriquecido)
is_super_tooltip_imagestring""Imagen de su información enriquecida

Métodos #

MétodoFunción
of_add_menu (string as_key, string as_text)Añade un menú a la barra. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_add_item (string as_keys, string as_text)Añade una entrada a un menú. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)Lo mismo, con el icono, la marca y el estado inicial. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_add_separator (string as_keys)Traza una línea de separación al final del menú. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_item (string as_keys) → n_pbt_menubar_itemHandle de una entrada, para fijar sus propiedades. as_key acepta las dos escrituras: el identificador desnudo de la hoja y la ruta completa con las claves unidas por / — of_item("file", "export/pdf"). Es la ruta que devuelve ue_item_selected: sus dos argumentos se vuelven a dar tal cual aquí. Un identificador desnudo sólo es único dentro de su submenú
of_menu (string as_key) → n_pbt_menubar_menuHandle de un menú de primer nivel, para renombrarlo o apagarlo. of_add_menu solo podía hacerlo al crearlo: atenuar Admin al cerrar sesión obligaba a reconstruir toda la barra; ib_visible lo retira de la barra, entradas y atajos dormidos con él
of_remove_item (string as_keys) → longQuita una entrada; las demás quedan. as_key acepta las dos escrituras de of_item: la ruta completa (export/pdf) o el id desnudo. Sin ella solo existía of_clear, que lo vacía todo — el menú dinámico más común, una lista de archivos recientes, obligaba a arrasar toda la barra en cada documento abierto. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_remove_menu (string as_key) → longQuita un menú de primer nivel, con sus entradas. La barra se redibuja y su altura se vuelve a anunciar. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_clear ( )Vacía la barra — menús y entradas. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_reset ( )Vacía la barra y devuelve todas las propiedades a su valor predeterminado. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_set_redraw (boolean)Agrupa una ráfaga de cambios en un solo renderizado. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_save_as_png (string) · of_save_as_jpg (string)Exporta el renderizado como imagen. Devuelve 0 una vez escrita la imagen, -4 si la escritura falla, -2 si el componente no está creado

Eventos #

EventoSe dispara cuando
ue_menu_opening (string as_key)Lanzado en el instante en que se pulsa un menú de primer nivel, antes de que se construya su desplegable. Es el momento de activar, atenuar o rellenar sus entradas justo a tiempo — sin él había que mantener toda la barra al día con el estado de la aplicación en permanencia, o mostrar entradas que mienten
ue_item_selected (string as_keys)El usuario ha elegido una entrada. as_key es una ruta en cuanto la entrada está anidada — export/pdf, no pdf: la hoja sola no dice de qué submenú sale, y dos submenús pueden tener cada uno la suya. Una entrada de primer nivel conserva su identificador desnudo. Ese mismo texto se devuelve tal cual a of_item
ue_auto_height (long al_height)La barra anuncia la altura que necesita — recoloque lo que haya debajo
ue_ready ( )El componente terminó de cargar; todo lo enviado antes se ha reproducido
ue_runtime_missing ( )Falta el runtime WebView2: el componente queda vacío
ue_bg_color (long al_color)El componente calculó su color de fondo de tema; el userobject ya lo adoptó (backcolor)

La altura no se fija, se anuncia. Una barra de menús no se desplaza: una altura fija solo puede producir espacio vacío bajo la barra o menús truncados. Por eso siempre se ajusta, y ue_auto_height le dice en cuánto.


Con el teclado #

TeclaEfecto
AltDa el foco a la barra, como en cualquier aplicación de Windows
FlechasRecorren los menús y sus entradas; la derecha abre una subentrada, la izquierda vuelve arriba
Intro o EspacioElige la entrada con el foco (ue_item_selected)
EscCierra el menú abierto y luego devuelve el foco

Ejemplos #

Una barra de menús completa #

uo_menus.of_set_redraw(false)

// El menu Archivo, con un icono en Abrir y una linea antes de Salir
uo_menus.of_add_menu(/*key*/ "file", /*text*/ "F")
uo_menus.of_add_item(/*keys*/ "file/open", /*text*/ "O", /*image*/ "mono:img\packimages.dll:svg/samples/folder-open", /*checked*/ false)
uo_menus.of_add_separator(/*keys*/ "file")
uo_menus.of_add_item(/*keys*/ "file/quit", /*text*/ "Q")

// Un submenu: Exportar, y luego sus dos formatos
uo_menus.of_add_item(/*keys*/ "file/export", /*text*/ "E")
uo_menus.of_add_item(/*keys*/ "file/export/csv", /*text*/ "CSV")
uo_menus.of_add_item(/*keys*/ "file/export/pdf", /*text*/ "PDF")

// El menu Ver: una opcion que se marca
uo_menus.of_add_menu(/*key*/ "view", /*text*/ "V")
uo_menus.of_add_item(/*keys*/ "view/grid", /*text*/ "G", /*image*/ "", /*checked*/ true)

uo_menus.of_set_redraw(true)

Marcar, desmarcar, atenuar #

// El usuario ha invertido la visualizacion de la cuadricula
uo_menus.of_item(/*keys*/ "view/grid").ib_checked = not uo_menus.of_item(/*keys*/ "view/grid").ib_checked
// Una entrada que ya no tiene sentido se atenua, no desaparece:
// el usuario debe poder ver que existe
uo_menus.of_item(/*keys*/ "file/save").ib_enabled = false

Reconstruir la barra #

// Cambiar de espacio de trabajo: se vacia y se vuelve a poner
// of_set_redraw evita repintar en cada linea
uo_menus.of_set_redraw(false)
uo_menus.of_clear()
uo_menus.of_add_menu(/*key*/ "tools", /*text*/ "T")
uo_menus.of_set_redraw(true)

Buenas prácticas #

Heredado de la base común #

Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.

MiembrosFunciónDetallado en
of_count · of_keys_at · of_hasRecorrer lo que el componente contiene3.2 Los items
of_resetPoner el componente a cero3.6 Poner un componente a cero: of_reset()
of_register_shortcut · of_clear_shortcutsAtajos de teclado del componente3.5 Los atajos de teclado
of_is_created · of_is_ready · of_get_last_errorSi ha nacido, si está listo, qué ha fallado3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar el render como imagen3.8 Exportar la representación como imagen
of_set_redrawAgrupar los cambios en un solo repintado3.10 Buenas prácticas
of_preload_iconsIconos mostrados sin retardoVisualización instantánea: of_icon
of_set_translationTraducir una etiqueta del componente5.2 Adaptar una etiqueta: of_set_translation
of_focus_webviewDar el foco al componente6.4 Teclado y foco
of_print · of_print_to_pdfImprimir, o escribir un PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar una propiedad por su nombre3.1 El motor de propiedades

Dos ayudas no se heredan: of_icon y of_escape_markup viven en n_pbt_utils. Declare uno — n_pbt_utils lnv_utils, nada que crear — y llámelas sobre él.


← Referencia de componentes · Índice de la guía