PBToolboxAI v4 ← 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 #

// 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é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)
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
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
ib_labelbooleanfalseAffiche 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_formatstring""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_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_color ; une barre en attente s'arrête de bouger. Une valeur inconnue vaut STATE_NORMAL
il_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
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.


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_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 #

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

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