PBToolboxAI v4 ← Site

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 #

Userobjectu_pbt_ribbon
Classes de itemsn_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 paraSubstituir uma barra de menus e as respetivas barras de ferramentas por uma interface de comando moderna, legível e hierarquizada
AlturaIntrí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ção2 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 #

PropriedadeTipoPredefiniçãoFunção
is_app_buttonstring""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_minimizedbooleanfalsetrue 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_gallerybooleanfalsePerguntar 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_stylestring""Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança
is_theme_modestring""Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque da aplicação, ou o do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""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.

PropriedadeTipoPredefiniçãoFunção
ib_visiblebooleantruefalse oculta o separador sem o eliminar — o próprio mecanismo dos separadores contextuais
is_titlestring""Título do separador. Posto por of_add_tab; escrevê-lo aqui altera-o, lê-lo diz o que mostra
is_keytipstring""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").

PropriedadeTipoPredefiniçãoFunção
ib_visiblebooleantruefalse oculta o grupo e todos os seus controlos
is_titlestring""Legenda sob o grupo. Posta por of_add_group; escrevê-la aqui altera-a
ib_launcherbooleanfalseApresenta 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.

PropriedadeTipoPredefiniçãoFunção
is_labelstring""Rótulo do controlo. Aceita a formatação com etiquetas
is_imagestring""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_enabledbooleantruefalse desativa o controlo a cinzento e bloqueia a sua ativação
ib_checkedbooleanfalseEstado premido de um alternador ou assinalado de uma caixa de verificação
ib_visiblebooleantruefalse oculta o controlo; os vizinhos aproximam-se
is_textstring""Texto introduzido ou selecionado numa caixa de lista modificável
id_valuedouble0Valor numérico de um contador
id_mindouble0Apenas 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_maxdouble0Apenas 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_stepdouble0Apenas 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_colorlong-1Cor atual de um seletor de cor
ii_visible_itemsinteger3Apenas 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_keytipstring""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_tooltipstring""Tooltip simples apresentado ao passar sobre o item
is_super_tooltip_titlestring""Título do tooltip enriquecido do item (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido do item (aceita marcação enriquecida)
is_super_tooltip_imagestring""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").

PropriedadeTipoPredefiniçãoFunção
is_imagestring""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_enabledbooleantruefalse apresenta a entrada a cinzento
ib_visiblebooleantruefalse retira a entrada do menu na sua próxima abertura — cascata incluída — sem a eliminar
ib_checkedbooleanfalseMarca 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.

PropriedadeTipoPredefiniçãoFunção
is_labelstring""Texto da entrada
is_imagestring""Imagem da entrada. Uma cadeia vazia retira-a
ib_enabledbooleantruefalse desativa a entrada: mostrada, nunca escolhida — Guardar enquanto não há nada para guardar
ib_checkedbooleanfalseMarca de verificação à frente da entrada
ib_visiblebooleantruefalse 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 grupoControlo obtidoEvento
of_add_big_button (string as_keys, string as_label, string as_image) → longBotã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 criadoue_clicked
of_add_big_split (string as_keys, string as_label, string as_image) → longBotã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 criadoue_clicked · ue_menu_selected
of_add_big_dropdown (string as_keys, string as_label, string as_image) → longBotã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 criadoue_menu_selected
of_add_button (string as_keys, string as_label, string as_image) → longBotã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 criadoue_clicked
of_add_toggle (string as_keys, string as_label, string as_image) → longPequeno 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 criadoue_toggled
of_add_dropdown (string as_keys, string as_label, string as_image) → longBotã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 criadoue_menu_selected
of_add_checkbox (string as_keys, string as_label) → longCaixa 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 criadoue_toggled
of_add_separator (string as_keys) → longSeparador 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) → longCaixa 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 criadoue_combo_changed
of_add_spinner (string as_keys, integer ai_width_px, double ad_min, double ad_max, double ad_step, double ad_value) → longContador 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 criadoue_value_changed
of_add_colorpicker (string as_keys, string as_label, string as_image, long al_color) → longBotã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 criadoue_clicked · ue_color_changed
of_add_gallery (string as_keys, integer ai_width_px, integer ai_tile_w, integer ai_tile_h) → longFaixa deslizante de mosaicos ilustradosue_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étodoFunçã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étodoFunçã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
MétodoFunçã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étodoFunçã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étodoFunçã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.

EventoAcionado 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) → booleanCancelá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
// 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 #

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