progressbar — u_pbt_progressbar #
← Riferimento dei componenti · Sommario della guida
Barra di avanzamento a tema: barra orizzontale o anello, valore numerico o animazione di attesa, percentuale visualizzata, colore a scelta.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Progress: l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_progressbar |
| Classe degli item | — (componente senza item) |
| Serve per | Mostrare l'avanzamento di un'elaborazione lunga: importazione, esportazione, stampa, chiamata al server |
| Due utilizzi | determinato (l'avanzamento è noto) o indeterminato (si sa soltanto che il lavoro è in corso) |
Avvio rapido #
// 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
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
id_value | double | 0 | Avanzamento corrente, valore GREZZO nella scala id_minimum … id_maximum, riletto come l'avete impostato per ultimo (non limitato). L'etichetta arrotonda per difetto: 99,6 mostra 99 %, 100 % significa terminato. Assegnarlo a ogni riga di un ciclo non costa quasi nulla: la barra viene ridisegnata solo quando cambia ciò che mostra (un decimo di punto percentuale), o a ogni valore quando is_format lo scrive |
id_minimum | double | 0 | Limite inferiore della scala. Un double: una frazione 0..1 è una scala valida |
id_maximum | double | 100 | Limite superiore della scala. Un double: un numero di byte oltre 2 GB è una scala valida. Intervallo vuoto o invertito (min ≥ max): 100 % non appena il valore raggiunge il massimo, 0 % prima — un lotto vuoto (id_maximum = 0, id_value = 0) appare terminato |
is_mode | string | "linear" | Forma del componente: linear (barra orizzontale che occupa tutta la larghezza del controllo e ne segue l'altezza: sta dove c'era una HProgressBar) o circular (anello) — costanti MODE_LINEAR, MODE_CIRCULAR. Un valore sconosciuto torna a linear; la barra si mette in verticale con is_orientation |
is_orientation | string | "horizontal" | Direzione della barra lineare, con le parole dell'indicatore lineare: horizontal (predefinito) o vertical — costanti ORIENTATION_HORIZONTAL, ORIENTATION_VERTICAL. Verticale, la barra si riempie dal basso verso l'alto (un livello, un serbatoio, una coda), con la lettura sotto: sta dove c'era una VProgressBar. L'anello la ignora. Un valore sconosciuto torna a horizontal |
ib_indeterminate | boolean | false | Modalità attesa: una barra che scorre, o un arco fisso che ruota in modalità circolare; id_value viene ignorata ma conservata. Se Windows chiede meno animazioni, l'attesa pulsa invece di muoversi. Con ib_show_value, la lettura scrive solo is_unit: il testo dell'attesa («Connecting...»). In pausa o in errore (is_state), l'attesa si ferma: una barra (un anello) piena del colore dello stato, come la barra delle applicazioni di Windows |
ib_show_value | boolean | false | Mostra la lettura accanto alla barra o al centro dell'anello: la percentuale nella lingua di visualizzazione («50 %» in francese, «50%» in inglese), o il valore scritto da is_format, seguito da is_unit. Una lettura lunga viene tagliata con «…» invece di schiacciare la barra (la traccia conserva il 40 % del controllo); nell'anello l'unità passa su una seconda riga e l'insieme si riduce finché ci sta, l'unità tolta quando manca lo spazio. In attesa (ib_indeterminate) si scrive solo is_unit |
is_format | string | "" | Formato di visualizzazione del valore nella lettura (ib_show_value), nella sintassi di un formato DataWindow, come per gli indicatori (#,##0, #,##0.00, $#,##0). I separatori sono quelli della lingua di visualizzazione. Una maschera che contiene % scrive la parte compiuta, non il valore: 0.0% dà «35.0%» per 1.687 righe su 4.820, su qualsiasi scala, arrotondata per difetto come la percentuale (100 % = finito). Vuoto = la percentuale. Una volta impostato, ogni valore viene inviato alla barra, poiché la lettura lo scrive. Il lettore di schermo dice lo stesso testo |
is_unit | string | "" | Scritto dopo la lettura, separato da uno spazio: dopo il valore, o dopo la percentuale quando is_format è vuoto (of 500 rows, done). Testo semplice, mai marcatura. In attesa è l'unico testo della lettura (Connecting...); nell'anello ha una riga propria |
is_state | string | "normal" | Il significato della barra, come la barra di avanzamento di Windows: STATE_NORMAL (colore d'accento), STATE_PAUSED (giallo, l'elaborazione è in attesa) o STATE_ERROR (rosso, l'elaborazione è fallita). Pausa ed errore prendono i colori di stato del tema, chiaro o scuro, e prevalgono su il_value_color. Una barra di attesa (ib_indeterminate) in pausa o in errore si ferma e diventa piena del colore dello stato, come la barra delle applicazioni di Windows. Il lettore di schermo dice lo stato prima del valore («Error, 64%»). Un valore sconosciuto vale STATE_NORMAL |
il_value_color | long | -1 | Colore di riempimento, nel formato RGB() di PowerBuilder. -1 = colore d'accento del tema. In pausa o in errore (is_state) prevale il colore di stato. Solo RGB(): un colore di sistema di PowerBuilder (Highlight, ButtonFace…) non ha un colore proprio, viene ignorato (la barra mantiene l'accento, la proprietà si rilegge -1) |
is_accessible_name | string | "" | Come il lettore di schermo chiama questa barra, come l'AccessibleName di una HProgressBar. Vuoto = «Progress» nella lingua di visualizzazione: due barre nella stessa finestra (un download, un'importazione) si distinguono solo per il nome. Testo semplice, mai marcatura |
is_theme_style | string | "" | Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio |
is_theme_mode | string | "" | Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio |
il_theme_accent | long | -1 | Colore d'accento di questo componente (-1 = accento dell'applicazione, o quello del tema) |
Questo componente non espone tooltip (
is_tooltip,is_super_tooltip_*): una barra di avanzamento si legge da sé, e un'etichetta al passaggio del mouse arriverebbe sotto il puntatore proprio nel momento in cui l'utente guarda altrove. Metta il commento sullo stato di avanzamento in uno statictext o in una statusbar accanto alla barra.of_set_property("tooltip", …)(esuper_tooltip_*) restituisce-5: anche la porta per nome è chiusa.
Metodi #
| Metodo | Ruolo |
|---|---|
of_reset ( ) | Riporta tutte le proprietà ai valori predefiniti (barra lineare, scala 0–100, valore 0, percentuale nascosta, colore del tema). Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_set_redraw (boolean) | Raggruppa una serie di modifiche in un unico rendering. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_save_as_png (string) · of_save_as_jpg (string) | Esporta il rendering come immagine. Restituisce 0 una volta scritta l'immagine, -4 se la scrittura fallisce, -2 se il componente non è creato |
Event #
| Event | Attivato quando |
|---|---|
ue_ready ( ) | Il componente ha terminato il caricamento; tutto ciò che è stato inviato prima è stato riprodotto |
ue_runtime_missing ( ) | Il runtime WebView2 è assente: il componente resta vuoto |
ue_bg_color (long al_color) | Il componente ha calcolato il colore di sfondo del proprio tema; l'userobject lo ha già adottato (backcolor) |
Esempi #
Avanzamento determinato con percentuale #
// 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
Avanzamento indeterminato (durata sconosciuta) #
// 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
Anello circolare #
// 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
Scala personalizzata #
// 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
La percentuale mostrata da ib_show_value resta calcolata rispetto a questa scala.
Colore personalizzato e pilotaggio del valore #
// 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
Valore formattato, unità e stato di errore #
// 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
Una percentuale con decimali #
// 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%
Un'attesa che fallisce #
// 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"
Una barra verticale con un nome proprio #
// 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"
Buone pratiche #
- Scelga la modalità in base a ciò che sa: indeterminata finché il volume è sconosciuto, determinata non appena lo conosce.
- Preferisca
id_minimum/id_maximumal calcolo manuale di una percentuale: l'etichetta e la visualizzazione seguono da sole. - Lasci
il_value_colora-1affinché la barra segua sia il tema chiaro sia quello scuro; imposti un colore solo per veicolare un significato (verde = riuscita). Un'elaborazione in pausa o fallita si indica conis_state. - Assegni
id_valuesenza preoccuparsi: la barra viene ridisegnata solo quando cambia ciò che mostra. Almeno un valore ogni 50 ms di orologio attende che la barra lo abbia disegnato: la barra avanza durante il ciclo, anche quando il ciclo attende un database o una rete, senza codice da parte sua. - Due barre nella stessa finestra: dia a ciascuna il suo
is_accessible_name, perché il lettore di schermo le distingua. - Chiami
of_reset()prima di riutilizzare la stessa barra per un'altra elaborazione.
Ereditato dalla base comune #
Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.
| Membri | Ruolo | Descritto in |
|---|---|---|
of_reset | Riportare il componente a zero | 3.6 Riportare un componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Scorciatoie da tastiera del componente | 3.5 Le scorciatoie da tastiera |
of_is_created · of_is_ready · of_get_last_error | Se è nato, se è pronto, cosa è fallito | 3.7 Diagnostica |
of_save_as_png · of_save_as_jpg | Esportare il rendering in immagine | 3.8 Esportare il rendering come immagine |
of_set_redraw | Raggruppare le modifiche in un solo ridisegno | 3.10 Buone pratiche |
of_preload_icons | Icone mostrate senza ritardo | Visualizzazione istantanea: of_icon |
of_set_translation | Tradurre una dicitura del componente | 5.2 Adattare un'etichetta: of_set_translation |
of_focus_webview | Dare il focus al componente | 6.4 Tastiera e focus |
of_print · of_print_to_pdf | Stampare, o scrivere un PDF | 6.9 Stampare |
of_set_property · of_get_property · of_component_name | Pilotare una proprietà per nome | 3.1 Il motore delle proprietà |
is_accessible_name · is_accessible_description | Il nome e la descrizione che dice un lettore di schermo | 3.4 Proprietà ed event opzionali |
Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.