progressbar — u_pbt_progressbar #
← Komponentenreferenz · Inhalt des Handbuchs
Fortschrittsbalken im Design: waagerechter Balken oder Ring, Zahlenwert oder Warteanimation, angezeigter Prozentsatz, frei wählbare Farbe.
▶ Live ansehen — Demoanwendung, Kachel Progress: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.
Auf einen Blick #
| Userobject | u_pbt_progressbar |
| Item-Klasse | — (Komponente ohne Items) |
| Wofür | Den Fortschritt eines langen Vorgangs zeigen: Import, Export, Druck, Serveraufruf |
| Zwei Einsatzarten | bestimmt (der Fortschritt ist bekannt) oder unbestimmt (man weiß nur, dass gearbeitet wird) |
Schnellstart #
// 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
Eigenschaften #
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
id_value | double | 0 | Aktueller Fortschritt, ein ROHWERT auf der Skala id_minimum … id_maximum, so zurückgelesen, wie Sie ihn zuletzt gesetzt haben (nicht begrenzt). Die Beschriftung rundet ab: 99,6 zeigt 99 %, 100 % heißt fertig. Ihn in einer Schleife bei jeder Zeile zu setzen, kostet fast nichts: der Balken wird nur neu gezeichnet, wenn sich ändert, was er zeigt (ein Zehntelprozent), oder bei jedem Wert, wenn is_format ihn schreibt |
id_minimum | double | 0 | Untere Grenze der Skala. Ein double: ein Bruchteil 0..1 ist eine gültige Skala |
id_maximum | double | 100 | Obere Grenze der Skala. Ein double: eine Byteanzahl über 2 GB ist eine gültige Skala. Leerer oder umgekehrter Bereich (min ≥ max): 100 %, sobald der Wert das Maximum erreicht, davor 0 % — ein leerer Stapel (id_maximum = 0, id_value = 0) wird als beendet angezeigt |
is_mode | string | "linear" | Form der Komponente: linear (waagerechter Balken, der die ganze Breite des Controls einnimmt und seiner Höhe folgt: er passt dorthin, wo eine HProgressBar stand) oder circular (Ring) — Konstanten MODE_LINEAR, MODE_CIRCULAR. Ein unbekannter Wert fällt auf linear zurück; mit is_orientation steht der Balken senkrecht |
is_orientation | string | "horizontal" | Richtung des linearen Balkens, mit den Wörtern der linearen Anzeige: horizontal (Standard) oder vertical — Konstanten ORIENTATION_HORIZONTAL, ORIENTATION_VERTICAL. Senkrecht füllt sich der Balken von unten nach oben (ein Füllstand, ein Tank, eine Warteschlange), die Anzeige steht darunter: er passt dorthin, wo eine VProgressBar stand. Der Ring ignoriert sie. Ein unbekannter Wert fällt auf horizontal zurück |
ib_indeterminate | boolean | false | Warte-Modus: ein gleitender Balken oder im Kreismodus ein fester, sich drehender Bogen; id_value wird ignoriert, aber beibehalten. Verlangt Windows weniger Animationen, pulsiert die Anzeige statt sich zu bewegen. Mit ib_show_value schreibt die Anzeige nur is_unit: den Text des Wartens („Connecting...“). Pausiert oder fehlgeschlagen (is_state) hält das Warten an: ein voller Balken (ein voller Ring) in der Farbe des Status, wie in der Windows-Taskleiste |
ib_show_value | boolean | false | Zeigt die Anzeige neben dem Balken oder in der Mitte des Rings an: den Prozentsatz in der Anzeigesprache („50 %“ auf Französisch, „50%“ auf Englisch) oder den von is_format geschriebenen Wert, gefolgt von is_unit. Eine lange Anzeige wird mit „…“ gekürzt, statt den Balken zu zerdrücken (die Spur behält 40 % des Controls); im Ring steht die Einheit in einer zweiten Zeile und das Ganze schrumpft, bis es passt, die Einheit entfällt, wenn der Platz fehlt. Beim Warten (ib_indeterminate) wird nur is_unit geschrieben |
is_format | string | "" | Anzeigeformat des Werts in der Anzeige (ib_show_value), in der Syntax eines DataWindow-Formats, wie bei den Messanzeigen (#,##0, #,##0.00, $#,##0). Die Trennzeichen sind die der Anzeigesprache. Eine Maske mit % schreibt den erledigten Anteil, nicht den Wert: 0.0% ergibt „35.0%“ für 1.687 von 4.820 Zeilen, auf jeder Skala, abgerundet wie der Prozentsatz (100 % = fertig). Leer = der Prozentsatz. Sobald es gesetzt ist, wird jeder Wert an den Balken gesendet, da die Anzeige ihn schreibt. Der Bildschirmleser sagt denselben Text |
is_unit | string | "" | Wird nach der Anzeige geschrieben, durch ein Leerzeichen getrennt: nach dem Wert oder nach dem Prozentsatz, wenn is_format leer ist (of 500 rows, done). Reiner Text, nie Auszeichnungen. Beim Warten ist sie der einzige Text der Anzeige (Connecting...); im Ring hat sie eine eigene Zeile |
is_state | string | "normal" | Die Bedeutung des Balkens, wie beim Windows-Fortschrittsbalken: STATE_NORMAL (Akzentfarbe), STATE_PAUSED (gelb, der Vorgang wartet) oder STATE_ERROR (rot, der Vorgang ist fehlgeschlagen). Pause und Fehler nehmen die Statusfarben des Designs an, hell wie dunkel, und haben Vorrang vor il_value_color. Ein Wartebalken (ib_indeterminate), der pausiert oder fehlschlägt, hält an und wird voll in der Statusfarbe, wie in der Windows-Taskleiste. Der Bildschirmleser nennt den Status vor dem Wert („Error, 64%“). Ein unbekannter Wert gilt als STATE_NORMAL |
il_value_color | long | -1 | Füllfarbe im PowerBuilder-Format RGB(). -1 = Akzentfarbe aus dem Design. Bei Pause oder Fehler (is_state) hat die Statusfarbe Vorrang. Nur RGB(): Eine Systemfarbe von PowerBuilder (Highlight, ButtonFace…) hat keine eigene Farbe und wird ignoriert (der Balken behält den Akzent, die Eigenschaft liest -1) |
is_accessible_name | string | "" | Wie der Bildschirmleser diesen Balken nennt, wie der AccessibleName einer HProgressBar. Leer = „Progress“ in der Anzeigesprache: Zwei Balken in einem Fenster (ein Download, ein Import) unterscheiden sich nur durch ihren Namen. Reiner Text, nie Auszeichnungen |
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs) |
Diese Komponente veröffentlicht keinen Tooltip (
is_tooltip,is_super_tooltip_*): Ein Fortschrittsbalken spricht für sich selbst, und eine Beschriftung beim Überfahren erschiene genau in dem Moment unter dem Zeiger, in dem der Anwender woanders hinsieht. Setzen Sie den Kommentar zum Fortschritt in einen statictext oder eine statusbar neben den Balken.of_set_property("tooltip", …)(undsuper_tooltip_*) liefert-5: Auch der Weg über den Namen ist geschlossen.
Methoden #
| Methode | Zweck |
|---|---|
of_reset ( ) | Setzt alle Eigenschaften auf ihren Standard zurück (linearer Balken, Skala 0–100, Wert 0, Prozentsatz ausgeblendet, Farbe aus dem Design). Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_set_redraw (boolean) | Fasst eine Folge von Änderungen zu einer einzigen Darstellung zusammen. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_save_as_png (string) · of_save_as_jpg (string) | Exportiert die Darstellung als Bild. Liefert 0 nach dem Schreiben des Bildes, -4 wenn das Schreiben fehlschlägt, -2 wenn die Komponente nicht erzeugt ist |
Events #
| Event | Ausgelöst wenn |
|---|---|
ue_ready ( ) | Die Komponente ist fertig geladen; alles zuvor Gesendete wurde nachgespielt |
ue_runtime_missing ( ) | Die WebView2-Runtime fehlt: die Komponente bleibt leer |
ue_bg_color (long al_color) | Die Komponente hat ihre Design-Hintergrundfarbe berechnet; das Userobject hat sie bereits übernommen (backcolor) |
Beispiele #
Bestimmter Fortschritt mit Prozentsatz #
// 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
Unbestimmter Fortschritt (unbekannte Dauer) #
// 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
Kreisförmiger Ring #
// 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
Eigene Skala #
// 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
Der von ib_show_value angezeigte Prozentsatz wird weiterhin anhand dieser Skala berechnet.
Eigene Farbe und Steuerung des Werts #
// 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
Formatierter Wert, Einheit und Fehlerzustand #
// 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
Ein Prozentsatz mit Nachkommastellen #
// 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%
Ein Warten, das fehlschlägt #
// 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"
Ein senkrechter Balken mit eigenem Namen #
// 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"
Best Practices #
- Wählen Sie den Modus danach, was Sie wissen: unbestimmt, solange die Menge unbekannt ist, bestimmt, sobald sie feststeht.
- Ziehen Sie
id_minimum/id_maximumdem manuellen Berechnen eines Prozentsatzes vor: Beschriftung und Anzeige folgen von selbst. - Lassen Sie
il_value_colorauf-1, damit der Balken sowohl dem hellen als auch dem dunklen Design folgt; legen Sie eine Farbe nur fest, wenn sie eine Bedeutung trägt (Grün = Erfolg). Ein pausierter oder fehlgeschlagener Vorgang wird mitis_stateangezeigt. - Setzen Sie
id_valueohne Bedenken: der Balken wird nur neu gezeichnet, wenn sich ändert, was er zeigt. Mindestens ein Wert alle 50 ms der Uhr wartet, bis der Balken ihn gezeichnet hat: der Balken bewegt sich während der Schleife, auch wenn diese auf eine Datenbank oder ein Netzwerk wartet, ohne Code Ihrerseits. - Zwei Balken in einem Fenster: Geben Sie jedem seinen
is_accessible_name, damit der Bildschirmleser sie unterscheidet. - Rufen Sie
of_reset()auf, bevor Sie denselben Balken für einen anderen Vorgang wiederverwenden.
Vom gemeinsamen Sockel geerbt #
Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.1 Die Eigenschaften-Engine |
is_accessible_name · is_accessible_description | Name und Beschreibung, die ein Bildschirmleser sagt | 3.4 Optionale Eigenschaften und Events |
Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.