progressbar — u_pbt_progressbar #
← Referência dos componentes · Índice do guia
Barra de progresso com tema: barra horizontal ou anel, valor quantificado ou animação de espera, percentagem apresentada, cor livre.
▶ Ver ao vivo — Aplicação de demonstração, mosaico Progress: a pré-visualização, o código que o produz e esta página, lado a lado.
Em resumo #
| Userobject | u_pbt_progressbar |
| Classe de items | — (componente sem items) |
| Serve para | Mostrar o avanço de um processamento longo: importação, exportação, impressão, chamada ao servidor |
| Duas utilizações | determinada (o avanço é conhecido) ou indeterminada (apenas se sabe que está a trabalhar) |
Início rápido #
// Local variables
long ll_total = 4820
// Window open event : the readout, and the scale of the job
uo_progress.ib_show_value = true // shows the percentage next to the bar
uo_progress.id_maximum = ll_total // the scale of the job : nothing to compute
// Local variables
long ll_i, ll_total = 4820
// During the operation : give the raw value, row by row. It costs almost
// nothing : the bar is redrawn only when what it shows changes.
for ll_i = 1 to ll_total
of_process_row(ll_i)
uo_progress.id_value = ll_i
next
Propriedades #
| Propriedade | Tipo | Predefinição | Função |
|---|---|---|---|
id_value | double | 0 | Avanço atual, valor BRUTO na escala id_minimum … id_maximum, relido tal como o atribuiu por último (sem limites). A etiqueta arredonda para baixo: 99,6 mostra 99 %, 100 % significa terminado. Atribuí-lo em cada linha de um ciclo quase não custa nada: a barra só é redesenhada quando muda o que mostra (uma décima de ponto percentual), ou a cada valor quando is_format o escreve |
id_minimum | double | 0 | Limite inferior da escala. Um double: uma fração 0..1 é uma escala válida |
id_maximum | double | 100 | Limite superior da escala. Um double: um número de bytes acima de 2 GB é uma escala válida. Intervalo vazio ou invertido (mín ≥ máx): 100 % assim que o valor atinge o máximo, 0 % antes — um lote vazio (id_maximum = 0, id_value = 0) aparece terminado |
is_mode | string | "linear" | Forma do componente: linear (barra horizontal que ocupa toda a largura do controlo e segue a sua altura: cabe onde estava uma HProgressBar) ou circular (anel) — constantes MODE_LINEAR, MODE_CIRCULAR. Um valor desconhecido volta a linear; a barra fica de pé com is_orientation |
is_orientation | string | "horizontal" | Direção da barra linear, com as palavras do indicador linear: horizontal (predefinição) ou vertical — constantes ORIENTATION_HORIZONTAL, ORIENTATION_VERTICAL. Vertical, a barra enche-se de baixo para cima (um nível, um depósito, uma fila), com a leitura por baixo: cabe onde estava uma VProgressBar. O anel ignora-a. Um valor desconhecido volta a horizontal |
ib_indeterminate | boolean | false | Modo espera: uma barra que desliza, ou um arco fixo que gira no modo circular; id_value é ignorada mas mantida. Se o Windows pedir menos animações, a espera pulsa em vez de se mover. Com ib_show_value, a leitura escreve só is_unit: o texto da espera («Connecting...»). Em pausa ou em erro (is_state), a espera para: uma barra (um anel) cheia da cor do estado, como a barra de tarefas do Windows |
ib_show_value | boolean | false | Apresenta a leitura ao lado da barra ou no centro do anel: a percentagem no idioma de apresentação («50 %» em francês, «50%» em inglês), ou o valor escrito por is_format, seguido de is_unit. Uma leitura longa é cortada com «…» em vez de esmagar a barra (a pista mantém 40 % do controlo); no anel, a unidade passa para uma segunda linha e o conjunto encolhe até caber, a unidade retirada quando falta espaço. Em espera (ib_indeterminate), só is_unit é escrito |
is_format | string | "" | Formato de apresentação do valor na leitura (ib_show_value), na sintaxe de um formato de DataWindow, como nos indicadores (#,##0, #,##0.00, $#,##0). Os separadores são os do idioma de apresentação. Uma máscara que contém % escreve a parte concluída, não o valor: 0.0% dá «35.0%» para 1 687 linhas de 4 820, em qualquer escala, arredondada por defeito como a percentagem (100 % = concluído). Vazio = a percentagem. Uma vez definido, cada valor é enviado para a barra, já que a leitura o escreve. O leitor de ecrã diz o mesmo texto |
is_unit | string | "" | Escrito depois da leitura, separado por um espaço: depois do valor, ou depois da percentagem quando is_format está vazio (of 500 rows, done). Texto simples, nunca marcação. Em espera é o único texto da leitura (Connecting...); no anel tem uma linha própria |
is_state | string | "normal" | O significado da barra, como a barra de progresso do Windows: STATE_NORMAL (cor de destaque), STATE_PAUSED (amarelo, o processamento está em espera) ou STATE_ERROR (vermelho, o processamento falhou). Pausa e erro assumem as cores de estado do tema, claro ou escuro, e prevalecem sobre il_value_color. Uma barra de espera (ib_indeterminate) em pausa ou em erro para e fica cheia da cor do estado, como a barra de tarefas do Windows. O leitor de ecrã diz o estado antes do valor («Error, 64%»). Um valor desconhecido equivale a STATE_NORMAL |
il_value_color | long | -1 | Cor de preenchimento, no formato RGB() do PowerBuilder. -1 = cor de destaque do tema. Em pausa ou em erro (is_state), prevalece a cor de estado. Só RGB(): uma cor de sistema do PowerBuilder (Highlight, ButtonFace…) não tem cor própria, é ignorada (a barra mantém o destaque, a propriedade relê -1) |
is_accessible_name | string | "" | Como o leitor de ecrã chama esta barra, como o AccessibleName de uma HProgressBar. Vazio = «Progress» no idioma de apresentação: duas barras na mesma janela (uma transferência, uma importação) só se distinguem pelo nome. Texto simples, nunca marcação |
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 destaque deste componente (-1 = destaque da aplicação, ou o do tema) |
Este componente não publica tooltip (
is_tooltip,is_super_tooltip_*): uma barra de progresso lê-se por si própria, e uma etiqueta ao passar o rato surgiria por baixo do ponteiro no preciso momento em que o utilizador olha para outro lado. Coloque o comentário de progresso num statictext ou numa statusbar ao lado da barra.of_set_property("tooltip", …)(esuper_tooltip_*) devolve-5: a porta pelo nome também está fechada.
Métodos #
| Método | Função |
|---|---|
of_reset ( ) | Repõe todas as propriedades nos respetivos valores por omissão (barra linear, escala 0–100, valor 0, percentagem oculta, cor do tema). Devolve 0 depois de aplicado, -2 se o componente não estiver criado |
of_set_redraw (boolean) | Agrupa uma rajada de alterações numa única representação. 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 #
| Evento | Acionado quando |
|---|---|
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 #
Progresso determinado com percentagem #
// Show the percentage, then move the bar
uo_progress.ib_show_value = true
uo_progress.id_value = 75 // the bar fills up to three quarters
Progresso indeterminado (duração desconhecida) #
// When the duration is unknown : the bar animates continuously
// and ignores id_value
uo_progress.ib_indeterminate = true
// Once the duration is known, switch back to determinate mode
uo_progress.ib_indeterminate = false
uo_progress.id_value = 20
Anel circular #
// Display mode : linear (bar) or circular (ring)
uo_progress.is_mode = u_pbt_progressbar.MODE_CIRCULAR
uo_progress.ib_show_value = true
uo_progress.id_value = 40
Escala personalizada #
// Local variables
long ll_row_count = 4820, ll_current_row = 1687
// Progress is not always a percentage : give the real scale
uo_progress.id_minimum = 0
uo_progress.id_maximum = ll_row_count // e.g. 4820 rows to import
// Then report the row being processed
uo_progress.id_value = ll_current_row // raw value, not a percentage
A percentagem apresentada por ib_show_value continua a ser calculada em relação a esta escala.
Cor personalizada e controlo do valor #
// Show the percentage next to the bar
uo_progress.ib_show_value = true
// The fill color accepts a standard PowerBuilder RGB()
uo_progress.il_value_color = RGB(/*red*/ 16, /*green*/ 137, /*blue*/ 62)
// The bar displays a value, it never computes one : your code moves it
uo_progress.id_value = 0
// timer event of the window, once a second
if uo_progress.id_value >= 100 then
Timer(0) // done : your code knows, it is the one that decided
uo_status.of_panel(/*key*/ "main").is_text = "Import complete"
else
uo_progress.id_value = uo_progress.id_value + 10
end if
Valor formatado, unidade e estado de erro #
// The readout counts rows instead of a bare percentage
uo_progress.ib_show_value = true
uo_progress.id_maximum = 4820
uo_progress.id_value = 3120
// The value with a PowerBuilder mask, then what it counts
uo_progress.is_format = "#,##0"
uo_progress.is_unit = "of 4,820 rows"
// The import failed at this row : the bar turns red where it stands
uo_progress.is_state = u_pbt_progressbar.STATE_ERROR
Uma percentagem com casas decimais #
// The readout says the share done with one decimal : a mask in % writes the percentage
uo_progress.ib_show_value = true
uo_progress.id_maximum = 4820
uo_progress.id_value = 1687
uo_progress.is_format = "0.0%" // 35.0%
Uma espera que falha #
// A job of unknown length : a busy bar, with the text of the wait
uo_progress.ib_indeterminate = true
uo_progress.ib_show_value = true
uo_progress.is_unit = "Connecting to the server..."
// The connection failed : the busy bar stops, full and red, and says why
uo_progress.is_state = u_pbt_progressbar.STATE_ERROR
uo_progress.is_unit = "Connection lost"
Uma barra vertical com nome próprio #
// A level that fills from the bottom up, where a VProgressBar stood
uo_progress.is_orientation = u_pbt_progressbar.ORIENTATION_VERTICAL
uo_progress.ib_show_value = true
uo_progress.id_value = 35
// Two bars in one window : the screen reader tells them apart by their name
uo_progress.is_accessible_name = "Tank level"
Boas práticas #
- Escolher o modo em função do que se sabe: indeterminado enquanto o volume for desconhecido, determinado assim que for conhecido.
- Preferir
id_minimum/id_maximumao cálculo manual de uma percentagem: a etiqueta e a apresentação acompanham automaticamente. - Deixar
il_value_colora-1para que a barra siga o tema, tanto claro como escuro; só fixar uma cor para transmitir um significado (verde = êxito). Um processamento em pausa ou falhado indica-se comis_state. - Atribuir
id_valuesem receio: a barra só é redesenhada quando muda o que mostra. Pelo menos um valor a cada 50 ms de relógio espera que a barra o tenha desenhado: a barra avança durante o ciclo, mesmo quando o ciclo espera por uma base de dados ou uma rede, sem código da sua parte. - Duas barras na mesma janela: dê a cada uma o seu
is_accessible_name, para que o leitor de ecrã as distinga. - Chamar
of_reset()antes de reutilizar a mesma barra para outro processamento.
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_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.