progressbar — u_pbt_progressbar #
← Référence des composants · Sommaire du guide
Barre de progression thémée : barre horizontale ou anneau, valeur chiffrée ou animation d'attente, pourcentage affiché, couleur libre.
▶ Le voir en vrai — Application de démonstration, tuile Progress : l'aperçu, le code qui le produit et cette page, côte à côte.
En bref #
| Userobject | u_pbt_progressbar |
| Classe d'items | — (composant sans items) |
| Sert à | Montrer l'avancement d'un traitement long : import, export, impression, appel serveur |
| Deux usages | déterminé (on connaît l'avancement) ou indéterminé (on sait seulement que ça travaille) |
Démarrage rapide #
// 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
Propriétés #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
id_value | double | 0 | Avancement courant, valeur BRUTE dans l'échelle id_minimum … id_maximum, relue telle que vous l'avez posée en dernier (non bornée). Le libellé arrondit vers le bas : 99,6 affiche 99 %, 100 % veut dire terminé. L'affecter à chaque ligne d'une boucle ne coûte presque rien : la barre n'est redessinée que quand ce qu'elle montre change (un dixième de pour cent), ou à chaque valeur quand is_format l'écrit |
id_minimum | double | 0 | Borne basse de l'échelle. Un double : une fraction 0..1 est une échelle valide |
id_maximum | double | 100 | Borne haute de l'échelle. Un double : un nombre d'octets au-delà de 2 Go est une échelle valide. Plage vide ou inversée (min ≥ max) : 100 % dès que la valeur atteint le maximum, 0 % avant — un lot vide (id_maximum = 0, id_value = 0) s'affiche terminé |
is_mode | string | "linear" | Forme du composant : linear (barre horizontale, qui occupe toute la largeur du contrôle et suit sa hauteur : elle tient là où était un HProgressBar) ou circular (anneau) — constantes MODE_LINEAR, MODE_CIRCULAR. Une valeur inconnue revient à linear ; la barre se tient debout avec is_orientation |
is_orientation | string | "horizontal" | Sens de la barre linéaire, dans les mots de la jauge linéaire : horizontal (défaut) ou vertical — constantes ORIENTATION_HORIZONTAL, ORIENTATION_VERTICAL. Verticale, la barre se remplit de bas en haut (un niveau, une cuve, une file), sa lecture en dessous : elle tient là où était un VProgressBar. L'anneau l'ignore. Une valeur inconnue revient à horizontal |
ib_indeterminate | boolean | false | Mode attente : barre qui glisse, ou arc fixe qui tourne en mode circulaire ; id_value est ignorée mais gardée. Si Windows demande moins d'animations, l'attente pulse au lieu de bouger. Avec ib_show_value, la lecture écrit is_unit seul : le texte de l'attente (« Connecting... »). En pause ou en erreur (is_state), l'attente s'arrête : une barre (un anneau) pleine à la couleur de l'état, comme la barre des tâches de Windows |
ib_show_value | boolean | false | Affiche la lecture à côté de la barre ou au centre de l'anneau : le pourcentage dans la langue d'affichage (« 50 % » en français, « 50% » en anglais), ou la valeur écrite par is_format, suivie de is_unit. Une lecture longue se coupe par « … » plutôt que d'écraser la barre (la piste garde 40 % du contrôle) ; dans l'anneau, l'unité passe sur une seconde ligne et l'ensemble rétrécit jusqu'à tenir, l'unité retirée quand la place manque. En attente (ib_indeterminate), seule is_unit s'écrit |
is_format | string | "" | Format d'affichage de la valeur dans la lecture (ib_show_value), dans la syntaxe d'un format de DataWindow, comme les jauges (#,##0, #,##0.00, $#,##0). Les séparateurs sont ceux de la langue d'affichage. Un masque qui contient % écrit la part accomplie, pas la valeur : 0.0% donne « 35.0% » pour 1 687 lignes sur 4 820, sur toute échelle, arrondi vers le bas comme le pourcentage (100 % = terminé). Vide = le pourcentage. Dès qu'il est posé, chaque valeur part vers la barre, puisque la lecture l'écrit. Le lecteur d'écran dit le même texte |
is_unit | string | "" | Écrit après la lecture, séparé par une espace : après la valeur, ou après le pourcentage quand is_format est vide (of 500 rows, done). Texte brut, jamais de balisage. En attente, c'est le seul texte de la lecture (Connecting...) ; dans l'anneau, elle a sa ligne |
is_state | string | "normal" | Le sens de la barre, comme la barre de progression de Windows : STATE_NORMAL (couleur d'accent), STATE_PAUSED (jaune, le traitement attend) ou STATE_ERROR (rouge, le traitement a échoué). Pause et erreur prennent les couleurs d'état du thème, clair comme sombre, et l'emportent sur il_value_color. Une barre en attente (ib_indeterminate) en pause ou en erreur s'arrête et devient pleine à la couleur de l'état, comme la barre des tâches de Windows. Le lecteur d'écran dit l'état avant la valeur (« Error, 64% »). Une valeur inconnue vaut STATE_NORMAL |
il_value_color | long | -1 | Couleur de remplissage, au format RGB() PowerBuilder. -1 = couleur d'accent du thème. En pause ou en erreur (is_state), la couleur d'état l'emporte. RGB() seulement : une couleur système de PowerBuilder (Highlight, ButtonFace…) n'a pas de couleur à elle, elle est ignorée (la barre garde l'accent, la propriété se relit -1) |
is_accessible_name | string | "" | Ce que le lecteur d'écran appelle cette barre, comme l'AccessibleName d'un HProgressBar. Vide = « Progress » dans la langue d'affichage : deux barres d'une même fenêtre (un téléchargement, un import) ne se distinguent que par leur nom. Texte brut, jamais de balisage |
is_theme_style | string | "" | Style visuel du composant (constantes THEME_STYLE_*) ; vide = celui de l'application, suivi à chaque changement |
is_theme_mode | string | "" | Variante claire ou sombre (constantes THEME_MODE_*) ; vide = celle de l'application, suivie à chaque changement |
il_theme_accent | long | -1 | Couleur d'accent de ce composant (-1 = l'accent de l'application, ou celui du thème) |
Ce composant ne publie pas d'info-bulle (
is_tooltip,is_super_tooltip_*) : une barre de progression se lit d'elle-même, et un libellé au survol arriverait sous le pointeur au moment précis où l'utilisateur regarde ailleurs. Mettez le commentaire d'avancement dans un statictext ou une statusbar à côté de la barre.of_set_property("tooltip", …)(etsuper_tooltip_*) rend-5: la porte par nom est fermée elle aussi.
Méthodes #
| Méthode | Rôle |
|---|---|
of_reset ( ) | Remet toutes les propriétés à leur défaut (barre linéaire, échelle 0–100, valeur 0, pourcentage masqué, couleur du thème). Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_set_redraw (boolean) | Regroupe une rafale de modifications en un seul rendu. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_save_as_png (string) · of_save_as_jpg (string) | Exporte le rendu en image. Renvoie 0 une fois l'image écrite, -4 si l'écriture échoue, -2 si le composant n'est pas créé |
Événements #
| Événement | Déclenché quand |
|---|---|
ue_ready ( ) | Le composant a fini de charger ; tout ce qui a été envoyé avant a été rejoué |
ue_runtime_missing ( ) | Le runtime WebView2 est absent : le composant reste vide |
ue_bg_color (long al_color) | Le composant a calculé sa couleur de fond de thème ; l'userobject l'a déjà adoptée (backcolor) |
Exemples #
Progression déterminée avec pourcentage #
// 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
Progression indéterminée (durée inconnue) #
// 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
Anneau circulaire #
// 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
Échelle personnalisée #
// 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
Le pourcentage affiché par ib_show_value reste calculé par rapport à cette échelle.
Couleur personnalisée et pilotage de la valeur #
// 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
Valeur formatée, unité et état d'échec #
// 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
Pourcentage à décimales #
// 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%
Une attente qui échoue #
// 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"
Barre verticale et nom accessible #
// 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"
Bonnes pratiques #
- Choisissez le mode selon ce que vous savez : indéterminé tant que le volume est inconnu, déterminé dès qu'il l'est.
- Préférez
id_minimum/id_maximumau calcul manuel d'un pourcentage : le libellé et l'affichage suivent tout seuls. - Laissez
il_value_colorà-1pour que la barre suive le thème clair comme sombre ; ne fixez une couleur que pour porter un sens (vert = succès). Un traitement en pause ou en échec se dit paris_state. - Affectez
id_valuesans compter : la barre n'est redessinée que quand ce qu'elle montre change. Au moins une valeur toutes les 50 ms d'horloge attend que la barre l'ait dessinée : la barre avance pendant la boucle, même quand celle-ci attend une base ou un réseau, sans code de votre part. - Deux barres dans une même fenêtre : donnez à chacune son
is_accessible_name, pour que le lecteur d'écran les distingue. - Appelez
of_reset()avant de réutiliser la même barre pour un autre traitement.
Hérité du socle commun #
Ces membres existent sur tous les composants visuels — ils ne sont pas propres à celui-ci. Ils sont détaillés une seule fois, dans les chapitres transverses ; cette table dit seulement où les lire.
| Membres | Rôle | Détaillé dans |
|---|---|---|
of_reset | Remettre le composant à zéro | 3.6 Remettre un composant à zéro : of_reset() |
of_register_shortcut · of_clear_shortcuts | Raccourcis clavier du composant | 3.5 Les raccourcis clavier |
of_is_created · of_is_ready · of_get_last_error | S'il est né, s'il est prêt, ce qui a échoué | 3.7 Diagnostic |
of_save_as_png · of_save_as_jpg | Exporter le rendu en image | 3.8 Exporter le rendu en image |
of_set_redraw | Grouper les modifications en un seul repaint | 3.10 Bonnes pratiques |
of_preload_icons | Icônes affichées sans délai | Affichage instantané : of_icon |
of_set_translation | Traduire un libellé du composant | 5.2 Adapter un libellé : of_set_translation |
of_focus_webview | Donner le focus au composant | 6.4 Clavier et focus |
of_print · of_print_to_pdf | Imprimer, ou écrire un PDF | 6.9 Imprimer |
of_set_property · of_get_property · of_component_name | Piloter une propriété par son nom | 3.1 Le moteur de propriétés |
is_accessible_name · is_accessible_description | Le nom et la description que dit un lecteur d'écran | 3.4 Propriétés et events optionnels |
Deux aides ne sont pas héritées : of_icon et of_escape_markup vivent sur n_pbt_utils. Déclarez-en une — n_pbt_utils lnv_utils, rien à créer — et appelez-les dessus.