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 #
| Userobject | u_pbt_gauge |
| Classe de itens | n_pbt_gauge_range (of_range(key)) |
| Serve para | Ler 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ípio | Você dá uma escala, um valor e intervalos; as marcas, os números, as cores e a animação são connosco |
| Família | Gé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 #
| Propriedade | Tipo | Omissão | Função |
|---|---|---|---|
is_title | string | "" | 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_value | double | 0 | O 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_minimum | double | 0 | O 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_maximum | double | 100 | O fim da escala |
is_format | string | "" | 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_unit | string | "" | Escrito depois do valor na leitura (%, km/h) |
ib_show_value | boolean | true | Mostra a leitura — o valor e a sua unidade — no fim da linha do título |
id_tick_step | double | 0 | O 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_ticks | integer | 4 | Marcas pequenas entre duas numeradas (0 a 9) |
ib_show_ticks | boolean | true | Mostra as marcas |
ib_show_labels | boolean | true | Mostra os números da escala |
id_target | double | 0 | Um objetivo — uma meta, um limiar —, marcado de través sobre a pista enquanto ib_show_target for verdadeiro |
ib_show_target | boolean | false | Mostra a marca de id_target |
is_pointer | string | bar | Como 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_color | long | -1 | A cor do valor — a barra ou a marca; -1 = o acento do tema |
il_track_color | long | -1 | A cor de a pista; -1 = um tom da cor do texto do tema |
ii_thickness | integer | 0 | A espessura da pista, em píxeis (0 a 80); 0 = automática: 14 para uma barra, 8 para uma marca |
ib_reversed | boolean | false | O 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_orientation | string | horizontal | O 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_editable | boolean | false | O 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_step | double | 0 | O 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_drag | boolean | false | Com 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_tooltip | boolean | true | O 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_tooltip | boolean | false | Opcional: 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_range | boolean | false | Opcional: 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_origin | double | 0 | Onde 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_placement | string | beside | Onde 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_height | boolean | false | O 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_enabled | boolean | true | A 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_animated | boolean | true | O 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_duration | integer | 450 | Duração do deslize, em milissegundos (0 a 5000) |
is_anim_easing | string | ease-out | A 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_style | string | "" | Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança |
is_theme_mode | string | "" | Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança |
il_theme_accent | long | -1 | Cor de acento deste componente (-1 = acento do tema) |
is_tooltip | string | "" | Dica simples mostrada ao passar sobre o componente |
is_super_tooltip_title | string | "" | Título da dica enriquecida (tem precedência sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto da dica enriquecida (marcação rica aceite) |
is_super_tooltip_image | string | "" | Imagem da dica enriquecida |
Métodos #
| Método | Funçã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 #
| Evento | Lanç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.
| Propriedade | Tipo | Omissão | Função |
|---|---|---|---|
id_from | double | 0 | O início do intervalo, na escala |
id_to | double | 0 | O seu fim. Extremos ao contrário desenham-se no sentido certo e relêem-se tal qual |
il_color | long | -1 | A 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_tone | string | "" | 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_label | string | "" | O seu nome, no painel sob o ponteiro e para um leitor de ecrã; vazio = a sua chave. Marcação aceite |
ib_visible | boolean | true | Esconde o intervalo sem o retirar; como uma caixa de verificação, não lança nenhum evento |
is_tooltip | string | "" | A sua dica, escrita no painel que nomeia o intervalo sob o ponteiro — nunca uma segunda bolha. Marcação aceite |
is_super_tooltip_title | string | "" | O título a negrito da sua dica, escrito no painel sob o seu nome |
is_super_tooltip_text | string | "" | O texto da sua dica, no painel. Marcação aceite |
is_super_tooltip_image | string | "" | 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 #
- No máximo três intervalos, com os seus tons: bem, cuidado, mal. Para além disso, o olho já não lê a cor sob a barra.
- Um formato em vez de um cálculo:
0%numa escala de 0 a 1,$#,##0para dinheiro — o valor continua a ser o do código. - Num painel que se atualiza muitas vezes, mantenha a animação: o valor desliza de onde está, não recomeça.
- Uma cor que quer dizer algo define-se pelo tom; deixe o valor com o acento do tema, ele segue o tema claro ou escuro.
- Para um relatório, a imagem do indicador tal como está no ecrã vem da base:
of_save_as_png(ouof_save_as_jpg),of_print_to_pdf,of_print— o valor final, nunca uma barra a meio caminho.
Herdado da base comum #
Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.
| Membros | Função | Detalhado em |
|---|---|---|
of_count · of_keys_at · of_has | Percorrer o que o componente contém | 3.2 Os items |
of_reset | Repor o componente a zero | 3.6 Repor um componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atalhos de teclado do componente | 3.5 Os atalhos de teclado |
of_is_created · of_is_ready · of_get_last_error | Se nasceu, se está pronto, o que falhou | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar a renderização como imagem | 3.8 Exportar a representação como imagem |
of_set_redraw | Agrupar as alterações num único repinte | 3.10 Boas práticas |
of_preload_icons | Ícones mostrados sem atraso | Apresentação instantânea: of_icon |
of_set_translation | Traduzir uma legenda do componente | 5.2 Adaptar uma etiqueta: of_set_translation |
of_focus_webview | Dar o foco ao componente | 6.4 Teclado e focus |
of_print · of_print_to_pdf | Imprimir, ou escrever um PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar uma propriedade pelo nome | 3.1 O motor de propriedades |
is_accessible_name · is_accessible_description | O nome e a descrição que um leitor de ecrã diz | 3.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.