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 #
// window open event
uo_progress.ib_label = true // shows the percentage next to the bar
uo_progress.id_maximum = ll_total // the scale of the job : nothing to compute
// 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) |
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 |
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 |
ib_label | boolean | false | Mostra la percentuale accanto alla barra o al centro dell'anello, nella lingua di visualizzazione («50 %» in francese, «50%» in inglese). is_label_format cambia ciò che dice |
is_label_format | string | "" | Ciò che dice l'etichetta (ib_label). Vuoto = la percentuale. Altrimenti un testo in cui {percent}, {value}, {min} e {max} vengono sostituiti, con i numeri scritti nella lingua di visualizzazione; il resto è scritto così com'è, come testo semplice. Il lettore di schermo dice lo stesso testo |
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_color; una barra di attesa smette di muoversi. Un valore sconosciuto vale STATE_NORMAL |
il_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 |
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.
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_label = 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_label = true
uo_progress.id_value = 40
Scala personalizzata #
// 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_label resta calcolata rispetto a questa scala.
Colore personalizzato e pilotaggio del valore #
// Show the percentage next to the bar
uo_progress.ib_label = true
// The fill color accepts a standard PowerBuilder RGB()
uo_progress.il_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
Etichetta personalizzata e stato di errore #
// The label counts rows instead of a bare percentage
uo_progress.ib_label = true
uo_progress.id_maximum = 4820
uo_progress.id_value = 3120
uo_progress.is_label_format = "{value} of {max} rows ({percent})"
// The import failed at this row : the bar turns red where it stands
uo_progress.is_state = u_pbt_progressbar.STATE_ERROR
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_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. Ogni ridisegno lascia aggiornare lo schermo: la barra avanza durante il ciclo, senza codice da parte sua. - 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à |
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.