PBToolboxAI v5 ← Site

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 #

Userobjectu_pbt_progressbar
Classe d'items— (composant sans items)
Sert àMontrer l'avancement d'un traitement long : import, export, impression, appel serveur
Deux usagesdé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éTypeDéfautRôle
id_valuedouble0Avancement 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_minimumdouble0Borne basse de l'échelle. Un double : une fraction 0..1 est une échelle valide
id_maximumdouble100Borne 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_modestring"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_orientationstring"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_indeterminatebooleanfalseMode 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_valuebooleanfalseAffiche 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_formatstring""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_unitstring""É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_statestring"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_colorlong-1Couleur 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_namestring""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_stylestring""Style visuel du composant (constantes THEME_STYLE_*) ; vide = celui de l'application, suivi à chaque changement
is_theme_modestring""Variante claire ou sombre (constantes THEME_MODE_*) ; vide = celle de l'application, suivie à chaque changement
il_theme_accentlong-1Couleur 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", …) (et super_tooltip_*) rend -5 : la porte par nom est fermée elle aussi.


Méthodes #

MéthodeRô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énementDé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 #

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.

MembresRôleDétaillé dans
of_resetRemettre le composant à zéro3.6 Remettre un composant à zéro : of_reset()
of_register_shortcut · of_clear_shortcutsRaccourcis clavier du composant3.5 Les raccourcis clavier
of_is_created · of_is_ready · of_get_last_errorS'il est né, s'il est prêt, ce qui a échoué3.7 Diagnostic
of_save_as_png · of_save_as_jpgExporter le rendu en image3.8 Exporter le rendu en image
of_set_redrawGrouper les modifications en un seul repaint3.10 Bonnes pratiques
of_preload_iconsIcônes affichées sans délaiAffichage instantané : of_icon
of_set_translationTraduire un libellé du composant5.2 Adapter un libellé : of_set_translation
of_focus_webviewDonner le focus au composant6.4 Clavier et focus
of_print · of_print_to_pdfImprimer, ou écrire un PDF6.9 Imprimer
of_set_property · of_get_property · of_component_namePiloter une propriété par son nom3.1 Le moteur de propriétés
is_accessible_name · is_accessible_descriptionLe nom et la description que dit un lecteur d'écran3.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.


← Référence des composants · Sommaire du guide