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 #
| Userobject | u_pbt_menubar |
| Classe de itens | n_pbt_menubar_item (uma entrada) |
| Serve para | Dar à sua janela a barra de menus da aplicação, com o mesmo tema de tudo o resto |
| Princípio | Declara 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ível | Acrescentado por | Chave |
|---|---|---|
| O menu da barra | of_add_menu | o seu id |
| A entrada de um menu | of_add_item | o endereço menu/id |
| A subentrada de uma entrada | of_add_item | o 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_separatortraça uma linha onde o chamar, e depois não há nada para reler.
Propriedades #
| Propriedade | Tipo | Predefinição | Papel |
|---|---|---|---|
is_theme_style | string | fluent | Estilo visual do componente (constantes THEME_STYLE_*) |
is_theme_mode | string | light | Variante clara ou escura (constantes THEME_MODE_*) |
il_theme_accent | long | -1 | Cor de destaque deste componente (-1 = destaque do tema) |
is_tooltip | string | "" | Dica simples apresentada ao passar sobre o componente |
is_super_tooltip_title | string | "" | Título da dica enriquecida (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto da dica enriquecida (marcação rica aceite) |
is_super_tooltip_image | string | "" | Imagem da dica enriquecida |
Propriedades de uma entrada — n_pbt_menubar_item #
Obtidas através de of_item(menu/id):
| Propriedade | Tipo | Predefinição | Papel |
|---|---|---|---|
is_text | string | — | Muda a etiqueta da entrada, a quente |
ib_enabled | boolean | true | Entrada ativa; uma entrada desativada deixa de responder ao clique |
ib_visible | boolean | true | Entrada retirada da lista sem ser eliminada — submenu e atalho adormecidos com ela; mantém a sua chave e volta tal como estava |
is_shortcut | string | "" | 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_checked | boolean | false | Marca apresentada à frente da entrada — para uma opção que se liga e desliga |
is_tooltip | string | "" | Dica desta entrada |
is_super_tooltip_title | string | "" | Título da sua dica enriquecida |
is_super_tooltip_text | string | "" | Texto da sua dica enriquecida (marcação rica aceite) |
is_super_tooltip_image | string | "" | Imagem da sua dica enriquecida |
Métodos #
| Método | Papel |
|---|---|
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_item | Handle 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_menu | Handle 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) → long | Retira 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) → long | Retira 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 #
| Evento | Disparado 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_heightdiz-lhe de quanto.
Com o teclado #
| Tecla | Efeito |
|---|---|
| Alt | Dá o foco à barra, como em qualquer aplicação Windows |
| Setas | Percorrem os menus e as suas entradas; a direita abre uma subentrada, a esquerda sobe |
| Enter ou Espaço | Escolhe a entrada com o foco (ue_item_selected) |
| Esc | Fecha 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 #
- Dê a cada entrada um identificador de negócio estável (
"save"): é esse que recebe emue_item_selected, não uma etiqueta que muda com a língua. - Desative em vez de retirar: uma entrada ausente deixa o utilizador à procura, uma desativada diz-lhe que existe e que lhe falta alguma coisa.
- Enquadre a construção com
of_set_redraw(false)/of_set_redraw(true): uma barra completa são trinta chamadas em pouco tempo. - Reposicione o que está sob a barra no
ue_auto_height— a altura depende do tema e do corpo de letra, não é a mesma em todo o lado. - Para as etiquetas, passe por
of_set_translationse a sua aplicação for multilingue: veja o capítulo da língua.
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.
| Membros | Função | Detalhado em |
|---|---|---|
of_count · of_keys_at · of_has | Percorrer o que o componente contém | 3.2 Os items |
of_reset | Repor o componente a zero | 3.6 Repor um componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atalhos de teclado do componente | 3.5 Os atalhos de teclado |
of_is_created · of_is_ready · of_get_last_error | Se nasceu, se está pronto, o que falhou | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar a renderização como imagem | 3.8 Exportar a representação como imagem |
of_set_redraw | Agrupar as alterações num único repinte | 3.10 Boas práticas |
of_preload_icons | Ícones mostrados sem atraso | Apresentação instantânea: of_icon |
of_set_translation | Traduzir uma legenda do componente | 5.2 Adaptar uma etiqueta: of_set_translation |
of_focus_webview | Dar o foco ao componente | 6.4 Teclado e focus |
of_print · of_print_to_pdf | Imprimir, ou escrever um PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar uma propriedade pelo nome | 3.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.