PBToolboxAI v5 ← Site

chartpie — u_pbt_chartpie #

← Referência dos componentes · Índice do guia

Gráfico circular: tarte, anel ou meia roda. Cada ângulo é uma parte do todo — a legenda esconde uma fatia, as outras ocupam o seu lugar.

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


Em resumo #

Userobjectu_pbt_chartpie
Classe de itensn_pbt_chartpie_slice (of_item(key))
Serve paraMostrar como um todo se reparte — vendas por região, pedidos por estado, orçamento gasto
PrincípioVocê acrescenta fatias (uma chave, um nome, um valor); os ângulos, as percentagens, a legenda e a animação são connosco

Arranque rápido #

// One slice per region : a key, a label and a value
uo_pie.of_add_slice(/*key*/ "north", /*label*/ "North", /*value*/ 420)
uo_pie.of_add_slice(/*key*/ "south", /*label*/ "South", /*value*/ 310)
uo_pie.of_add_slice(/*key*/ "east", /*label*/ "East", /*value*/ 260)

// The share of each region, written on its slice
uo_pie.ib_data_labels = true
uo_pie.is_label_format = "#percent#"

Uma fatia é uma PARTE do todo #

Você dá valores, nunca ângulos: o componente soma as fatias mostradas e dá a cada uma o ângulo da sua parte dessa soma. Esconder uma fatia — com um clique na legenda, ou através de ib_visible — fecha-a no lugar: as outras repartem de novo a roda, e #percent#, id_percent e of_total() acompanham. Um valor negativo não tem ângulo: é desenhado como zero e relê-se tal como o deu.

Os ângulos contam-se em graus, 0 em cima, no sentido do desenho: ii_start_angle = -90 e ii_sweep_angle = 180 dão a metade superior de um círculo — um indicador. A roda ajusta-se ao espaço que esse ângulo ocupa: uma meia roda é desenhada duas vezes maior.


Propriedades #

PropriedadeTipoPredefiniçãoPapel
is_titlestring""Título do gráfico, por cima da roda. Marcação aceite
ib_show_legendbooleantrueMostra a legenda. Clicar numa entrada esconde a sua fatia e lança ue_slice_toggled
is_legend_locationstringendOnde fica a legenda (constantes LEGEND_*): ao lado da roda (END, START, em coluna) ou por cima e por baixo (TOP, BOTTOM, lado a lado). START/END são lógicas: seguem o sentido de leitura. Uma posição desconhecida vale end, e relê-se assim
ib_legend_valuesbooleanfalseEscreve o valor e a parte de cada fatia na legenda, depois do seu nome
ib_value_tooltipbooleantrueO painel que nomeia a fatia sob o ponteiro — ou a do teclado — com o seu valor e a sua parte. Não é is_tooltip, a dica do componente inteiro. A dica de uma fatia (o seu is_tooltip) é escrita neste painel, mesmo a false
ib_data_labelsbooleanfalseUma etiqueta por fatia, que diz o que diz is_label_format, onde a põe is_label_position. Numa fatia demasiado estreita, a etiqueta é omitida em vez de escrita sobre as vizinhas
is_label_formatstring""O que diz uma etiqueta: #value# o valor, #percent# a sua parte do todo, #label# o seu nome (sem marcação), #key# a sua chave, #total# o total; #participation# diz o mesmo que #percent#. O resto é escrito tal como está. Vazio = só o valor
is_label_positionstringinsideOnde ficam as etiquetas (constantes LABEL_*): INSIDE, na fatia, a preto ou a branco conforme o que nela se lê; OUTSIDE, ao lado da roda, ligadas à sua fatia por um traço e afastadas para não se sobreporem
id_inner_radiusdouble0O buraco, em fração do raio: 0 uma tarte, 0.6 um anel (limitado a 0..0,9). A roda desliza de um para o outro
is_center_textstring""Texto no buraco de um anel, marcação aceite. Marcadores: #total# o total das fatias mostradas (no formato dos números), #count# o seu número; #hover_label#, #hover_value#, #hover_percent# a fatia sob o ponteiro ou a do teclado — em repouso, o todo: Total, o total, 100 %; #percent:key# e #value:key# a parte e o valor de uma fatia, mantidos atualizados façam os valores o que fizerem (um indicador escreve ele próprio os seus «72 %»). Uma chave desconhecida não escreve nada. Numa tarte nada é escrito
ii_start_angleinteger0Onde começa a primeira fatia, em graus: 0 em cima, 90 à direita, -90 à esquerda (450 relê-se 90)
ii_sweep_angleinteger360Que parte do círculo as fatias repartem, em graus (limitada a 10..360). Com ii_start_angle = -90, 180 desenha a metade superior — um indicador
ib_clockwisebooleantrueAs fatias seguem-se no sentido dos ponteiros do relógio, ou no outro. As setas do teclado seguem a ordem do desenho
is_sortstring"none"A ordem do desenho (constantes SORT_*): NONE a ordem em que as fatias foram dadas, DESC a maior primeiro, ASC a menor primeiro. A roda, a legenda e o teclado seguem-na; o modelo mantém a sua ordem — of_get_values, of_count e as cores da paleta não se mexem. Um valor desconhecido vale none
id_hover_push_outdouble0.08Quanto sai a fatia sob o ponteiro — ou a do teclado —, em fração do raio (limitado a 0..0,4). Soma-se ao id_push_out da fatia. 0 = nada se mexe
ib_track_hoverbooleanfalseSubscrição de ue_slice_hovered: um evento lançado a cada movimento do ponteiro só é enviado a uma aplicação que o pediu
is_formatstring""O formato de todos os números que o gráfico escreve — etiquetas, legenda, painel de valores, texto central — na sintaxe de um formato de DataWindow: #,##0.00, $#,##0, #,##0 "unidades", secções positivo;negativo;zero. Os separadores são os da língua de apresentação. Vazio (ou um formato que não é numérico) = o número tal como está, à milésima. As partes (#percent#) escrevem-se sempre à décima
id_others_thresholddouble0Agrupa as fatias pequenas: toda a fatia cuja parte do todo esteja abaixo desta percentagem junta-se a uma fatia «Outros», desenhada em último lugar num cinzento neutro — a legenda mostra-a no lugar delas. Os membros são julgados sobre todas as fatias, mostradas ou escondidas: esconder uma fatia grande nunca tira de lá as pequenas, e a fatia maior nunca entra. A sua chave é OTHERS_KEY ("__others") em todos os eventos, o seu valor é a soma dos seus membros mostrados, of_others_keys nomeia-os, of_item(OTHERS_KEY) lê o seu valor e a sua parte ou esconde-a. Uma só fatia pequena mantém o seu setor. 0 = nunca
ii_others_topinteger0Agrupa por número: as N fatias maiores mantêm o seu setor, todas as outras juntam-se a «Outros» (pelo menos duas, como para o limiar). Soma-se a id_others_threshold: uma fatia entra assim que uma das duas regras o diz. 0 = nenhuma regra assim
is_others_labelstring""O nome da fatia «Outros». Marcação aceite na legenda e no painel de valores; as etiquetas e o resumo lido por um leitor de ecrã escrevem o seu texto simples. Vazio = a palavra da língua de apresentação (Others, Outros…)
ib_auto_heightbooleanfalseO componente anuncia a sua altura ideal e o userobject ajusta-se (ue_auto_height). A largura dita-a: uma meia roda tem metade da altura
ib_enabledbooleantrueEsbatido, o gráfico continua a mostrar o que mostra mas deixa de responder: nem clique, nem duplo clique, nem teclado, nem legenda, e sai da ordem de tabulação
ib_animatedbooleantrueA roda chega animada — abre-se a partir do seu início, fatia após fatia — e os novos valores deslizam: as arestas entre as fatias mexem-se juntas, a roda nunca mostra um buraco nem uma fatia sobre a vizinha; uma fatia retirada fecha-se no seu lugar. Um posto configurado para reduzir o movimento nunca anima, e a roda chega ao mesmo sítio
ii_anim_durationinteger450Duração da chegada e de cada movimento, em milissegundos (limitada a 0..5000)
is_anim_easingstringease-outA curva do movimento (constantes EASING_*, os nomes do LiveCharts2): back-out passa e volta, bounce-out ressalta, elastic-out estala
ii_anim_delayinteger40Só à chegada (uma roda que não tinha nada no ecrã), o desfasamento entre duas fatias, em milissegundos (0 a 1000): a roda abre-se fatia após fatia, nunca mais de 600 ms depois no total, seja qual for o número de fatias. 0 = todas ao mesmo tempo. Uma mudança de valores desliza sempre todas as fatias juntas
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 acento deste componente (-1 = acento do tema)
is_tooltipstring""Dica simples mostrada ao passar sobre o componente
is_super_tooltip_titlestring""Título da dica enriquecida (tem precedência sobre is_tooltip)
is_super_tooltip_textstring""Texto da dica enriquecida (marcação rica aceite)
is_super_tooltip_imagestring""Imagem da dica enriquecida

Métodos #

MétodoPapel
of_add_slice ( string as_key, string as_label, double ad_value { , long al_color } )Acrescenta uma fatia: a sua chave, o seu nome (marcação aceite) e o seu valor; a sobrecarga com uma cor fixa-a, sem ela escolhe a paleta (um conjunto para um tema claro, outro para um escuro). Devolve 0 uma vez acrescentada, -5 se a chave estiver vazia, contiver / ou `, começar por __ (as chaves do próprio gráfico, como OTHERS_KEY) ou **já estiver tomada** (acrescentar nunca substitui uma fatia), -2` se o componente não estiver criado
of_clear ( )Retira todas as fatias — os seus handles vão com elas — e esquece as linhas de of_from_datastore: um of_map ou um of_reload posterior não as traz de volta. As definições ficam, os papéis de of_map também; no seu lugar é desenhada uma roda vazia. Devolve 0 uma vez esvaziado, -2 se o componente não estiver criado
of_from_datastore (datastore ads)Alimenta o gráfico a partir de um DataStore: uma linha = uma fatia. Uma coluna desempenha um papel quando tem o seu nome (key, label, value, color) ou quando of_map o diz; é precisa uma coluna ROLE_VALUE. Sem coluna ROLE_KEY, a chave de uma fatia é o seu número de linha; com ela, as linhas que partilham uma chave são somadas numa só fatia (o nome e a cor da primeira) — um ano de vendas torna-se uma fatia por categoria, sem ciclo. Números e datas são lidos como a DataWindow os escreve no posto (vírgula decimal, datas regionais: uma data passa a yyyy-mm-dd). Um segundo carregamento atualiza as fatias no lugar: uma chave que volta mantém o que o utilizador e o seu código lhe deram (escondida na legenda, afastada, uma cor do código, a sua dica) e o seu handle; as fatias das chaves que saíram vão-se; as fatias acrescentadas à mão ficam, depois das das linhas. Devolve 0 uma vez carregado — uma linha cuja chave esteja vazia, contenha / ou `, comece por __ ou esteja tomada por uma fatia acrescentada à mão é posta de lado, e of_get_last_error diz quantas —, -5 se o DataStore não for válido, nenhuma coluna desempenhar ROLE_VALUE ou uma coluna nomeada por of_map não estiver lá (of_get_last_error nomeia-a), -2` se o componente não estiver criado
of_from_datastore (datawindow adw)O mesmo a partir das linhas de uma DataWindow — a que o utilizador vê ao lado do gráfico. Os seus dados são partilhados com um DataStore de passagem: uma DataWindow que não os pode partilhar é recusada (-5, com o motivo). Devolve 0 uma vez carregado, -5 como acima, -2 se o componente não estiver criado
of_from_datastore (datawindowchild adwc)O mesmo a partir das linhas de um DataWindowChild (uma DataWindow pendente, um relatório aninhado). Devolve 0 uma vez carregado, -5 como acima, -2 se o componente não estiver criado
of_get_last_error ( )Porque é que a última chamada foi recusada (um papel de of_map que as linhas não têm…), ou quantas linhas o último of_from_datastore pôs de lado e porquê; senão o último erro da DLL, como para qualquer componente
of_get_values ( ref string as_keys[], ref double ad_values[] )Preenche os dois arrays com as fatias que o gráfico tem agora, pela ordem em que foram dadas (is_sort só muda o desenho), e devolve o seu número — o que o gráfico lê, não o que foi enviado
of_item ( string as_key )O handle n_pbt_chartpie_slice de uma fatia, para ler ou mudar o seu nome, valor, cor, afastamento ou visibilidade. of_item(OTHERS_KEY) é sempre válido: a fatia «Outros», o seu valor, a sua parte, a sua visibilidade (of_has não a nomeia: é do gráfico, não sua). Uma chave que o gráfico não tem dá um handle que não muda nada e lê valores vazios — uma propriedade não pode responder -5: verifique primeiro com of_has uma chave vinda de fora
of_map ( string as_role, string as_column )Dá um papel a uma coluna quando o seu nome não o diz: of_map(ROLE_VALUE, "amount"). Papéis: ROLE_KEY (as linhas de uma mesma chave são somadas), ROLE_LABEL, ROLE_VALUE, ROLE_COLOR (um long RGB() ou #rrggbb). Antes de of_from_datastore, ou depois: as linhas são então relidas no lugar. A coluna é julgada pelo próximo of_from_datastore (-5 aí se faltar); quando as linhas já dadas não a têm, não são relidas — o papel espera as linhas que vai dar, e of_get_last_error di-lo. Uma coluna vazia devolve o papel à coluna que tem o seu nome. Devolve 0 uma vez definido, -5 se o papel não for uma constante ROLE_, -2 se o componente não estiver criado
of_others_keys ( ref string as_keys[] )Preenche o array com as chaves das fatias agrupadas em «Outros» agora (ver id_others_threshold e ii_others_top), pela ordem em que foram dadas, e devolve o seu número — 0 quando nenhuma fatia está agrupada. Aquilo de que trata um clique em OTHERS_KEY
of_reload ( )Relê as linhas do último of_from_datastore — após um Retrieve, após uma edição — e atualiza as fatias no lugar, como um segundo of_from_datastore. Devolve 0 uma vez relido, -5 se nenhuma linha foi dada (ou of_clear as esqueceu, ou o DataStore foi destruído), -2 se o componente não estiver criado
of_remove_slice ( string as_key )Retira uma fatia; as outras ocupam o seu lugar, o seu handle é destruído. Devolve 0 uma vez retirada, -5 se nenhuma fatia tiver essa chave, -2 se o componente não estiver criado
of_set_values ( string as_keys[], double ad_values[] )Novos valores para várias fatias numa só chamada — o que um painel chama a cada atualização: as arestas entre as fatias deslizam juntas para os novos ângulos, a roda nunca abre um buraco. Devolve 0 uma vez aplicado, -5 se os dois arrays tiverem comprimentos diferentes ou uma chave não existir (então nada é aplicado), -2 se o componente não estiver criado
of_total ( )O total das fatias mostradas — o que vale 100 % agora: uma fatia escondida na legenda não conta, nem um valor negativo
of_reset ( )Esvazia o gráfico — handles de fatia incluídos — e repõe todas as propriedades no valor de origem. Devolve 0 uma vez feito, -2 se o componente não estiver criado

Eventos #

EventoDisparado quando
ue_slice_clicked (string as_key, double ad_value)Uma fatia foi clicada — ou confirmada com Enter ou Espaço na fatia do teclado (Tab até ao gráfico, depois as setas): a sua chave e o seu valor — OTHERS_KEY e a soma das suas fatias para a fatia «Outros». O clique é julgado onde a fatia repousa: perto do centro, o vazio que deixa uma fatia apontada ao sair continua a ser dela. Uma fatia escondida não tem nada para clicar
ue_slice_dblclicked (string as_key, double ad_value)Duplo clique numa fatia: a sua chave e o seu valor — o sítio onde abrir as linhas que estão por trás (um aprofundamento: um segundo of_from_datastore com as linhas dessa fatia). Os dois cliques anteriores lançaram ue_slice_clicked, como numa DataWindow; Enter continua a ser um clique
ue_slice_rclicked (string as_key, long al_x, long al_y)Clique direito numa fatia, ou tecla Menu (Shift+F10) na fatia do teclado. al_x, al_y: onde, em píxeis de ecrã — o ponteiro, ou o meio da fatia para a tecla Menu, nunca onde o rato estiver. Um componente contextmenu abre-se aí: uo_menu.of_show(al_x, al_y)
ue_slice_toggled (string as_key, boolean ab_visible)O utilizador escondeu ou voltou a mostrar uma fatia com um clique na legenda (ou com Enter / Espaço na sua entrada: a legenda é uma só paragem de Tab, as setas percorrem-na). A última fatia também se pode esconder: a roda diz então Todas as fatias estão ocultas. O que o gráfico mostra deixa então de ser o que a aplicação enviou. Definir ib_visible é um valor, como marcar uma caixa: este evento comunica o gesto do utilizador
ue_slice_hovered (string as_key)Só com ib_track_hover: o ponteiro ou o teclado chega a outra fatia — a sua chave; uma chave vazia quando as deixa todas: o ponteiro fora da roda, Esc, o foco que sai do gráfico
ue_auto_height (long al_height)Com ib_auto_height: o userobject acabou de ser redimensionado à sua altura ideal

Propriedades de item #

Lidas e escritas no handle de uma fatia: uo_pie.of_item(/*key*/ "north").id_value = 450. Cada leitura pergunta ao gráfico.

PropriedadeTipoPredefiniçãoPapel
is_labelstring""O nome da fatia, tal como a legenda e o painel o mostram; vazio = a sua chave
id_valuedouble0O seu valor; o seu ângulo é a sua parte do total, e desliza até ele
il_colorlong-1A sua cor; -1 = a cor da paleta. As cores de item herdadas (il_accent, il_back_color, il_text_color e as suas variantes ao passar) não têm efeito numa fatia: decide il_color
id_push_outdouble0Tira-a da roda para a destacar, em fração do raio (limitado a 0..0,4)
ib_visiblebooleantrueEsconde a fatia sem a retirar: as outras repartem de novo a roda, a legenda guarda um caminho de volta
id_percentdouble0A sua parte do que a roda mostra, de 0 a 100; 0 quando está escondida (só leitura). Cada parte escreve-se à décima: três fatias iguais leem 33,3 % cada, 99,9 % juntas — as partes nunca são forçadas a somar 100
is_tooltipstring""A sua dica, escrita no painel que nomeia a fatia sob o ponteiro (ou a do teclado) — nunca uma segunda bolha. Com ib_value_tooltip a false, o painel abre-se na mesma para ela, sem os números. Marcação aceite
is_super_tooltip_titlestring""O título a negrito da sua dica, escrito no painel sob o seu nome
is_super_tooltip_textstring""O texto da sua dica, no painel. Marcação aceite
is_super_tooltip_imagestring""Uma imagem no topo da sua dica, no painel (caminho do bundle, caminho absoluto ou resources.dll:nome)

Exemplos #

Um anel e o seu total #

// A hole of 60 % of the radius : a doughnut
uo_pie.id_inner_radius = 0.6

// In the hole : the slice under the pointer, in bold above its name ;
// at rest, the total of the slices shown above the word Total
uo_pie.is_center_text = "[b]#hover_value#[/b][br]#hover_label#"

// Whole numbers with a thousands separator : a display format, as in a DataWindow
uo_pie.is_format = "#,##0"

Uma meia roda como indicador #

// From the left, over half a circle : the upper half
uo_pie.ii_start_angle = -90
uo_pie.ii_sweep_angle = 180
uo_pie.id_inner_radius = 0.62

// What is spent and what is left, in the colour they mean
uo_pie.of_add_slice(/*key*/ "spent", /*label*/ "Spent", /*value*/ 72, /*color*/ RGB(/*red*/ 15, /*green*/ 108, /*blue*/ 189))
uo_pie.of_add_slice(/*key*/ "left", /*label*/ "Remaining", /*value*/ 28, /*color*/ RGB(/*red*/ 150, /*green*/ 150, /*blue*/ 150))

// The share spent, in the hole : worked out by the chart, it follows every new value
uo_pie.is_center_text = "[b]#percent:spent#[/b][br]spent"

Um painel vivo #

// Timer event of the window : new values for the same slices
// Local variables
string ls_keys[] = {"s1", "s2", "s3"}
double ld_load[]

// Read the figures, then hand them to the slices already on the chart : they
// SLIDE to their new angles instead of replaying their arrival
ld_load = wf_read_load()
uo_pie.of_set_values(/*keys*/ ls_keys, /*values*/ ld_load)

Abrir as linhas por trás de uma fatia #

// Event ue_slice_dblclicked of uo_pie : the key of the slice is the region
wf_open_orders(/*region*/ as_key, /*amount*/ ad_value)

Um menu numa fatia #

// Event ue_slice_rclicked of uo_pie : (string as_key, long al_x, long al_y)
// Remember the slice, then open the contextmenu of the window where the gesture
// was made : the pointer, or the middle of the slice for the Menu key
is_menu_slice = as_key
uo_menu.of_show(/*x*/ al_x, /*y*/ al_y)

A partir de um DataStore #

// Local variables
long ll_rc

// One slice per category : the rows of a category are SUMMED into its slice
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_KEY, /*column*/ "category")
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_LABEL, /*column*/ "category")
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_VALUE, /*column*/ "amount")

// ONE call reads every row of the DataStore retrieved when the window opened
// (an instance variable), no loop
ll_rc = uo_pie.of_from_datastore(/*ads*/ ids_sales)

// A row with no category is skipped : the chart says how many
if uo_pie.of_get_last_error() <> "" then wf_status(uo_pie.of_get_last_error())

A DataWindow no ecrã, relida no lugar #

// Open event of the window : the chart reads the DataWindow the user sees
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_KEY, /*column*/ "region")
uo_pie.of_map(/*role*/ u_pbt_chartpie.ROLE_VALUE, /*column*/ "amount")
uo_pie.of_from_datastore(/*adw*/ dw_sales)
// After a Retrieve : the slices follow IN PLACE - a region the user hid from
// the legend stays hidden, a new region gets its slice
dw_sales.Retrieve()
uo_pie.of_reload()

As fatias pequenas em «Outros» #

// Every slice under 5 % of the total joins ONE slice, drawn last in grey,
// and only the six largest products keep a slice of their own
uo_pie.id_others_threshold = 5
uo_pie.ii_others_top = 6
uo_pie.is_others_label = "Other products"

// The largest first : the reader compares them from the top
uo_pie.is_sort = u_pbt_chartpie.SORT_DESC
// Event ue_slice_clicked of uo_pie : a click on Others opens the slices it holds
// Local variables
string ls_keys[]

// Others names the slices it gathered
if as_key = uo_pie.OTHERS_KEY then
	uo_pie.of_others_keys(/*keys*/ ls_keys)
	wf_open_products(/*keys*/ ls_keys)
end if

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

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