PBToolboxAI v3 ← Site

menubar — u_pbt_menubar #

← Referência dos componentes · Índice do guia

Barra de menus da aplicação: menus, submenus, entradas marcáveis, separadores, ícones e atalhos — tudo desenhado pela biblioteca, sem qualquer menu do Windows.

▶ Ver ao vivo — Aplicação de demonstração, mosaico Menu bar: a pré-visualização, o código que o produz e esta página, lado a lado.


Em resumo #

Userobjectu_pbt_menubar
Classe de itensn_pbt_menubar_item (uma entrada)
Serve paraDar à sua janela a barra de menus da aplicação, com o mesmo tema de tudo o resto
PrincípioDeclara os menus e depois as suas entradas; cada entrada volta a encontrar-se pelo endereço menu/id

Início rápido #

// evento open da janela
uo_menus.of_add_menu(/*key*/ "file", /*text*/ "Ficheiro")
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

O modelo: três níveis, uma chave por nível #

Uma barra de menus tem três níveis, e cada um indica-se pela sua chave:

NívelAcrescentado porChave
O menu da barraof_add_menuo seu id
A entrada de um menuof_add_itemo endereço menu/id
A subentrada de uma entradaof_add_itemo endereço menu/entrada/subentrada — três níveis

Um id de entrada só é único dentro do seu menu: por isso of_item pede dois. Dois menus podem assim ter cada um a sua entrada "open" sem se estorvarem.

Um separador não tem chave: of_add_separator traça uma linha onde o chamar, e depois não há nada para reler.


Propriedades #

PropriedadeTipoPredefiniçãoPapel
is_theme_stylestringfluentEstilo visual do componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara ou escura (constantes THEME_MODE_*)
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque do tema)
is_tooltipstring""Dica simples apresentada ao passar sobre o componente
is_super_tooltip_titlestring""Título da dica enriquecida (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto da dica enriquecida (marcação rica aceite)
is_super_tooltip_imagestring""Imagem da dica enriquecida

Propriedades de uma entrada — n_pbt_menubar_item #

Obtidas através de of_item(menu/id):

PropriedadeTipoPredefiniçãoPapel
is_textstring—Muda a etiqueta da entrada, a quente
ib_enabledbooleantrueEntrada ativa; uma entrada desativada deixa de responder ao clique
ib_visiblebooleantrueEntrada retirada da lista sem ser eliminada — submenu e atalho adormecidos com ela; mantém a sua chave e volta tal como estava
is_shortcutstring""O acelerador mostrado à direita da entrada (Ctrl+S) — e activo: a combinação levanta ue_item_selected para essa entrada, esteja onde estiver o foco. Num menu aprendem-se os atalhos de uma aplicação; uma tecla mostrada que nada faz ensina o contrário. A cadeia vazia retira ambos
ib_checkedbooleanfalseMarca apresentada à frente da entrada — para uma opção que se liga e desliga
is_tooltipstring""Dica desta entrada
is_super_tooltip_titlestring""Título da sua dica enriquecida
is_super_tooltip_textstring""Texto da sua dica enriquecida (marcação rica aceite)
is_super_tooltip_imagestring""Imagem da sua dica enriquecida

Métodos #

MétodoPapel
of_add_menu (string as_key, string as_text)Acrescenta um menu à barra. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_add_item (string as_keys, string as_text)Acrescenta uma entrada a um menu. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)O mesmo, com o ícone, a marca e o estado inicial. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado
of_add_separator (string as_keys)Traça uma linha de separação no fim do menu. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_item (string as_keys) → n_pbt_menubar_itemHandle de uma entrada, para definir as suas propriedades. as_key aceita as duas escritas: o identificador nu da folha e o caminho completo com as chaves unidas por / — of_item("file", "export/pdf"). É o caminho que ue_item_selected devolve: os seus dois argumentos voltam tal e qual para aqui. Um identificador nu só é único dentro do seu submenu
of_menu (string as_key) → n_pbt_menubar_menuHandle de um menu de primeiro nível, para o renomear ou apagar. of_add_menu só o podia fazer na criação: esbater Admin ao terminar sessão obrigava a reconstruir toda a barra; ib_visible retira-o da barra, entradas e atalhos adormecidos com ele
of_remove_item (string as_keys) → longRetira uma entrada; as outras ficam. as_key aceita as duas escritas de of_item: o caminho completo (export/pdf) ou o id nu. Sem ela só havia of_clear, que esvazia tudo — o menu dinâmico mais comum, uma lista de ficheiros recentes, obrigava a arrasar toda a barra em cada documento aberto. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado
of_remove_menu (string as_key) → longRetira um menu de primeiro nível, com as suas entradas. A barra é redesenhada e a sua altura reanunciada. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_clear ( )Esvazia a barra — menus e entradas. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_reset ( )Esvazia a barra e repõe todas as propriedades no seu valor predefinido. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_set_redraw (boolean)Agrupa uma rajada de alterações num único desenho. Devolve 0 depois de aplicado, -2 se o componente não estiver criado
of_save_as_png (string) · of_save_as_jpg (string)Exporta o desenho como imagem. Devolve 0 depois de a imagem ser escrita, -4 se a escrita falhar, -2 se o componente não estiver criado

Eventos #

EventoDisparado quando
ue_menu_opening (string as_key)Levantado no instante em que se clica um menu de primeiro nível, antes de o seu menu pendente ser construído. É o momento de activar, esbater ou preencher as suas entradas mesmo a tempo — sem ele era preciso manter toda a barra a par do estado da aplicação em permanência, ou mostrar entradas que mentem
ue_item_selected (string as_keys)O utilizador escolheu uma entrada. as_key é um caminho assim que a entrada está aninhada — export/pdf, não pdf: a folha sozinha não diz de que submenu saiu, e dois submenus podem ter cada um o seu. Uma entrada de primeiro nível mantém o seu identificador nu. Esse mesmo texto devolve-se tal e qual a of_item
ue_auto_height (long al_height)A barra anuncia a altura de que precisa — reposicione o que estiver por baixo
ue_ready ( )O componente acabou de carregar; tudo o que foi enviado antes foi reproduzido
ue_runtime_missing ( )O runtime WebView2 está ausente: o componente fica vazio
ue_bg_color (long al_color)O componente calculou a sua cor de fundo do tema; o userobject já a adotou (backcolor)

A altura não se define, anuncia-se. Uma barra de menus não desliza: uma altura fixa só pode produzir espaço vazio sob a barra ou menus truncados. Ajusta-se portanto sempre, e ue_auto_height diz-lhe de quanto.


Com o teclado #

TeclaEfeito
AltDá o foco à barra, como em qualquer aplicação Windows
SetasPercorrem os menus e as suas entradas; a direita abre uma subentrada, a esquerda sobe
Enter ou EspaçoEscolhe a entrada com o foco (ue_item_selected)
EscFecha o menu aberto e depois devolve o foco

Exemplos #

Uma barra de menus completa #

uo_menus.of_set_redraw(false)

// O menu Ficheiro, com um icone em Abrir e uma linha antes de Sair
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")

// Um submenu: Exportar, e depois os seus dois 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")

// O menu Ver: uma opcao 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, desativar #

// O utilizador inverteu a apresentacao da grelha
uo_menus.of_item(/*keys*/ "view/grid").ib_checked = not uo_menus.of_item(/*keys*/ "view/grid").ib_checked
// Uma entrada que deixou de fazer sentido e desativada, nao desaparece:
// o utilizador tem de poder ver que existe
uo_menus.of_item(/*keys*/ "file/save").ib_enabled = false

Reconstruir a barra #

// Mudar de area de trabalho: esvazia-se e volta-se a por
// of_set_redraw evita repintar em cada linha
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)

Boas práticas #

Herdado da base comum #

Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.

MembrosFunçãoDetalhado em
of_count · of_keys_at · of_hasPercorrer o que o componente contém3.2 Os items
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades

Duas ajudas não são herdadas: of_icon e of_escape_markup vivem em n_pbt_utils. Declare um — n_pbt_utils lnv_utils, nada a criar — e chame-as nele.


← Referência dos componentes · Índice do guia