ribbon — u_pbt_ribbon #
← Referência dos componentes · Índice do guia
Faixa de opções ao estilo Office: separadores, grupos, doze tipos de controlos ricos, menu da aplicação, barra de acesso rápido, separadores contextuais com faixa e keytips.
▶ Ver ao vivo — Aplicação de demonstração, mosaico Ribbon: a pré-visualização, o código que o produz e esta página, lado a lado.
Em resumo #
| Userobject | u_pbt_ribbon |
| Classes de items | n_pbt_ribbon_tab (separador), n_pbt_ribbon_group (grupo), n_pbt_ribbon_item (controlo), n_pbt_ribbon_menu_item (entrada de menu), n_pbt_ribbon_ctx_group (grupo de separadores contextuais) |
| Serve para | Substituir uma barra de menus e as respetivas barras de ferramentas por uma interface de comando moderna, legível e hierarquizada |
| Altura | Intrínseca: a faixa de opções ajusta-se sempre ao seu conteúdo, nada há para ativar — ver Altura automática |
| Limite no modo de demonstração | 2 separadores no máximo — ver o modo de demonstração |
A regra de ouro: tudo passa pelo caminho #
A faixa de opções é uma hierarquia de quatro níveis: separador → grupo → controlo → entrada de menu. Não há qualquer identificador global a gerir: cada objeto é alcançado pelo caminho que a ele conduz e cada adição é feita sobre o handle do elemento pai.
// Ler ou comandar um controlo: o caminho completo, sempre
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste").ib_enabled = false
Daqui resultam duas consequências práticas e confortáveis: dois grupos diferentes podem utilizar o mesmo identificador de controlo sem colidirem, e os eventos entregam o caminho completo — sabe-se sempre de onde vem o clique.
Início rápido #
// event open da window
// Um separador
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Início")
// Um grupo: um botao grande e dois pequenos
uo_ribbon.of_add_group(/*keys*/ "home/clipboard", /*title*/ "Área de transferência")
uo_ribbon.of_add_big_button(/*keys*/ "home/clipboard/paste", /*label*/ "Colar", /*image*/ "mono:img\paste.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/cut", /*label*/ "Cortar", /*image*/ "mono:img\cut.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/copy", /*label*/ "Copiar", /*image*/ "mono:img\copy.svg")
// Mostrar o separador
uo_ribbon.of_select_tab(/*key*/ "home")
// event ue_clicked de uo_ribbon: (string as_keys)
choose case as_keys
case "home/clipboard/paste" ; of_paste()
case "home/clipboard/cut" ; of_cut()
case "home/clipboard/copy" ; of_copy()
end choose
Propriedades #
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
is_app_button | string | "" | Rótulo do botão da aplicação, no canto superior esquerdo, que abre o menu da aplicação. Mudar-lhe o nome mantém o menu; uma cadeia vazia retira o botão, com o menu. As entradas do menu da aplicação precisam primeiro do botão |
ib_minimized | boolean | false | true recolhe a faixa de opções, deixando apenas os cabeçalhos dos separadores; um clique num separador expande-a temporariamente. Definido pelo código, aciona ue_minimized como o gesto do utilizador — nada quando a faixa já está nesse estado; ue_size_changed indica a nova altura |
ib_veto_gallery | boolean | false | Perguntar antes de um mosaico de galeria ser retido — pelo utilizador ou por of_select_gallery_item (aciona ue_gallery_selection_changing, que pode recusar; um of_select_gallery_item recusado devolve -4). Inativo por predefinição, como todo o evento cancelável: cada pergunta custa uma ida e volta ao PowerBuilder (~35 ms). Coloque-o a true quando a sua aplicação responde |
is_theme_style | string | "" | Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança |
is_theme_mode | string | "" | Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança |
il_theme_accent | long | -1 | Cor de destaque deste componente (-1 = destaque da aplicação, ou o do tema) |
is_tooltip | string | "" | Tooltip simples apresentado ao passar sobre o componente |
is_super_tooltip_title | string | "" | Título do tooltip enriquecido (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto do tooltip enriquecido (aceita marcação enriquecida) |
is_super_tooltip_image | string | "" | Imagem do tooltip enriquecido |
Constante — ACCENT_LIGHT (-1): deve ser passada como cor de um separador ou de um grupo contextual para que este siga o acento do tema, mais claro, em vez de uma cor fixa.
Propriedades de um separador — n_pbt_ribbon_tab #
Obtidas através de of_tab("tab"), podem ser alteradas em tempo real.
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
ib_visible | boolean | true | false oculta o separador sem o eliminar — o próprio mecanismo dos separadores contextuais |
is_title | string | "" | Título do separador. Posto por of_add_tab; escrevê-lo aqui altera-o, lê-lo diz o que mostra |
is_keytip | string | "" | Tecla de acesso rápido mostrada depois de premir Alt ("A" para Início). Uma letra ou várias ("FP", como no Office), escritas uma após a outra; Retrocesso retira a última. Só letras e algarismos |
Propriedades de um grupo — n_pbt_ribbon_group #
Obtidas através de of_group("tab/group").
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
ib_visible | boolean | true | false oculta o grupo e todos os seus controlos |
is_title | string | "" | Legenda sob o grupo. Posta por of_add_group; escrevê-la aqui altera-a |
ib_launcher | boolean | false | Apresenta a pequena seta no canto inferior direito do grupo — o iniciador de caixa de diálogo (aciona ue_launcher). A seta vive na barra de título do grupo, e um grupo que a faixa teve de recolher por falta de espaço mantém-na no mesmo lugar — viaja ainda para o painel que o grupo recolhido abre. |
Constantes de modo do seletor de cor: COLORMODE_PALETTE (paleta de pastilhas, modo predefinido) e COLORMODE_OPEN (paleta completa com validação).
Propriedades de um controlo — n_pbt_ribbon_item #
Obtidas através de of_item("tab/group/control"). Aplicam-se a todos os tipos de controlos; as propriedades sem pertinência para um dado tipo são simplesmente ignoradas.
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
is_label | string | "" | Rótulo do controlo. Aceita a formatação com etiquetas |
is_image | string | "" | Imagem do controlo (botão, botão grande, botão dividido, botão pendente, caixa de verificação, seletor de cor, botão da barra de acesso rápido), com os mesmos prefixos que ao adicioná-lo (mono:, tint:). "" retira-a. Lida em direto |
ib_enabled | boolean | true | false desativa o controlo a cinzento e bloqueia a sua ativação |
ib_checked | boolean | false | Estado premido de um alternador ou assinalado de uma caixa de verificação |
ib_visible | boolean | true | false oculta o controlo; os vizinhos aproximam-se |
is_text | string | "" | Texto introduzido ou selecionado numa caixa de lista modificável |
id_value | double | 0 | Valor numérico de um contador |
id_min | double | 0 | Apenas contador: limite inferior do intervalo, modificável a qualquer momento. O valor é trazido de imediato para o novo intervalo, em silêncio (nenhum ue_value_changed, como id_value escrito pelo código). Em qualquer outro controlo, sem efeito e lido 0 |
id_max | double | 0 | Apenas contador: limite superior do intervalo, modificável a qualquer momento; o valor é trazido para o intervalo em silêncio, como com id_min. Em qualquer outro controlo, sem efeito e lido 0 |
id_step | double | 0 | Apenas contador: incremento das setas e das teclas Cima / Baixo, modificável a qualquer momento. Um incremento de 0 ou menos é ignorado. Em qualquer outro controlo, sem efeito e lido 0 |
il_color | long | -1 | Cor atual de um seletor de cor |
ii_visible_items | integer | 3 | Apenas galeria: número de mosaicos que a faixa recolhida mostra de uma só vez. Os restantes continuam acessíveis através das setas, ou na grelha expandida |
is_keytip | string | "" | Tecla de acesso rápido do controlo, mostrada depois de Alt e da letra do separador. Uma letra ou várias ("FP", como no Office), escritas uma após a outra; Retrocesso retira a última. Só letras e algarismos. Um controlo de um grupo recolhido mantém a sua tecla: abre o painel do grupo |
is_tooltip | string | "" | Tooltip simples apresentado ao passar sobre o item |
is_super_tooltip_title | string | "" | Título do tooltip enriquecido do item (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto do tooltip enriquecido do item (aceita marcação enriquecida) |
is_super_tooltip_image | string | "" | Imagem do tooltip enriquecido do item |
Propriedades de uma entrada de menu — n_pbt_ribbon_menu_item #
Obtidas através de of_menu_item("tab/group/control/entry").
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
is_image | string | "" | Imagem da entrada de menu. Uma cadeia vazia retira-a |
of_is_separator ( ) → boolean | — | — | A entrada é uma linha de separação? Só leitura: o que uma entrada é foi decidido ao adicioná-la |
of_is_header ( ) → boolean | — | — | A entrada é um título não clicável? Só leitura, mesma razão |
of_is_checkable ( ) → boolean | — | — | A entrada leva uma marca? Só leitura; ib_checked diz se está posta |
ib_enabled | boolean | true | false apresenta a entrada a cinzento |
ib_visible | boolean | true | false retira a entrada do menu na sua próxima abertura — cascata incluída — sem a eliminar |
ib_checked | boolean | false | Marca de uma entrada criada por of_add_menu_check |
Propriedades de uma entrada do menu da aplicação — n_pbt_ribbon_app_menu_item #
Obtidas através de of_app_menu_item("recent/a.txt"). Modificam-se em tempo real: o menu aplica-as na sua próxima abertura.
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
is_label | string | "" | Texto da entrada |
is_image | string | "" | Imagem da entrada. Uma cadeia vazia retira-a |
ib_enabled | boolean | true | false desativa a entrada: mostrada, nunca escolhida — Guardar enquanto não há nada para guardar |
ib_checked | boolean | false | Marca de verificação à frente da entrada |
ib_visible | boolean | true | false retira a entrada do menu na sua próxima abertura — submenu incluído — sem a eliminar |
of_is_separator ( ) → boolean | — | — | A entrada é uma linha de separação? Só de leitura |
of_keys_at (long al_index) → string | — | — | O endereço da entrada na posição ai_index (a partir de 1) sob esta — ou no primeiro nível para of_app_menu_item("") —, "" para além do fim: o endereço que of_app_menu_item e of_remove_app_menu_item recebem |
Os doze tipos de controlos #
Todos são adicionados no endereço de um grupo — "home/clipboard" — e devolvem 0 (-5 perante um argumento inválido, -2 se o componente não estiver criado); um menu ou uma lista é depois preenchido no endereço do controlo.
| Método do grupo | Controlo obtido | Evento |
|---|---|---|
of_add_big_button (string as_keys, string as_label, string as_image) → long | Botão grande de altura total, ícone por cima do rótulo. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_clicked |
of_add_big_split (string as_keys, string as_label, string as_image) → long | Botão grande dividido: a parte superior atua, a seta abre o 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 | ue_clicked · ue_menu_selected |
of_add_big_dropdown (string as_keys, string as_label, string as_image) → long | Botão grande com menu pendente. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_menu_selected |
of_add_button (string as_keys, string as_label, string as_image) → long | Botão pequeno (empilhado em colunas de três). Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_clicked |
of_add_toggle (string as_keys, string as_label, string as_image) → long | Pequeno alternador que permanece premido. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_toggled |
of_add_dropdown (string as_keys, string as_label, string as_image) → long | Botão pequeno com menu pendente. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_menu_selected |
of_add_checkbox (string as_keys, string as_label) → long | Caixa de verificação. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_toggled |
of_add_separator (string as_keys) → long | Separador vertical entre dois blocos de controlos. 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_combo (string as_keys, integer ai_width_px, boolean ab_editable) → long | Caixa de lista, editável ou não. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_combo_changed |
of_add_spinner (string as_keys, integer ai_width_px, double ad_min, double ad_max, double ad_step, double ad_value) → long | Contador numérico com setas. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_value_changed |
of_add_colorpicker (string as_keys, string as_label, string as_image, long al_color) → long | Botão de cor dividido: o clique reaplica, a seta abre a paleta. Devolve 0 depois de aplicado, -5 perante um argumento inválido (chave vazia, endereço errado), -2 se o componente não estiver criado | ue_clicked · ue_color_changed |
of_add_gallery (string as_keys, integer ai_width_px, integer ai_tile_w, integer ai_tile_h) → long | Faixa deslizante de mosaicos ilustrados | ue_gallery_selection_changed |
of_add_colorpicker aceita um quinto argumento as_mode: COLORMODE_PALETTE (paleta de pastilhas) ou COLORMODE_OPEN (paleta completa com botões Validar e Cancelar).
Métodos #
Construir a faixa de opções #
| Método | Função |
|---|---|
of_add_tab (string as_key, string as_title) | Adiciona um separador e devolve 0 (-5 perante um argumento inválido, -2 se o componente não estiver criado): os grupos são depois adicionados no seu endereço |
of_insert_tab (string as_key, string as_title, integer ai_index) | Adiciona um separador na posição que você escolhe (1 = à cabeça) em vez de no fim, e devolve 0 (-5 perante um argumento inválido, -2 se o componente não estiver criado) como of_add_tab. Um id já ocupado é recusado |
of_tab (string as_key) | Handle de um separador existente (criado no primeiro acesso) |
of_add_group (string as_keys, string as_title) | Adiciona um grupo intitulado a um separador — "home/clipboard" — e devolve 0 (-5 perante um argumento inválido, -2 se o componente não estiver criado) |
of_group (string as_keys) | Handle de um grupo existente, pelo seu endereço |
of_item (string as_keys) | Handle de um controlo existente, pelo seu endereço — "home/clipboard/paste" |
of_select_tab (string as_key) | Ativa um separador, como um clique nele: segue ue_selection_changed (logo após o seu script, a partir da fila de eventos; nada quando o separador já está ativo), e of_selected_key relê-o de imediato. Ao contrário de um clique, não expande uma faixa recolhida. Devolve 0 depois de aplicado, -5 para um separador desconhecido ou oculto, -2 se o componente não estiver criado |
of_selected_key ( ) | Chave do separador ativo, "" se não existir nenhum. Lida em direto no componente: logo em ue_selection_changed, ou logo após of_select_tab, já indica o novo separador |
of_remove_group (string as_keys) | Remove um grupo e todos os seus controlos, pelo seu endereço; os handles do que sai são libertados. Devolve 0 depois de aplicado, -5 quando nenhum grupo vive nesse endereço, -2 se o componente não estiver criado |
of_remove_item (string as_keys) | Remove um controlo pelo seu endereço (separador/grupo/controlo), ou um botão da barra de acesso rápido apenas pela sua chave; o seu handle é libertado. Devolve 0 depois de aplicado, -5 quando nada desse tipo vive nesse endereço, -2 se o componente não estiver criado |
of_remove_tab (string as_key) | Remove um separador e todo o seu conteúdo; os handles do que sai são libertados. Devolve 0 depois de aplicado, -5 quando nenhum separador tem essa chave, -2 se o componente não estiver criado |
of_clear ( ) | Esvazia por completo a faixa de opções: separadores, grupos, controlos, barra de acesso rápido, menu da aplicação. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
Preencher os menus e as listas #
Todos estes métodos são invocados sobre o componente, com o endereço do controlo (separador/grupo/controlo) — a entrada, a opção ou o mosaico como quarto nível.
| Método | Função |
|---|---|
of_add_menu_item (string as_keys, string as_label, string as_image) | Entrada do menu de um botão pendente ou dividido: separador/grupo/controlo/entrada, um nível a mais por cascata. Devolve 0 depois de aplicado, -5 perante um endereço errado, um pai que não é nem pendente nem entrada, ou uma chave já usada nesse menu, -2 se o componente não estiver criado |
of_add_menu_check (string as_keys, string as_label) · (id, label, image) | Entrada assinalável: o clique alterna o seu estado e comunica-o em ue_menu_selected. 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_menu_header (string as_keys, string as_label) | Linha de título não clicável, para dividir um menu extenso. 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_menu_separator (string as_keys) | Linha de separação num menu: as_keys nomeia o controlo para o seu próprio menu, ou uma entrada para a cascata por baixo dela. 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_item (string as_keys) | Remove uma entrada de um menu, com a sua cascata (separador/grupo/controlo/entrada, mais profunda para uma entrada em cascata); os seus handles são libertados. Devolve 0 depois de aplicado, -5 quando nenhuma entrada vive nesse endereço, -2 se o componente não estiver criado |
of_clear_menu (string as_keys) | Esvazia o menu de um botão pendente ou dividido (separador/grupo/controlo): uma lista «Ficheiros recentes» reconstrói-se entrada a entrada, sem recriar o controlo. Devolve 0 depois de aplicado, -5 quando o endereço não é nem um pendente nem um botão dividido, -2 se o componente não estiver criado |
of_menu_item (string as_keys) | Handle de uma entrada de menu, para a desativar ou assinalar em tempo real |
of_add_combo_item (string as_keys, string as_label) | Acrescenta uma escolha à lista de uma caixa de combinação; uma escolha tem como chave o seu rótulo. Devolve 0 depois de aplicado, -5 quando o endereço não é uma caixa de combinação, ou perante um rótulo já na lista, vazio, ou que contém / ou uma barra vertical, -2 se o componente não estiver criado |
of_remove_combo_item (string as_keys) | Remove uma escolha de uma caixa de combinação: separador/grupo/lista/rótulo. Devolve 0 depois de aplicado, -5 quando a lista não tem essa escolha, -2 se o componente não estiver criado |
of_clear_combo (string as_keys) | Esvazia a lista de uma caixa de combinação (separador/grupo/lista); o seu texto fica. Devolve 0 depois de aplicado, -5 quando o endereço não é uma caixa de combinação, -2 se o componente não estiver criado |
of_add_gallery_item (string as_keys, string as_image, string as_label) | Acrescenta um mosaico a uma galeria (separador/grupo/galeria/mosaico); o seu rótulo é também o seu nome para um leitor de ecrã. Devolve 0 depois de aplicado, -5 perante um endereço errado, um terceiro nível que não é uma galeria, ou um mosaico já usado, -2 se o componente não estiver criado |
of_remove_gallery_item (string as_keys) | Remove um mosaico de uma galeria (separador/grupo/galeria/mosaico). Quando o mosaico selecionado sai, deixa de haver seleção. Devolve 0 depois de aplicado, -5 quando esse mosaico não existe, -2 se o componente não estiver criado |
of_select_gallery_item (string as_keys) | Seleciona um mosaico da galeria por programa, pelo seu endereço de quatro níveis, como uma escolha: com ib_veto_gallery ativo, ue_gallery_selection_changing é perguntado primeiro; depois segue ue_gallery_selection_changed. Mosaico já selecionado: nada é perguntado nem lançado. Devolve 0 depois de aplicado (ou se já selecionado), -4 se o seu ue_gallery_selection_changing recusou (o mosaico fica), -5 para outra profundidade ou um mosaico que of_add_gallery_item nunca acrescentou, -2 se o componente não estiver criado |
of_open (string as_keys) | Abre por programa o menu, a lista ou a paleta do controlo nesse endereço (separador/grupo/controlo); o endereço de um grupo (separador/grupo) abre o seu painel quando uma janela demasiado estreita o recolheu. Devolve 0 depois de aplicado, -5 para um endereço que não nomeia nem um controlo nem um grupo (um botão da barra de acesso rápido não tem menu para abrir), -2 se o componente não estiver criado |
Menu da aplicação e barra de acesso rápido #
| Método | Função |
|---|---|
of_add_app_menu_item (string as_keys, string as_label, string as_image) | Entrada do menu da aplicação (aquele que o botão is_app_button abre), pelo seu endereço: recent na raiz, recent/a.txt no submenu de recent. Devolve 0 depois de aplicado, -5 perante uma chave inválida (vazia, / ou barra vertical num nível, a começar por __), uma chave já usada, uma entrada pai desconhecida, ou sem botão da aplicação, -2 se o componente não estiver criado |
of_add_app_menu_separator (string as_keys) | Linha de separação no menu da aplicação. as_keys é o seu endereço, como o de uma entrada: s1 na raiz, saveas/s1 no submenu de saveas; um endereço vazio recebe uma chave própria. Devolve 0 depois de aplicado, -5 perante uma chave já usada, uma entrada pai desconhecida, ou sem botão da aplicação, -2 se o componente não estiver criado |
of_remove_app_menu_item (string as_keys) | Remove uma entrada (ou linha de separação) do menu da aplicação pelo seu endereço, com o seu submenu; os seus handles são libertados. Devolve 0 depois de aplicado, -5 quando essa entrada não existe, -2 se o componente não estiver criado |
of_app_menu_item (string as_keys) | Handle de uma entrada do menu da aplicação (save, recent/a.txt), para a desativar, marcar, ocultar ou mudar de nome em tempo real — ver abaixo. of_app_menu_item("") representa o próprio menu: of_count e of_keys_at percorrem o seu primeiro nível |
of_add_qat (string as_key, string as_image, string as_tooltip) | Botão da barra de acesso rápido, por cima dos separadores; a sua dica é também o seu nome para um leitor de ecrã. Devolve 0 depois de aplicado, -5 perante uma chave inválida (vazia, / ou barra vertical num nível, a começar por __) ou uma chave já na barra, -2 se o componente não estiver criado |
of_qat_item (string as_key) | Handle de um botão de acesso rápido, para o desativar ou ocultar em tempo real |
Separadores contextuais #
| Método | Função |
|---|---|
of_add_contextual_tab (string as_key, string as_title, long al_color) | Separador contextual isolado: criado oculto, marcado com um filete colorido. Passe ACCENT_LIGHT para seguir o acento do tema. Devolve 0 depois de aplicado, -5 perante uma chave inválida (vazia, / ou barra vertical num nível, a começar por __) ou uma chave já usada, -2 se o componente não estiver criado |
of_add_contextual_group (string as_key, string as_title) · (id, title, al_color) | Grupo de separadores contextuais: uma faixa colorida com título coroa os seus separadores. Devolve 0 depois de aplicado, -5 perante uma chave inválida (vazia, / ou barra vertical num nível, a começar por __) ou uma chave já usada (a sua cor muda por of_ctx_group(chave).il_color), -2 se o componente não estiver criado |
of_ctx_group (string as_key) | Recupera o handle de um grupo contextual já criado, pela sua chave — é nele que se definem as suas propriedades |
of_remove_contextual_group (string as_key) | Remove um grupo de separadores contextuais e os separadores que coroa — pertencem-lhe; os seus handles são libertados. Devolve 0 depois de aplicado, -5 quando of_add_contextual_group nunca criou esse grupo, -2 se o componente não estiver criado |
of_add_contextual_tab (string as_key, string as_title, string as_group_key) | Acrescenta um separador sob um grupo contextual: criado oculto, coroado pela faixa colorida do grupo. Devolve 0 depois de aplicado, -5 perante uma chave inválida ou já usada, ou um grupo que of_add_contextual_group nunca criou, -2 se o componente não estiver criado |
il_color (propriedade) | Sobre um handle de grupo contextual: recolore a faixa em tempo real (ACCENT_LIGHT para regressar ao acento) |
Comuns #
| Método | Função |
|---|---|
of_reset ( ) | Esvazia a faixa de opções e repõe o seu estado inicial, propriedades incluídas. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_set_redraw (boolean) | Agrupa uma sucessão de alterações numa única representação. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_preload_icons (string as_icons[]) | Pré-aquece um lote de ícones no arranque: um separador aberto mais tarde apresenta os seus instantaneamente. Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_save_as_png (string) · of_save_as_jpg (string) | Exporta a representação como imagem. Devolve 0 depois de a imagem ser escrita, -4 se a escrita falhar, -2 se o componente não estiver criado |
Eventos #
Todos os eventos de controlo transportam o caminho completo: nunca é necessário um identificador único em toda a aplicação.
| Evento | Acionado quando |
|---|---|
ue_clicked (string as_keys) | O utilizador clica num botão, num botão grande, na parte principal de um botão dividido ou num botão da barra de acesso rápido — na faixa, no painel de um grupo recolhido, ou pela sua tecla de acesso rápido. as_keys é o endereço separador/grupo/controlo, ou apenas a chave de um botão de acesso rápido |
ue_toggled (string as_keys, boolean ab_checked) | O utilizador alterna um botão de alternância ou uma caixa de verificação (na faixa ou no painel de um grupo recolhido); ab_checked traz o novo estado. Escrever ib_checked pelo código não aciona nada |
ue_menu_selected (string as_keys, boolean ab_checked) | O utilizador escolhe uma entrada do menu de um botão pendente ou dividido. as_keys é o seu endereço completo: separador, grupo, controlo portador e depois a entrada — um nível a mais por cascata. Uma entrada marcável alterna primeiro, e ab_checked traz o seu novo estado. Uma entrada desativada ou oculta não se escolhe |
ue_combo_changed (string as_keys, string as_text) | O utilizador valida o texto de uma caixa de combinação: uma escolha na sua lista, Enter no campo, ou a saída do campo depois de escrever. Escape abandona o que foi escrito sem acionar nada; escrever is_text pelo código também não aciona nada |
ue_value_changed (string as_keys, double ad_value) | O utilizador muda o valor de um contador: as suas setas, Cima / Baixo no campo, Enter ou a saída do campo depois de escrever (Escape abandona). ad_value é o novo valor, limitado ao intervalo do contador. Escrever id_value pelo código não aciona nada |
ue_color_changed (string as_keys, long al_color) | O utilizador escolhe uma cor (paleta ou seletor), ou clica na parte principal de um seletor de cor para voltar a aplicar a sua cor atual; al_color é a cor PowerBuilder. Escrever il_color pelo código não aciona nada |
ue_gallery_selection_changed (string as_from_keys, string as_keys) | Um mosaico de galeria foi retido — pelo utilizador ou por of_select_gallery_item (uma ordem do seu código também o lança). Mesmos argumentos que ue_gallery_selection_changing: a pergunta e o seu resultado leem-se da mesma forma, e as_from_keys é o mosaico abandonado |
ue_gallery_selection_changing (string as_from_keys, string as_keys) → boolean | Cancelável, colocado antes de o mosaico ser retido. Lançado apenas quando ib_veto_gallery = true. as_from_keys é o mosaico atual. Colocado também para of_select_gallery_item. Devolva false para o conservar (um estilo que o documento ainda não pode assumir): of_select_gallery_item devolve então -4 |
ue_launcher (string as_keys) | O utilizador clica na seta de iniciador de um grupo (também a partir do painel de um grupo recolhido): as_keys é o endereço do grupo separador/grupo — abra a sua janela de opções |
ue_selection_changed (string as_keys) | Outro separador passa para a frente: um clique, a roda do rato sobre a faixa, uma tecla de acesso rápido, ou of_select_tab (uma ordem do seu código também o aciona). as_keys é a chave do separador — vazia quando não resta nenhum, depois de o separador ativo ter sido ocultado ou removido |
ue_app_button ( ) | É clicado o botão da aplicação |
ue_app_menu_selected (string as_keys) | O utilizador escolhe uma entrada do menu da aplicação: as_keys é o seu endereço (saveas/as_pdf). Uma entrada desativada ou oculta não se escolhe |
ue_minimized (boolean ab_minimized) | A faixa recolhe-se ou expande-se: o chevron no fim da fila de separadores, um duplo clique num separador, ou ib_minimized definido pelo seu código (uma ordem também o aciona); ue_size_changed indica a nova altura em todos os casos |
ue_size_changed (long al_height, boolean ab_minimized) | A altura da faixa de opções mudou por si própria: recolhida, expandida, um separador contextual apresentado, uma janela mais estreita que perde uma linha. Ao contrário de ue_auto_height — que só fala quando o componente se dimensiona a si mesmo — este dispara quer a altura automática esteja ativa ou não: é informação pura, para recolocar o que está por baixo |
ue_keytips (boolean ab_on, integer ai_level) | As keytips aparecem (true) ou desaparecem (false). ai_level indica em que ponto está a navegação: 1 = os separadores estão letrados, 2 = os comandos do separador atual estão letrados, 0 = já não existe qualquer keytip |
ue_auto_height (long al_height) | A faixa de opções anuncia a sua altura ideal e acabou de se ajustar a ela — sempre ativo: a altura de uma faixa de opções é intrínseca |
ue_ready ( ) | O componente terminou o carregamento; tudo o que foi enviado antes foi reproduzido |
ue_runtime_missing ( ) | O runtime WebView2 está ausente: o componente permanece vazio |
ue_bg_color (long al_color) | O componente calculou a cor de fundo do respetivo tema; o userobject já a adotou (backcolor) |
Exemplos #
Uma faixa de opções completa, do menu da aplicação aos grupos #
// event open: toda a construcao e agrupada numa unica representacao
// Congelar o desenho e dar nome ao botao da aplicacao
uo_ribbon.of_set_redraw(/*on*/ false)
uo_ribbon.is_app_button = "Ficheiro"
// Menu da aplicacao, com uma cascata sob "Guardar como"
uo_ribbon.of_add_app_menu_item(/*keys*/ "new", /*label*/ "Novo", /*image*/ "mono:img\new.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "open", /*label*/ "Abrir...", /*image*/ "mono:img\open.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as", /*label*/ "Guardar como", /*image*/ "mono:img\saveas.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as/as_pdf", /*label*/ "Documento PDF", /*image*/ "")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as/as_csv", /*label*/ "Ficheiro CSV", /*image*/ "")
uo_ribbon.of_add_app_menu_separator(/*keys*/ "sep1")
uo_ribbon.of_add_app_menu_item(/*keys*/ "quit", /*label*/ "Sair", /*image*/ "mono:img\exit.svg")
// Barra de acesso rapido, por cima dos separadores
uo_ribbon.of_add_qat(/*key*/ "qat_save", /*image*/ "mono:img\save.svg", /*tooltip*/ "Guardar")
uo_ribbon.of_add_qat(/*key*/ "qat_undo", /*image*/ "mono:img\undo.svg", /*tooltip*/ "Anular")
// Separador Inicio
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Início")
uo_ribbon.of_tab(/*key*/ "home").is_keytip = "A"
// Um grupo: um botao dividido com o seu menu, depois dois botoes pequenos
uo_ribbon.of_add_group(/*keys*/ "home/clipboard", /*title*/ "Área de transferência")
uo_ribbon.of_add_big_split(/*keys*/ "home/clipboard/paste", /*label*/ "Colar", /*image*/ "mono:img\paste.svg")
uo_ribbon.of_add_menu_item(/*keys*/ "home/clipboard/paste/paste_text", /*label*/ "Colar sem formatação", /*image*/ "")
uo_ribbon.of_add_menu_item(/*keys*/ "home/clipboard/paste/paste_link", /*label*/ "Colar como ligação", /*image*/ "")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/cut", /*label*/ "Cortar", /*image*/ "mono:img\cut.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/copy", /*label*/ "Copiar", /*image*/ "mono:img\copy.svg")
uo_ribbon.of_group(/*keys*/ "home/clipboard").ib_launcher = true // seta de opcoes no canto inferior direito
// Desenhar tudo de uma vez, depois mostrar o separador
uo_ribbon.of_set_redraw(/*on*/ true)
uo_ribbon.of_select_tab(/*key*/ "home")
Um encaminhamento de cliques único #
// event ue_clicked de uo_ribbon: (string as_keys)
// O caminho completo chega com o evento: basta um unico encaminhamento,
// e dois grupos podem reutilizar o mesmo identificador sem se estorvarem.
choose case as_keys
case "clipboard/cut" ; of_cut()
case "clipboard/copy" ; of_copy()
case "clipboard/paste" ; of_paste()
case "font/bold" ; of_toggle_bold()
end choose
Comandar o estado dos controlos consoante os direitos #
// Sempre pelo caminho: separador > grupo > controlo
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste").ib_enabled = of_clipboard_has_data()
uo_ribbon.of_item(/*keys*/ "home/tools/brush").ib_checked = true
uo_ribbon.of_tab(/*key*/ "admin").ib_visible = gb_administrator
// Desativar a cinzento uma entrada DENTRO de um menu pendente (nivel 4)
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste") &
.of_menu_item(/*keys*/ "paste_link").ib_enabled = false
Separadores contextuais com faixa #
O princípio do Office: separadores que só aparecem quando a seleção o justifica, encimados por uma faixa intitulada e colorida.
// event open: prepara-se o grupo contextual, oculto por predefinicao
// Sem cor, a faixa segue o acento do tema; RGB(...) para a impor
uo_ribbon.of_add_contextual_group(/*key*/ "img", /*title*/ "Ferramentas de Imagem", &
/*color*/ RGB(/*red*/ 224, /*green*/ 32, /*blue*/ 96))
uo_ribbon.of_add_contextual_tab(/*key*/ "format", /*title*/ "Formatar", /*group_key*/ "img")
uo_ribbon.of_add_group(/*keys*/ "format/adjust", /*title*/ "Ajustar")
uo_ribbon.of_add_big_button(/*keys*/ "format/adjust/crop", /*label*/ "Recortar", /*image*/ "mono:img\crop.svg")
uo_ribbon.of_add_button(/*keys*/ "format/adjust/rotate", /*label*/ "Rodar", /*image*/ "mono:img\rotate.svg")
// Ao selecionar uma imagem: revela-se o separador e ativa-se
uo_ribbon.of_tab(/*key*/ "format").ib_visible = true
uo_ribbon.of_select_tab(/*key*/ "format")
// Ao desselecionar: oculta-se, a faixa desaparece com ele
uo_ribbon.of_tab(/*key*/ "format").ib_visible = false
Caixa de lista, contador, seletor de cor e galeria #
// Um novo grupo no separador
uo_ribbon.of_add_group(/*keys*/ "home/font", /*title*/ "Tipo de letra")
// Caixa de lista editavel: preenche-se pelo seu handle
uo_ribbon.of_add_combo(/*keys*/ "home/font/font_name", /*width_px*/ 140, /*editable*/ true)
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Segoe UI")
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Arial")
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Calibri")
uo_ribbon.of_item(/*keys*/ "home/font/font_name").is_text = "Segoe UI"
// Contador numerico: minimo, maximo, incremento, valor inicial
uo_ribbon.of_add_spinner(/*keys*/ "home/font/size", /*width_px*/ 70, /*min*/ 6, /*max*/ 96, &
/*step*/ 1, /*value*/ 11)
// Seletor de cor no modo de paleta completa (com Validar / Cancelar)
uo_ribbon.of_add_colorpicker(/*keys*/ "home/font/color", /*label*/ "Cor", &
/*image*/ "mono:img\font-color.svg", &
/*color*/ RGB(/*red*/ 0, /*green*/ 0, /*blue*/ 0), &
/*mode*/ u_pbt_ribbon.COLORMODE_OPEN)
// Galeria de estilos: mosaicos ilustrados deslizantes
uo_ribbon.of_add_gallery(/*keys*/ "home/font/styles", /*width_px*/ 220, &
/*tile_w*/ 64, /*tile_h*/ 48)
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_normal", /*image*/ "img\style-normal.png", /*label*/ "Normal")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_title", /*image*/ "img\style-titre.png", /*label*/ "Título")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_note", /*image*/ "img\style-note.png", /*label*/ "Nota")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_code", /*image*/ "img\style-code.png", /*label*/ "Código")
// A faixa recolhida mostra 4 miniaturas de cada vez; as restantes continuam
// acessiveis atraves das setas, ou na grelha expandida.
uo_ribbon.of_item(/*keys*/ "home/font/styles").ii_visible_items = 4
// O estilo selecionado no inicio
uo_ribbon.of_select_gallery_item(/*keys*/ "home/font/styles/st_normal")
// event ue_value_changed de uo_ribbon: (string as_keys, double ad_value)
n_pbt_utils lnv_utils // autoinstantiate: nada a criar, nada a destruir
if lnv_utils.of_leaf(/*keys*/ as_keys) = "size" then of_apply_size(ad_value)
O intervalo e o incremento de um contador mudam-se depois por id_min, id_max e id_step do seu handle: o valor é trazido de imediato para o novo intervalo, sem acionar ue_value_changed. A sua imagem, como a de qualquer controlo, muda-se por is_image.
// O tamanho maximo depende do tipo de letra escolhido: 96, depois 400 em incrementos de 2
uo_ribbon.of_item(/*keys*/ "home/font/size").id_max = 400
uo_ribbon.of_item(/*keys*/ "home/font/size").id_step = 2
// event ue_color_changed de uo_ribbon: (string as_keys, long al_color)
n_pbt_utils lnv_utils // autoinstantiate: nada a criar, nada a destruir
if lnv_utils.of_leaf(/*keys*/ as_keys) = "color" then of_apply_color(al_color)
Recusar a escolha de uma miniatura de galeria #
// A pergunta so e colocada a pedido: esta linha ativa-a, e
// ue_gallery_selection_changing decide entao cada mosaico.
uo_ribbon.ib_veto_gallery = true
// event ue_gallery_selection_changing de uo_ribbon:
// (string as_from_keys, string as_keys)
// Devolver FALSE conserva a miniatura atual (as_from_keys).
n_pbt_utils lnv_utils // autoinstantiate: nada a criar, nada a destruir
if lnv_utils.of_leaf(/*keys*/ as_keys) = "st_code" and not of_document_supports_code() then
MessageBox("Estilo", "Este documento não pode assumir o estilo Código.")
return false
end if
return true
O iniciador de caixa de diálogo #
// A pequena seta no canto inferior direito do grupo
uo_ribbon.of_group(/*keys*/ "home/font").ib_launcher = true
// event ue_launcher de uo_ribbon: (string as_keys)
// O caminho identifica o grupo: abre-se a window de opcoes correspondente.
n_pbt_utils lnv_utils // autoinstantiate: nada a criar, nada a destruir
choose case lnv_utils.of_leaf(/*keys*/ as_keys)
case "font" ; open(w_font_options)
case "clipboard" ; open(w_paste_options)
end choose
Keytips: conduzir a faixa de opções pelo teclado #
// Alt apresenta as letras; Alt seguido de A e depois C aciona "copy"
uo_ribbon.of_tab(/*key*/ "home").is_keytip = "A"
uo_ribbon.of_item(/*keys*/ "home/clipboard/copy").is_keytip = "C"
uo_ribbon.of_item(/*keys*/ "home/clipboard/cut").is_keytip = "X"
Premir Alt esteja o foco onde estiver na window entrega o comando à faixa de opções: esta recebe o foco de teclado e mostra as suas letras. Não tem nada a ligar — basta que esteja declarada pelo menos uma keytip. Esc, um segundo Alt ou a escolha de um comando devolvem o foco ao controlo que o utilizador tinha abandonado. Uma tecla pode ter várias letras ("FP", como no Office): o utilizador escreve-as uma após a outra, os distintivos que já não começam pelo que foi escrito afastam-se, e Retrocesso trá-los de volta. Um controlo de um grupo recolhido mantém a sua tecla: abre o painel do grupo.
ue_keytips avisa-o de cada mudança de estado e indica-lhe o nível atual:
// event ue_keytips de uo_ribbon: (boolean ab_on, integer ai_level)
// O teclado conduz a faixa de opcoes: apagar a ajuda da barra de estado, que
// fala do rato, e repo-la quando as letras desaparecerem.
if ab_on then
uo_statusbar.of_item(/*keys*/ "main").is_text = "Escreva uma letra (nivel " + String(ai_level) + ")"
else
uo_statusbar.of_item(/*keys*/ "main").is_text = ""
end if
Tooltips enriquecidos num controlo #
// A super dica do botao Colar: um titulo, um texto, uma imagem
lnv_item = uo_ribbon.of_item(/*keys*/ "home/clipboard/paste")
lnv_item.is_super_tooltip_title = "Colar (Ctrl+V)"
lnv_item.is_super_tooltip_text = "Insere o conteúdo da área de transferência." &
+ "[br][br][size-=15]Utilize a seta para colar sem formatação.[/size-=15]"
lnv_item.is_super_tooltip_image = "img\paste.png"
Estas quatro propriedades são exatamente as mesmas de qualquer outro item da biblioteca. Para um tooltip de uma só linha basta is_tooltip.
Altura automática #
A faixa de opções dimensiona-se sozinha: não há nada para ativar. Avisa-o sempre que a altura muda (recolhimento, separador contextual, mudança de tema) para que possa reposicionar o que está por baixo.
// event ue_auto_height de uo_ribbon: (long al_height)
// A faixa de opcoes ja se redimensionou: reposiciona-se o que esta por baixo.
uo_content.y = uo_ribbon.y + uo_ribbon.height
uo_content.height = this.height - uo_content.y
Recolher a faixa de opções para ganhar espaço #
// Start with the ribbon folded: only the tab headers show
uo_ribbon.ib_minimized = true
// event ue_minimized de uo_ribbon: (boolean ab_minimized)
// Memoriza-se a preferencia do utilizador para a proxima abertura.
of_save_preference("ribbon_collapsed", ab_minimized)
Recomeçar com uma faixa de opções vazia #
// of_reset esvazia separadores, grupos, controlos, barra de acesso rapido e menu
uo_ribbon.of_reset()
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Início")
A partir de um menu PowerBuilder existente #
Uma aplicação PowerBuilder já descreveu os seus comandos uma vez: no seu menu. Etiquetas, atalhos, imagens, separadores, submenus, dicas — está tudo lá. n_pbt_menu2ribbon relê esse menu por RTTI e escreve o PowerScript que constrói o friso correspondente.
// Uma so vez, a mao : o gerador ESCREVE codigo, nao corre em producao.
// Cole o resultado no open da sua janela.
n_pbt_menu2ribbon lnv_gen
string ls_code
// Gerar o codigo a partir do menu
lnv_gen = create n_pbt_menu2ribbon
ls_code = lnv_gen.of_generate(/*menu*/ m_principal, /*ribbon_var*/ "uo_ribbon")
destroy lnv_gen
// Copia-lo, pronto a colar
ClipBoard(ls_code)
A conversão é determinista: sem IA, sem chamada de rede, nada que saia da máquina. Cada chave gerada é o ClassName do item de menu (m_fichier, m_ouvrir): o endereço que o friso devolve (m_fichier/g1/m_ouvrir) leva portanto de volta ao item, e o encaminhador escrito no fim do código dispara o seu Clicked a partir de ue_clicked, ue_toggled e ue_menu_selected - o seu código existente corre tal como está. Os submenus são retomados a qualquer profundidade, um item oculto é deixado de fora, um desativado continua desativado, um marcado torna-se um alternador ou uma entrada marcável que começa marcada.
O código produzido é um ponto de partida para rever, não um entregável: um menu é uma lista, um friso é uma disposição. Agrupe, escolha os seus botões grandes, retire o que não merece estar sempre à vista. O exemplo 9 da página do friso na aplicação de demonstração mostra um resultado completo.
Boas práticas #
- Enquadre toda a construção com
of_set_redraw(false)/of_set_redraw(true): uma faixa de opções completa é então desenhada de uma só vez, sem cintilação. - Cada adição devolve um código:
0, ou-5para um endereço errado, um pai da natureza errada ou uma chave já ocupada. Verifique-o onde um erro de construção lhe importe; para comandar um controlo depois,of_item(endereço)devolve o seu handle. - Invoque
of_preload_iconsno arranque: sem isso, a primeira apresentação de um separador nunca aberto revela um breve atraso antes dos seus ícones. - Um identificador só precisa de ser único dentro do seu grupo. Aproveite para nomear os controlos de forma simples (
copy,paste) em vez de recorrer a prefixos. - Reserve os separadores contextuais para os comandos que não têm qualquer sentido fora de contexto: um separador permanente desativado a cinzento é mais tranquilizador do que um separador que aparece e desaparece.
- A pergunta antes de um mosaico está inativa por predefinição: ative-a com
ib_veto_gallery = trueapenas seue_gallery_selection_changingtiver de poder recusar, porque cada pergunta custa uma ida e volta ao PowerBuilder. - Um único iniciador de caixa de diálogo por grupo, e apenas se o grupo tiver realmente opções avançadas a oferecer.
- Para reconstruir uma faixa de opções inteira, prefira
of_clear()(ouof_reset()) a uma série deof_remove_tab: um único comando, e todos os handles distribuídos são libertados de uma vez. - Para uma barra de comandos mais leve, sem separadores nem grupos, consulte toolbar; para uma navegação lateral, listbar.
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.