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 #
// 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
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) |
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 |
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 |
ib_label | boolean | false | Affiche le pourcentage à côté de la barre ou au centre de l'anneau, dans la langue d'affichage (« 50 % » en français, « 50% » en anglais). is_label_format change ce qu'il dit |
is_label_format | string | "" | Ce que dit le libellé (ib_label). Vide = le pourcentage. Sinon un texte où {percent}, {value}, {min} et {max} sont remplacés, les nombres écrits dans la langue d'affichage ; le reste est écrit tel quel, en texte brut. Le lecteur d'écran dit le même texte |
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_color ; une barre en attente s'arrête de bouger. Une valeur inconnue vaut STATE_NORMAL |
il_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 |
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.
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_label = 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_label = true
uo_progress.id_value = 40
Échelle personnalisée #
// 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_label reste calculé par rapport à cette échelle.
Couleur personnalisée et pilotage de la valeur #
// 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
Libellé personnalisé et état d'échec #
// 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
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_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. Chaque dessin laisse l'écran se rafraîchir : la barre avance pendant la boucle, sans code de votre part. - 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 |
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.