PBToolboxAI v5 ← Site

gauge — u_pbt_gauge #

← Referência dos componentes · Índice do guia

Indicador linear: um valor lido ao longo de uma escala reta, horizontal ou vertical — uma barra ou uma marca, intervalos coloridos que dizem se está bem, um objetivo, uma leitura no formato à sua escolha.

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


Em resumo #

Userobjectu_pbt_gauge
Classe de itensn_pbt_gauge_range (of_range(key))
Serve paraLer uma grandeza num relance — ocupação de um disco, vendas do mês face ao objetivo, nível de um depósito, cursor de volume
PrincípioVocê dá uma escala, um valor e intervalos; as marcas, os números, as cores e a animação são connosco
FamíliaGémeo de angulargauge: os mesmos métodos, os mesmos eventos e, geometria à parte, as mesmas propriedades — aqui a orientação e a colocação dos intervalos, ali os ângulos e as pontas arredondadas

Arranque rápido #

// Three ranges of the scale, each with the tone of what it means
uo_gauge.of_add_range(/*key*/ "ok", /*from*/ 0, /*to*/ 70)
uo_gauge.of_add_range(/*key*/ "warn", /*from*/ 70, /*to*/ 90)
uo_gauge.of_add_range(/*key*/ "full", /*from*/ 90, /*to*/ 100)
uo_gauge.of_range(/*key*/ "ok").is_tone = u_pbt_gauge.TONE_SUCCESS
uo_gauge.of_range(/*key*/ "warn").is_tone = u_pbt_gauge.TONE_WARN
uo_gauge.of_range(/*key*/ "full").is_tone = u_pbt_gauge.TONE_DANGER

// The title, the unit, and the value : the bar slides to it
uo_gauge.is_title = "Disk usage"
uo_gauge.is_unit = "%"
uo_gauge.id_value = 64

A escala, o valor e os intervalos #

A escala vai de id_minimum a id_maximum (de 0 a 100 por omissão). O valor id_value relê-se tal como o deu: fora da escala é desenhado no batente da ponta mais próxima e a leitura escreve-o na mesma — um indicador que reescrevesse em silêncio o que a aplicação mediu mentiria duas vezes. Definido pelo código não lança nenhum evento, como SetItem: ue_value_changed diz o que o utilizador fez. NULL é ignorado: o valor anterior fica — teste uma medida que pode faltar (GetItemNumber devolve NULL) antes de a definir.

Os números seguem is_format, o formato de apresentação de um DataWindow (#,##0.0, $#,##0, 0% escreve a PARTE da escala — 50 em 0..200 dá 25 %, como a barra de progresso), com os separadores da língua de apresentação. Sem formato, é a escala que escolhe as casas decimais da leitura — duas para uma escala de 0 a 1, nenhuma para 0 a 100 —, nunca o valor, que escreveria 43 num segundo e 42,55 no seguinte; os números da escala tomam as do seu passo.

Um intervalo colore uma parte da escala: a sua cor é a que dá, senão a do seu tom (TONE_SUCCESS, TONE_WARN, TONE_DANGER, TONE_INFO = o acento do tema, TONE_NEUTRAL — um conjunto de cores por modo claro ou escuro), senão a da paleta. Os intervalos sobrepõem-se pela ordem em que foram acrescentados; of_current_range() diz em qual está o valor. São desenhados ao longo da pista, sob a barra. Um intervalo contém o seu início mas não o seu fim: no limite que dois intervalos partilham (60 entre 0–60 e 60–85), o valor está no que começa aí, seja qual for a ordem em que foram acrescentados; a ponta da escala pertence ao intervalo que a atinge. A cor de paleta de um intervalo fica fixada quando é acrescentado: retirar um não muda a cor dos outros. Um intervalo inteiramente fora da escala não é desenhado.


Propriedades #

PropriedadeTipoOmissãoFunção
is_titlestring""O título, no início da linha da leitura. Marcação aceite; também nomeia o componente para um leitor de ecrã. Sem título, nomeia-o o texto simples da dica (is_super_tooltip_title, senão is_tooltip), senão a palavra « Medidor » na língua de apresentação
id_valuedouble0O valor. Desliza para o seu lugar; fora da escala, desenhado no batente e relido tal qual. Definido pelo código, mudo; NULL é ignorado, o valor anterior fica
id_minimumdouble0O início da escala. Uma escala cujo mínimo não está abaixo do máximo está vazia: nem marca, nem número, nem intervalo, nem indicador, nem objetivo, e of_current_range() devolve uma cadeia vazia. Para inverter uma escala, ib_reversed
id_maximumdouble100O fim da escala
is_formatstring""O formato de apresentação de todos os números — leitura, escala, extremos de um intervalo —, com a sintaxe de um formato de DataWindow (#,##0.00, $#,##0, 0%), separadores da língua de apresentação. Vazio = a leitura toma as casas decimais da escala (duas para 0 a 1, nenhuma para 0 a 100), os números da escala as do seu passo (0,0, 0,2… 1,0)
is_unitstring""Escrito depois do valor na leitura (%, km/h)
ib_show_valuebooleantrueMostra a leitura — o valor e a sua unidade — no fim da linha do título
id_tick_stepdouble0O passo entre duas marcas numeradas. 0 = escolhido pela escala: um passo redondo (1, 2, 2,5 ou 5 vezes uma potência de dez, depois 3, 4,5 ou 6) que cai nas duas pontas quando existe — de 0 a 90 de 10 em 10, de −50 a 50 de 25 em 25, de 0 a 360 de 60 em 60 —, senão contado a partir do mínimo (de 32 a 212 de 20 em 20). Um passo que der conta-se sempre a partir do mínimo; um passo que desenharia mais de 200 marcas volta ao automático. Cada ponta tem uma marca numerada. Quando os números não cabem todos, escreve-se um em cada k para manter um passo regular, e as duas pontas são sempre escritas. Os números tomam as casas decimais do seu passo. O passo escolhido nunca é mais fino do que o que is_format escreve (de 0 a 3 no formato #,##0: 0, 1, 2, 3); um passo que dá continua a ser o seu, e o formato arredonda os seus números
ii_minor_ticksinteger4Marcas pequenas entre duas numeradas (0 a 9)
ib_show_ticksbooleantrueMostra as marcas
ib_show_labelsbooleantrueMostra os números da escala
id_targetdouble0Um objetivo — uma meta, um limiar —, marcado de través sobre a pista enquanto ib_show_target for verdadeiro
ib_show_targetbooleanfalseMostra a marca de id_target
is_pointerstringbarComo o valor se mostra (constantes POINTER_*): BAR, uma barra cheia desde o mínimo; MARKER, um triângulo ao lado da pista. Desconhecido = BAR
il_value_colorlong-1A cor do valor — a barra ou a marca; -1 = o acento do tema
il_track_colorlong-1A cor de a pista; -1 = um tom da cor do texto do tema
ii_thicknessinteger0A espessura da pista, em píxeis (0 a 80); 0 = automática: 14 para uma barra, 8 para uma marca
ib_reversedbooleanfalseO máximo no início da escala: à esquerda de um indicador horizontal (à direita em leitura da direita para a esquerda), em baixo num vertical. As setas continuam a mover a marca no seu sentido
is_orientationstringhorizontalO sentido da escala (constantes ORIENTATION_*). Uma escala horizontal segue o sentido de leitura: da direita para a esquerda, o seu mínimo fica à direita — a tecla Direita continua a mover a marca para a direita. Desconhecido = HORIZONTAL
ib_editablebooleanfalseO utilizador move o valor: arrastar a barra, clicar na escala, setas, Page Up / Down (dez passos), Home e End. As setas seguem o ecrã: Direita empurra para a direita, Cima para cima, seja o que for que tenha invertido a escala (direita para a esquerda, ib_reversed). Cada gesto lança ue_value_changed uma vez — uma tecla, como a mão, põe o valor de uma vez, e um arrasto interrompido (caixa de mensagem, Alt+Tab) termina como ao largar; Esc durante um arrasto repõe o valor (um valor escrito pelo seu código entretanto fica) sem premir o botão Cancelar da janela; a tecla Menu nomeia o intervalo em que está o valor
id_stepdouble0O passo da mão e das teclas; 0 = a precisão que a leitura mostra (as casas decimais de is_format, ou as que a escala escolhe): numa escala de 0 a 7 a mão dá 2,6, nunca um 2,61 que o utilizador não leu; uma tecla avança um centésimo da escala, nunca menos de um algarismo mostrado. As duas pontas continuam alcançáveis quando o passo não divide a escala: de 0 a 100 de 30 em 30, o valor passa por 0, 30, 60, 90, 100
ib_track_dragbooleanfalseCom ib_editable, opcional: enquanto o utilizador arrasta o valor, ue_value_tracking segue a mão — um volume ouvido em direto, uma pré-visualização redesenhada. ue_value_changed continua a chegar uma só vez, ao largar; quando um arrasto é interrompido (Esc, ib_editable ou ib_enabled postos a false pelo código), ue_value_tracking diz também o valor de onde partiu
ib_value_tooltipbooleantrueO painel que nomeia o intervalo sob o ponteiro, com os seus extremos. Não é is_tooltip, a dica do componente inteiro. A dica de um intervalo (o seu is_tooltip) é escrita neste painel, mesmo a false
ib_pointer_tooltipbooleanfalseOpcional: o painel nomeia também o valor sob o rato — na barra ou na marca — e o objetivo, com o seu número no formato da leitura. Os intervalos mantêm o seu próprio painel (ib_value_tooltip)
ib_value_follows_rangebooleanfalseOpcional: o valor — a barra ou a marca — toma a cor do intervalo em que está (o desenhado por cima se dois se sobrepõem): vermelho na zona vermelha. Fora de qualquer intervalo mantém il_value_color, senão o acento do tema. Enquanto o valor desliza, a cor segue o valor desenhado
id_origindouble0Onde começa a barra (POINTER_BAR): um valor abaixo da origem cresce no outro sentido — um desvio, uma variância, uma escala de −50 a 50 que começa em 0. Enquanto não for definida — ou depois de reposta a NULL —, a barra começa no mínimo e segue-o, e a propriedade relê o mínimo; fora da escala, na ponta mais próxima
is_range_placementstringbesideOnde são desenhados os intervalos (constantes PLACEMENT_*): beside, uma faixa própria ao longo da pista; behind, enchem a pista, mais claros, e uma barra mais fina passa por cima, com o objetivo atravessado — o « bullet graph » de um painel. Desconhecido = beside, e relê-se assim. Atrás, a barra mantém uma orla fina da cor da página: uma barra vermelha continua visível sobre a sua própria faixa vermelha; as faixas mais claras são uma decoração, o intervalo lê-se no painel e por um leitor de ecrã
ib_auto_heightbooleanfalseO componente anuncia a sua altura ideal e o userobject ajusta-se (ue_auto_height). Um indicador horizontal diz o que desenha, título incluído. Um indicador vertical não anuncia nada: passado de horizontal para vertical, o userobject mantém a última altura anunciada
ib_enabledbooleantrueA cinzento continua a mostrar o seu valor mas deixa de responder: nem clique, nem teclas, nem arrasto, e sai da ordem de tabulação
ib_animatedbooleantrueO valor desliza para o seu lugar, imagem a imagem — a barra cresce —, e chega desde o início da escala (o seu mínimo) quando o componente se desenha. Uma propriedade alterada durante o deslize (título, unidade, cor, tamanho) não o interrompe. Um posto configurado para reduzir animações nunca anima; a mão do utilizador nunca é animada; um valor definido sob of_set_redraw(false) desliza ao retomar
ii_anim_durationinteger450Duração do deslize, em milissegundos (0 a 5000)
is_anim_easingstringease-outA curva do deslize (constantes EASING_*, os nomes de LiveCharts2): back-out passa e volta, bounce-out ressalta, elastic-out estala. Uma ultrapassagem fica na escala. Desconhecido = ease-out
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étodoFunção
of_add_range ( string as_key, double ad_from, double ad_to { , long al_color } )Acrescenta um intervalo colorido de ad_from a ad_to (extremos escritos ao contrário são desenhados no sentido certo); a sobrecarga com cor fixa-a, senão o tom e depois a paleta. Devolve 0 depois de acrescentado, -5 se a chave estiver vazia, contiver / ou `, ou já existir (acrescentar nunca substitui), -2` se o componente não estiver criado. A cor de paleta é dada ao acrescentar: retirar um intervalo não muda a cor dos outros
of_clear_ranges ( )Retira todos os intervalos — os seus handles vão com eles —, o valor e as definições ficam. Devolve 0 depois de feito, -2 se o componente não estiver criado
of_current_range ( )A chave do intervalo em que o valor está agora, uma cadeia vazia se não estiver em nenhum ou se a escala estiver vazia. Onde dois intervalos se sobrepõem, ganha o último acrescentado — o desenhado por cima. Um intervalo oculto não conta; um intervalo que o modo demo não desenha conta: o que este método lê nunca depende da licença. Um intervalo contém o seu início mas não o seu fim: no limite comum de dois intervalos, o valor está no que começa aí, seja qual for a ordem em que foram acrescentados; a ponta da escala pertence ao intervalo que a atinge. Um intervalo fora da escala (não desenhado) também conta
of_range ( string as_key )O handle n_pbt_gauge_range de um intervalo, para ler ou mudar os extremos, a cor, o tom, o nome ou a visibilidade
of_remove_range ( string as_key )Retira um intervalo; o seu handle é destruído. Devolve 0 depois de retirado, -5 se nenhum intervalo tiver essa chave, -2 se o componente não estiver criado
of_reset ( )Esvazia os intervalos — handles incluídos — e repõe todas as propriedades no valor de origem. Devolve 0 depois de feito, -2 se o componente não estiver criado

Eventos #

EventoLançado quando
ue_value_changed (double ad_value)Só com ib_editable: o utilizador moveu o valor — uma vez por arrasto (ao largar, ou quando o arrasto é interrompido: uma caixa de mensagem aberta sob a mão, Alt+Tab), por clique, por tecla. Um valor definido pelo seu código não o lança, nem durante um arrasto. Para seguir a mão durante o arrasto: ib_track_drag
ue_value_tracking (double ad_value)Só com ib_editable e ib_track_drag, enquanto o utilizador arrasta o valor: cada nova posição da mão, depois — quando o arrasto é interrompido: Esc, ou ib_editable / ib_enabled postos a false pelo seu código — o valor de onde partiu. O valor final continua a chegar uma vez em ue_value_changed
ue_range_clicked (string as_key)Um intervalo foi clicado — ou validado com Enter ou Espaço no intervalo do teclado (Tab, depois as setas). Não num componente editável: aí um clique define o valor
ue_range_rclicked (string as_key, long al_x, long al_y)Clique direito num intervalo, ou tecla Menu (Shift+F10) no intervalo do teclado — num componente editável, o intervalo em que está o valor: o sítio onde abrir um menu; al_x, al_y: onde abrir o menu, em píxeis de ecrã — o ponteiro, ou pelo teclado (tecla Menu, Shift+F10) o meio do intervalo; um contextmenu abre-se aí tal como estão (uo_menu.of_show(al_x, al_y))
ue_auto_height (long al_height)Com ib_auto_height: o userobject acabou de ser redimensionado para a sua altura ideal

Propriedades de item #

Um intervalo designa-se pela sua chave: uo_gauge.of_range("warn").is_tone = u_pbt_gauge.TONE_WARN.

PropriedadeTipoOmissãoFunção
id_fromdouble0O início do intervalo, na escala
id_todouble0O seu fim. Extremos ao contrário desenham-se no sentido certo e relêem-se tal qual
il_colorlong-1A sua cor; -1 = a do seu tom, senão a 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 num intervalo: decidem il_color e is_tone
is_tonestring""O seu tom (constantes TONE_* do componente): SUCCESS, WARN, DANGER, INFO (o acento do tema), NEUTRAL — um conjunto por modo claro ou escuro, maiúsculas ou minúsculas indiferentes. il_color prevalece; um tom desconhecido vale nenhum tom
is_labelstring""O seu nome, no painel sob o ponteiro e para um leitor de ecrã; vazio = a sua chave. Marcação aceite
ib_visiblebooleantrueEsconde o intervalo sem o retirar; como uma caixa de verificação, não lança nenhum evento
is_tooltipstring""A sua dica, escrita no painel que nomeia o intervalo sob o ponteiro — nunca uma segunda bolha. 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 painel que vive #

// Local variables
double ld_used

// Timer event of the window : the bar slides to each new reading
ld_used = ids_monitor.GetItemNumber(1, "disk_used")

// A missing reading (NULL) is ignored by the gauge : test it, or the last one stays
if not IsNull(ld_used) then uo_gauge.id_value = ld_used

// Which range is it in now ? An alert outside the good one
st_alert.visible = (uo_gauge.of_current_range() <> "ok")

As vendas face ao objetivo #

// Dollars, a number every 50 000, up to 250 000
uo_gauge.id_maximum = 250000
uo_gauge.id_tick_step = 50000
uo_gauge.is_format = "$#,##0"

// The goal : a mark across the bar
uo_gauge.id_target = 200000
uo_gauge.ib_show_target = true

// Point at the bar or at the goal : the panel says its number
uo_gauge.ib_pointer_tooltip = true
uo_gauge.id_value = 168400

Um « bullet graph » de painel #

// Dollars in thousands, on a scale up to 300
uo_gauge.is_format = "$#,##0k"
uo_gauge.id_maximum = 300

// Three qualitative zones : poor, satisfactory, good
uo_gauge.of_add_range(/*key*/ "poor", /*from*/ 0, /*to*/ 150)
uo_gauge.of_add_range(/*key*/ "fair", /*from*/ 150, /*to*/ 225)
uo_gauge.of_add_range(/*key*/ "good", /*from*/ 225, /*to*/ 300)
uo_gauge.of_range(/*key*/ "poor").is_tone = u_pbt_gauge.TONE_DANGER
uo_gauge.of_range(/*key*/ "fair").is_tone = u_pbt_gauge.TONE_WARN
uo_gauge.of_range(/*key*/ "good").is_tone = u_pbt_gauge.TONE_SUCCESS

// The zones BEHIND a thinner bar, the plan across it
uo_gauge.is_range_placement = u_pbt_gauge.PLACEMENT_BEHIND
uo_gauge.id_target = 250
uo_gauge.ib_show_target = true

// The bar takes the colour of the zone it is in
uo_gauge.ib_value_follows_range = true
uo_gauge.id_value = 212

Um desvio face a um orçamento #

// A scale centred on zero : the bar starts at 0, to the left below it
uo_gauge.id_minimum = -50
uo_gauge.id_maximum = 50
uo_gauge.id_origin = 0
uo_gauge.id_value = -18

Um valor que o utilizador ajusta #

// The user moves the value, by steps of 5
uo_gauge.ib_editable = true
uo_gauge.id_step = 5

// Event ue_value_changed of uo_gauge : apply what the user chose
ii_level = Integer(ad_value)

Um volume ajustado em direto #

// The user drags the value, and the sound follows the hand
uo_gauge.ib_editable = true
uo_gauge.ib_track_drag = true

// Event ue_value_tracking of uo_gauge : the volume heard while the hand moves
inv_player.ii_volume = Integer(ad_value)

// Event ue_value_changed of uo_gauge : the volume kept when the hand lets go
ii_saved_volume = Integer(ad_value)

Um menu num intervalo #

// Event ue_range_rclicked of uo_gauge : remember the range, then open the menu
// at the pointer of the window
is_menu_range = as_key
m_range.PopMenu(/*xlocation*/ w_main.PointerX(), /*ylocation*/ w_main.PointerY())

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