PBToolboxAI v5 ← Site

contextmenu — u_pbt_contextmenu #

← Referência dos componentes · Índice do guia

O menu de contexto do Windows, com o tema da aplicação: uma lista em cascata que se abre no cursor, sob um controlo ou num ponto do ecrã — ícones, atalhos mostrados, marcas de verificação, entradas de opção, cabeçalhos de secção, listas longas que deslizam e respondem à escrita.

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


Em resumo #

Userobjectu_pbt_contextmenu
Classe de itensn_pbt_contextmenu_item (of_item(keys))
Serve paraOferecer, no clique direito ou sob um botão, os comandos que valem para o que está à mão
PrincípioDescreve as entradas pelo seu endereço; a janela, o teclado e as cascatas são connosco
Opção opt-inib_track_hover

Início rápido #

// The menu of a grid : three commands, a separator, a cascade
uo_menu.of_add_item(/*keys*/ "copy", /*text*/ "&Copy")
uo_menu.of_add_item(/*keys*/ "paste", /*text*/ "&Paste")
uo_menu.of_add_item(/*keys*/ "delete", /*text*/ "&Delete")
uo_menu.of_add_separator(/*keys*/ "")
uo_menu.of_add_item(/*keys*/ "export", /*text*/ "&Export")
uo_menu.of_add_item(/*keys*/ "export/pdf", /*text*/ "PDF")
uo_menu.of_add_item(/*keys*/ "export/csv", /*text*/ "CSV")

// It opens from the right-click event of the grid : see Where to call of_show
// event ue_item_selected of uo_menu : (string as_keys)
// as_keys is the ADDRESS of the chosen entry
choose case as_keys
	case "copy"
		of_copy_selection()
	case "export/pdf"
		of_export("pdf")
end choose

Abrir o menu #

O componente em si é invisível: não ocupa espaço na janela. Coloque-o em qualquer lado, largura e altura nulas — só existe enquanto o menu está aberto. Quatro maneiras de o abrir:

// event rbuttondown of a DataWindow : the row under the cursor first
if row > 0 then dw_list.SetRow(/*row*/ row)
uo_menu.of_show()

// event ue_clicked of a "More" button : the menu hangs from it
uo_menu.of_show_under(/*control*/ uo_more)

// event rbuttondown of a DataWindow, another way : the point in the control, in
// PowerBuilder units, as PopMenu took it
uo_menu.of_show_at(/*control*/ dw_list, /*x*/ dw_list.PointerX(), /*y*/ dw_list.PointerY())

Onde chamar of_show #

ControloEventoA saber
DataWindowrbuttondownTorne primeiro atual a linha clicada (SetRow(row)). O premir serve: só um premir escolhe uma entrada, nunca o soltar que se segue
ListView, TreeViewrightclickedO evento dá o elemento clicado
Componente PBToolboxAIue_rclickedUm componente com itens tem também um evento de clique direito de item, que o nomeia pelo seu endereço
Campo de introduçãoum evento de utilizador em pbm_contextmenuChega no clique direito; return 1 impede o campo de abrir também o seu próprio menu Windows (Cortar, Copiar, Colar). O teclado não chega aí com o PowerBuilder 10: veja a receita abaixo

of_show() abre-se onde está o cursor, ou seja, onde o utilizador clicou: nenhuma unidade a converter. of_show(x, y) espera píxeis do ecrã, nunca as unidades PowerBuilder de um xpos/ypos relativo ao controlo. Para um ponto dentro de um controlo, em unidades PowerBuilder, há of_show_at(controlo, x, y).

Pelo teclado — Shift+F10 ou a tecla Menu — o rato está em qualquer lado: abra o menu sob o controlo que tem o foco, com of_show_under(controlo, true). Como no Windows, a sua primeira entrada ativa fica destacada: Enter escolhe-a, as setas partem daí. Com o PowerBuilder 10, pbm_contextmenu só recebe o clique direito, e Shift+F10 não chega a um campo de introdução (medido: nem pbm_contextmenu, nem pbm_keydown, nem pbm_syskeydown). A tecla que abre o menu num controlo PowerBuilder é portanto a tecla Menu (KeyApps!), tomada num evento de utilizador em pbm_keydown — pbm_dwnkey para um DataWindow, cujo clique direito passa pelo seu evento rbuttondown: pbm_contextmenu não chega aí com um clique numa célula (medido). Shift+F10 continua a ser recebido pelos próprios componentes PBToolboxAI (o seu ue_rclicked).

// User event ue_contextmenu of an edit field, mapped on pbm_contextmenu :
// the right-click opens the menu at the cursor
uo_menu.of_show()

// The field does not open its own Windows menu as well
return 1
// User event ue_key of the same field, mapped on pbm_keydown : the Menu key
// opens the menu under the field, its first entry highlighted
if key = KeyApps! then
	uo_menu.of_show_under(/*control*/ this, /*keyboard*/ true)
	return 1
end if

// User event ue_key of a DataWindow, mapped on pbm_dwnkey : the Menu key
if key = KeyApps! then
	uo_menu.of_show_under(/*control*/ this, /*keyboard*/ true)
	return 1
end if

Uma única resposta por abertura: um menu aberto termina com uma escolha (ue_item_selected) ou sem ela (ue_dismissed — um clique fora, Esc, of_close). Um menu que não tem nada para mostrar não se abre: ue_dismissed chega de imediato. Enquanto o menu está no ecrã a aplicação continua a correr: uma entrada desativada, oculta ou retirada entretanto já não pode ser escolhida (ue_dismissed em vez disso), e of_remove_item, of_clear ou of_reset fecham o menu aberto. ue_dismissed(as_reason) diz porquê: REASON_ESCAPE (Esc), REASON_OUTSIDE (um clique fora), REASON_FOCUS (outra janela tomou o foco), REASON_USER (de outra forma, outro menu que toma o lugar), REASON_CODE (of_close, uma entrada retirada ou o menu esvaziado), REASON_REPLACED (um segundo of_show), REASON_EMPTY (nada para mostrar), REASON_UNAVAILABLE (a entrada escolhida já não estava disponível).

Um menu de cada vez: um segundo of_show substitui o menu aberto, que responde primeiro ue_dismissed. E of_close chamado logo depois de of_show fecha o menu antes mesmo de ser desenhado — também se segue ue_dismissed.

Pelo teclado, as setas percorrem as entradas saltando as desativadas, → abre uma cascata e ← fecha-a, Enter escolhe, Esc sobe um nível e depois fecha. A letra sublinhada — a que segue & no rótulo, && para um e comercial — escolhe a entrada de imediato; fora disso, escrever as primeiras letras de um rótulo leva a essa entrada, espaços incluídos («report 2»). Uma lista longa (quinhentas entradas e mais) desliza e mantém-se fluida. Lido da direita para a esquerda, o menu alinha-se à direita e as cascatas abrem-se para a esquerda.


Cascatas, secções e marcas #

Uma entrada designa-se pelo seu endereço: a sua chave sozinha no primeiro nível (copy), as chaves dos pais e depois a sua, unidas por /, numa cascata (export/pdf). O pai tem de existir; uma chave não contém / nem | e não começa por __. ue_item_selected devolve esse mesmo endereço: duas cascatas podem dar o mesmo nome às suas entradas.

Um separador (of_add_separator) e um cabeçalho de secção (of_add_header) colocam-se no fim do menu (endereço vazio) ou da cascata de uma entrada. Nenhum dos dois é uma entrada: nunca escolhidos, nunca contados. Um separador nunca aparece no início, no fim nem duplicado; um cabeçalho cujas entradas estão todas ocultas desaparece com elas.

Uma marca de verificação (ib_checked) diz que uma opção está ativa; uma entrada de opção (is_group) é uma escolha entre várias: as entradas de um mesmo grupo sob o mesmo pai excluem-se — marcar uma, pelo código ou pela escolha do utilizador, desmarca as outras, e uma bola redonda substitui a marca. O atalho (is_shortcut) aparece à direita da entrada; é só mostrado: a tecla pertence ao controlo de que o menu fala (um campo de introdução já copia com Ctrl+C), e um menu de contexto que a armasse tirá-la-ia a todos os controlos da janela.

Uma entrada marcada fora de um grupo não alterna sozinha quando o utilizador a escolhe — como em qualquer menu Windows: alterne-a em ue_item_selected. Um comando que destrói distingue-se pelo seu tom: is_tone = TONE_DANGER escreve o seu texto no vermelho do tema, legível em claro como em escuro. Para que uma opção alterne sozinha na escolha, ponha ib_auto_check = true: a marca muda antes de ue_item_selected. Uma opção é uma caixa de verificação — anunciada «não selecionada» por um leitor de ecrã — assim que foi marcada uma vez, ou assim que ib_checkable = true.

// A section of three exclusive entries in the View cascade
uo_menu.of_add_header(/*keys*/ "view", /*text*/ "Layout")
uo_menu.of_add_item(/*keys*/ "view/list", /*text*/ "&List")
uo_menu.of_add_item(/*keys*/ "view/details", /*text*/ "&Details")
uo_menu.of_item(/*keys*/ "view/list").is_group = "layout"
uo_menu.of_item(/*keys*/ "view/details").is_group = "layout"

// Checking one unchecks the other
uo_menu.of_item(/*keys*/ "view/details").ib_checked = true

// The shortcut SHOWN at the right of an entry
uo_menu.of_item(/*keys*/ "copy").is_shortcut = "Ctrl+C"

// A command that destroys : the red of the theme
uo_menu.of_item(/*keys*/ "delete").is_tone = uo_menu.TONE_DANGER

// event ue_item_selected : a check mark outside a group is switched by you
if as_keys = "wrap" then uo_menu.of_item(/*keys*/ as_keys).ib_checked = not uo_menu.of_item(/*keys*/ as_keys).ib_checked

// ... or by the entry itself, before ue_item_selected
uo_menu.of_item(/*keys*/ "grid").ib_auto_check = true

Reaproveitar um menu PowerBuilder #

Os seus menus emergentes já estão escritos? of_load_menu faz deles o menu do componente: passe o elemento sobre o qual chamava PopMenu. Cada elemento torna-se uma entrada, cascatas incluídas, com o seu texto (& incluído), o seu estado (Enabled, Checked, Visible), o seu Shortcut mostrado à direita — como o texto depois de uma tabulação — e a sua imagem de barra de ferramentas quando é um ficheiro presente. A sua chave é o ClassName do elemento, em cada nível. Na escolha, o script Clicked do elemento corre primeiro, depois ue_item_selected: o código escrito para PopMenu continua a servir. O menu fica vivo, como com PopMenu: cada abertura relê os elementos (Text, Enabled, Checked, Visible, Shortcut). O código que precedia PopMenu — m_paste.Enabled = (Clipboard() <> "") — e um Clicked que faz this.Checked = not this.Checked veem-se portanto na abertura seguinte; um elemento desativado ou oculto enquanto o menu está aberto não executa o seu Clicked (ue_dismissed(REASON_UNAVAILABLE)). Mantenha vivo o objeto menu enquanto o componente o usar. of_loaded_item devolve o elemento de uma entrada, para ler o que só o menu sabe (a sua MicroHelp) — teste-o com IsValid, uma entrada acrescentada à mão não tem. Um script Clicked que lê ParentWindow encontra aí uma janela válida — medido com o PowerBuilder 10, mesmo para um menu criado com create e nunca associado a uma janela —, mas é o PowerBuilder que a escolhe: nada garante que seja a janela que tem o menu de contexto. Para que um Clicked alcance uma janela precisa, dê-a ao menu numa variável de instância, definida antes de of_load_menu, ou passe esse código para ue_item_selected.

// Instance variable of the window : the menu lives as long as it does
// m_popup im_popup

// open event of the window : the items of m_popup.m_edit become the menu
im_popup = create m_popup
uo_menu.of_load_menu(/*menu*/ im_popup.m_edit)

// event rbuttondown of the DataWindow : the code before PopMenu stays,
// of_show replaces PopMenu - the items are read again as it opens
im_popup.m_edit.m_paste.Enabled = (Clipboard() <> "")
uo_menu.of_show()

// event ue_item_hover of uo_menu (ib_track_hover = true) : the MicroHelp
if IsValid(uo_menu.of_loaded_item(/*keys*/ as_keys)) then st_help.text = uo_menu.of_loaded_item(/*keys*/ as_keys).MicroHelp
// A Clicked that must reach ONE given window : the menu keeps that window
// itself. Instance variable of m_popup : window iw_owner
// Clicked of m_edit.m_copy
iw_owner.TriggerEvent("ue_copy")

// open event of the window, before of_load_menu
im_popup.iw_owner = this

Propriedades #

PropriedadeTipoPredefiniçãoPapel
ib_track_hoverbooleanfalseAtiva ue_item_hover, que diz em que entrada estão o ponteiro ou o teclado — para a linha de ajuda de uma barra de estado. Sem ele o menu nem sequer o reporta: um evento lançado a cada movimento só é enviado à aplicação que o pediu — defina-a antes de of_show: alterada com o menu aberto, vale a partir da abertura seguinte
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)

Métodos #

MétodoPapel
of_add_header (string as_keys, string as_text)Acrescenta um cabeçalho de secção no fim do menu (endereço vazio) ou da cascata de uma entrada: uma linha de título acima das entradas que o seguem. Nunca escolhido nem contado. Devolve 0 depois de acrescentado, -5 quando nenhuma entrada vive nesse endereço, -2 quando o componente não está criado
of_add_item (string as_keys, string as_text)Acrescenta uma entrada no seu endereço: copy no menu, export/pdf na cascata de uma entrada export existente, tão fundo quanto preciso. Um rótulo vazio mostra a chave; & marca a letra que a escolhe pelo teclado. Devolve 0 depois de acrescentada, -5 quando o endereço é recusado (pai não encontrado, endereço já ocupado, nível vazio como export/, chave com ` ou a começar por __), -2` quando o componente não está criado
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)Igual, com o ícone e a marca — o ícone em terceiro, como em toda a biblioteca. Uma entrada desativa-se pelo seu handle: of_item(keys).ib_enabled = false. Devolve 0 depois de acrescentada, -5 quando o endereço é recusado, -2 quando o componente não está criado
of_add_separator (string as_keys)Acrescenta um separador no fim do menu (endereço vazio) ou da cascata de uma entrada. Devolve 0 depois de acrescentado, -5 quando nenhuma entrada vive nesse endereço, -2 quando o componente não está criado
of_clear ( )Esvazia o menu e liberta os handles obtidos com of_item. Um menu aberto fecha-se, e ue_dismissed di-lo. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_close ( )Fecha o menu do componente se estiver no ecrã, sem escolha: segue-se ue_dismissed, como num clique fora. Nada aberto, nada acontece. Devolve 0 depois de pedido, -2 quando o componente não está criado
of_insert_item (string as_keys, string as_text, long al_index)Insere uma entrada numa posição da sua lista em vez de no fim: as_keys é o endereço que terá, al_index o seu lugar entre as entradas dessa lista, a partir de 1 (0 ou menos = a primeira, para lá = o fim). Os separadores e os cabeçalhos não contam: a entrada fica logo antes da que ocupava essa posição. Devolve 0 depois de acrescentada, -5 quando o endereço é recusado (como of_add_item), -2 quando o componente não está criado
of_insert_item (string as_keys, string as_text, string as_image, boolean ab_checked, long al_index)Igual, com o ícone e a marca, como of_add_item os recebe. Devolve 0 depois de acrescentada, -5 quando o endereço é recusado, -2 quando o componente não está criado
of_is_open ( )true enquanto um menu do componente está no ecrã — aberto, e ainda não respondido por uma escolha ou um fecho
of_item (string as_keys)Devolve o handle de uma entrada, pelo seu endereço, para a ler ou alterar mais tarde (rótulo, estado, ícone, atalho, grupo, cores). Uma chave sozinha é resolvida no endereço completo da única entrada que a tem: of_item("pdf") e of_item("export/pdf") devolvem então o mesmo handle. Ambígua, ou sem entrada que a tenha, devolve um handle que não muda nada em vez da entrada errada
of_load_menu (menu am_menu)Constrói o menu a partir de um menu PowerBuilder: passe o elemento sobre o qual chamava PopMenu. Os seus elementos tornam-se as entradas, cascatas incluídas, chave = ClassName; na escolha, o Clicked do elemento corre antes de ue_item_selected. Os elementos são relidos em cada abertura. O menu substitui o que o componente tinha. Devolve 0 depois de carregado, -5 quando o menu não é válido, -2 quando o componente não está criado
of_loaded_item (string as_keys)O elemento de menu PowerBuilder de onde vem uma entrada (of_load_menu), pelo seu endereço — para ler a sua MicroHelp. Um endereço que não vem de um menu devolve uma referência inválida: teste-a com IsValid
of_remove_item (string as_keys)Retira uma entrada e a sua cascata; as outras ficam. Os seus handles são libertados; um menu aberto fecha-se (ue_dismissed). Devolve 0 depois de retirada, -5 quando nenhuma entrada vive nesse endereço, -2 quando o componente não está criado
of_reset ( )Esvazia o menu e repõe cada propriedade no seu valor por omissão, sem lançar nenhum evento. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_show ( )Abre o menu no cursor. Chame-o a partir do clique direito do controlo que recebe o gesto. Um menu sem entradas visíveis não se abre: é lançado ue_dismissed. Devolve 0 depois de pedido, -2 quando o componente não está criado
of_show (long al_x, long al_y)Igual, numa posição do ecrã em píxeis. Coordenadas negativas são um ponto real: um ecrã colocado à esquerda ou acima do principal. Devolve 0 depois de pedido, -2 quando o componente não está criado
of_show_at (dragobject ado_control, long al_x, long al_y)Abre o menu num ponto dentro de um controlo, em unidades PowerBuilder a partir do seu canto superior esquerdo — o ponto que PopMenu recebia: of_show_at(dw_list, dw_list.PointerX(), dw_list.PointerY()). O controlo fica guardado: of_source nomeia-o. Devolve 0 depois de pedido, -5 quando o controlo não é válido ou uma coordenada é nula, -2 quando o componente não está criado
of_show_under (dragobject ado_control)Abre o menu sob um controlo: pende do seu bordo inferior, alinhado pelo seu bordo de início (o bordo direito numa disposição da direita para a esquerda), e abre-se por cima quando o ecrã acaba por baixo. Devolve 0 depois de pedido, -5 quando o controlo não é válido, -2 quando o componente não está criado — sob um componente com itens (uma buttonbar, uma toolbar), o menu pende sob o componente inteiro, não sob um dos seus botões
of_show_under (dragobject ado_control, boolean ab_keyboard)Igual, dizendo como o menu foi pedido: true para o teclado (Shift+F10, tecla Menu) — a primeira entrada ativa fica destacada, Enter escolhe-a, como no Windows. Devolve 0 depois de pedido, -5 quando o controlo não é válido, -2 quando o componente não está criado
of_source ( )O controlo a partir do qual o menu no ecrã — ou o último — foi aberto: o dado a of_show_under ou a of_show_at. Leia-o em ue_item_selected quando um menu serve vários controlos. Um menu aberto no cursor ou num ponto do ecrã (of_show) não tem: a referência é inválida, teste-a com IsValid

Eventos #

EventoDisparado quando
ue_item_selected (string as_keys)O utilizador escolheu uma entrada, com o rato ou o teclado. as_keys é o seu endereço completo (export/pdf). Uma entrada de um grupo fica marcada, e as outras do seu grupo desmarcadas, antes do evento
ue_dismissed (string as_reason)O menu fechou-se sem escolha: um clique fora, Esc, of_close, uma entrada retirada ou o menu esvaziado enquanto estava aberto, um segundo of_show que o substituiu — e também quando of_show não tinha nada para mostrar — as_reason diz qual: REASON_ESCAPE, REASON_OUTSIDE, REASON_FOCUS, REASON_USER, REASON_CODE, REASON_REPLACED, REASON_EMPTY, REASON_UNAVAILABLE (uma entrada desativada, oculta ou retirada desde a abertura)
ue_item_hover (string as_keys)Com ib_track_hover = true: a entrada em que está o ponteiro, pelo seu endereço — também uma entrada desativada, para que a sua ajuda diga porquê; pelo teclado, as entradas onde ele para, saltando as desativadas. Lançado uma vez por entrada, e depois com um endereço vazio quando o menu fecha: esvazie então a linha de ajuda. of_reset fecha um menu aberto sem o lançar: esvazie-a você mesmo

Propriedades de item #

PropriedadeTipoPredefiniçãoPapel
is_textstring""Rótulo da entrada. & marca a letra que a escolhe pelo teclado (&& para um e comercial); vazio, mostra-se a chave e o rótulo relê-se vazio
ib_enabledbooleantrueA false, a entrada fica desativada: mostrada, nunca escolhida, a sua cascata fechada
ib_visiblebooleantrueA false, a entrada sai do menu — cascata incluída — sem ser retirada: mantém a chave e o estado, e volta ao seu lugar. Uma cascata cujas entradas estão todas ocultas fica, desativada
ib_checkedbooleanfalseUma marca na entrada — uma bola redonda para uma entrada de um grupo. Marcar uma entrada de um grupo desmarca as outras do grupo; fora de um grupo, a entrada não alterna sozinha na escolha: faça-o em ue_item_selected, ou defina ib_auto_check
ib_checkablebooleanfalseUma caixa de verificação: a opção é mostrada e anunciada como tal mesmo desmarcada («não selecionada» para um leitor de ecrã). Uma entrada marcada uma vez passa a sê-lo sozinha; defina-a para uma opção que começa desmarcada. Uma entrada de opção (is_group) nunca o é
ib_auto_checkbooleanfalseA true, escolher a entrada alterna sozinha a sua marca, antes de ue_item_selected — ib_checked diz aí o novo estado. Torna-se uma caixa de verificação; sem efeito numa entrada de um grupo
is_groupstring""Faz da entrada uma entrada de opção do grupo indicado: as entradas de um grupo sob o mesmo pai excluem-se. Vazio: uma entrada comum
is_imagestring""Ícone da entrada, alterado no lugar. Os mesmos caminhos que of_add_item (mono:, tint:, ficheiro.dll:NOME); vazio, desaparece
is_shortcutstring""O atalho mostrado à direita da entrada (Ctrl+C). Só mostrado: a tecla pertence ao controlo de que o menu fala. Nunca mostrado numa entrada que abre uma cascata
is_tonestring""O tom do comando: o seu texto, em repouso, numa cor do tema claro ou escuro — TONE_DANGER para o que destrói, TONE_WARN, TONE_SUCCESS, TONE_INFO; vazio ou TONE_NEUTRAL = o texto do tema. Apontada, a entrada toma as cores de passagem do tema; um il_text_color da entrada prevalece. As constantes estão em u_pbt_contextmenu
il_accentlong-1Destaque desta entrada: a sua marca, e o seu bordo quando apontada (-1 = o do tema)
il_back_colorlong-1Fundo desta entrada em repouso (-1 = o do tema). Dado sozinho, o texto toma uma cor legível sobre ele
il_text_colorlong-1Cor do texto desta entrada (-1 = a do tema). Uma só cor não se lê no tema claro e no escuro: defina il_back_color com ela, ou prefira is_tone, que segue o tema
il_back_color_hoverlong-1Fundo desta entrada enquanto está apontada (-1 = o do tema)
il_text_color_hoverlong-1Cor do texto desta entrada enquanto está apontada (-1 = a do tema): defina il_back_color_hover com ela, a passagem do tema muda de um tema para outro

Uma entrada não mostra nenhuma dica: o menu nativo não tem. O is_tooltip que o handle herda é guardado e relê-se, mas nunca é mostrado — para uma ajuda, ib_track_hover e ue_item_hover.


Exemplos #

Um menu conforme o que foi clicado #

// event ue_rclicked of the list : the menu is rebuilt for the current row
uo_menu.of_clear()
uo_menu.of_add_item(/*keys*/ "open", /*text*/ "&Open")
uo_menu.of_add_item(/*keys*/ "rename", /*text*/ "Re&name")
uo_menu.of_add_separator(/*keys*/ "")
uo_menu.of_add_item(/*keys*/ "delete", /*text*/ "&Delete")

// A row the user may not change : its commands are greyed
uo_menu.of_item(/*keys*/ "rename").ib_enabled = ib_can_edit
uo_menu.of_item(/*keys*/ "delete").ib_enabled = ib_can_edit

// At the cursor
uo_menu.of_show()

Um botão Mais #

// event ue_clicked of the button : the menu hangs from it
uo_menu.of_show_under(/*control*/ uo_more)

Uma ajuda na barra de estado #

// Once, after the menu is built : report the pointed entry
uo_menu.ib_track_hover = true

// event ue_item_hover of uo_menu : (string as_keys), "" when the menu closes
choose case as_keys
	case "delete"
		st_help.text = "Deletes the row, without the clipboard."
	case else
		st_help.text = ""
end choose

Boas práticas #

Versão de demonstração #

Sem chave, cada lista do menu — a raiz como cada cascata — mostra as suas seis primeiras entradas visíveis; os separadores e os cabeçalhos não contam. A última linha, desativada, diz quantas entradas não são mostradas — ou, sem corte, leva a menção «PBToolboxAI — DEMO». O modelo guarda tudo: uma chave mostra o menu inteiro na abertura seguinte.

O lançador não tem superfície: dos membros herdados abaixo, of_save_as_png, of_print e of_focus_webview não têm nada para capturar, imprimir nem receber. of_register_shortcut continua útil — um atalho da janela que abre o menu com of_show_under.

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
is_accessible_name · is_accessible_descriptionO nome e a descrição que um leitor de ecrã diz3.4 Propriedades e eventos opcionais

Neste lançador invisível, of_count e of_keys_at percorrem o que adicionou, ramos ocultos incluídos — não o que a roda vai desenhar. A exportação como imagem, a impressão, of_focus_webview e of_set_redraw não têm aqui efeito útil: o componente não desenha nada de próprio, a roda vive na sua própria janela.

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