progressbar — u_pbt_progressbar #
← Referencia de componentes · Índice de la guía
Barra de progreso con tema: barra horizontal o anillo, valor numérico o animación de espera, porcentaje mostrado, color libre.
▶ Verlo en vivo — Aplicación de demostración, mosaico Progress: la vista previa, el código que lo genera y esta página, uno al lado del otro.
De un vistazo #
| Userobject | u_pbt_progressbar |
| Clase de items | — (componente sin items) |
| Sirve para | Mostrar el avance de un procesamiento largo: importación, exportación, impresión, llamada al servidor |
| Dos usos | determinado (se conoce el avance) o indeterminado (solo se sabe que está trabajando) |
Inicio rápido #
// 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
Propiedades #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
id_value | double | 0 | Avance actual, valor BRUTO en la escala id_minimum … id_maximum, releído tal como lo asignó por última vez (sin acotar). La etiqueta redondea hacia abajo: 99,6 muestra 99 %, 100 % significa terminado. Asignarlo en cada fila de un bucle apenas cuesta nada: la barra solo se vuelve a dibujar cuando cambia lo que muestra (una décima de punto porcentual) |
id_minimum | double | 0 | Límite inferior de la escala. Un double: una fracción 0..1 es una escala válida |
id_maximum | double | 100 | Límite superior de la escala. Un double: un número de bytes superior a 2 GB es una escala válida. Rango vacío o invertido (mín ≥ máx): 100 % en cuanto el valor alcanza el máximo, 0 % antes — un lote vacío (id_maximum = 0, id_value = 0) se muestra terminado |
is_mode | string | "linear" | Forma del componente: linear (barra horizontal que ocupa todo el ancho del control y sigue su altura: cabe donde estaba una HProgressBar) o circular (anillo) — constantes MODE_LINEAR, MODE_CIRCULAR. Un valor desconocido vuelve a linear |
ib_indeterminate | boolean | false | Modo espera: una barra que se desliza, o un arco fijo que gira en modo circular; id_value se ignora pero se conserva. Si Windows pide menos animaciones, la espera pulsa en lugar de moverse |
ib_label | boolean | false | Muestra el porcentaje junto a la barra o en el centro del anillo, en el idioma de visualización («50 %» en francés, «50%» en inglés). is_label_format cambia lo que dice |
is_label_format | string | "" | Lo que dice la etiqueta (ib_label). Vacío = el porcentaje. Si no, un texto en el que se sustituyen {percent}, {value}, {min} y {max}, con los números escritos en el idioma de visualización; el resto se escribe tal cual, como texto sin formato. El lector de pantalla dice el mismo texto |
is_state | string | "normal" | El significado de la barra, como la barra de progreso de Windows: STATE_NORMAL (color de acento), STATE_PAUSED (amarillo, el procesamiento espera) o STATE_ERROR (rojo, el procesamiento ha fallado). Pausa y error toman los colores de estado del tema, claro u oscuro, y prevalecen sobre il_color; una barra de espera deja de moverse. Un valor desconocido equivale a STATE_NORMAL |
il_color | long | -1 | Color de relleno, con el formato RGB() de PowerBuilder. -1 = color de acento del tema. En pausa o en error (is_state), prevalece el color de estado |
is_theme_style | string | "" | Estilo visual del componente (constantes THEME_STYLE_*); vacío = el de la aplicación, seguido en cada cambio |
is_theme_mode | string | "" | Variante clara u oscura (constantes THEME_MODE_*); vacío = la de la aplicación, seguida en cada cambio |
il_theme_accent | long | -1 | Color de acento de este componente (-1 = acento de la aplicación, o el del tema) |
Este componente no publica tooltip (
is_tooltip,is_super_tooltip_*): una barra de progreso se lee por sí sola, y una etiqueta al pasar el ratón aparecería bajo el puntero justo en el momento en que el usuario mira a otra parte. Ponga el comentario de avance en un statictext o una statusbar junto a la barra.
Métodos #
| Método | Función |
|---|---|
of_reset ( ) | Restablece todas las propiedades a sus valores predeterminados (barra lineal, escala 0–100, valor 0, porcentaje oculto, color del tema). Devuelve 0 una vez aplicado, -2 si el componente no está creado |
of_set_redraw (boolean) | Agrupa una ráfaga de modificaciones en una sola representación. Devuelve 0 una vez aplicado, -2 si el componente no está creado |
of_save_as_png (string) · of_save_as_jpg (string) | Exporta la representación como imagen. Devuelve 0 una vez escrita la imagen, -4 si la escritura falla, -2 si el componente no está creado |
Eventos #
| Evento | Se activa cuando |
|---|---|
ue_ready ( ) | El componente ha terminado de cargarse; todo lo enviado antes se ha reproducido |
ue_runtime_missing ( ) | El runtime WebView2 está ausente: el componente permanece vacío |
ue_bg_color (long al_color) | El componente ha calculado el color de fondo de su tema; el userobject ya lo ha adoptado (backcolor) |
Ejemplos #
Progreso determinado con porcentaje #
// Show the percentage, then move the bar
uo_progress.ib_label = true
uo_progress.id_value = 75 // the bar fills up to three quarters
Progreso indeterminado (duración desconocida) #
// 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
Anillo circular #
// 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
Escala personalizada #
// 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
El porcentaje mostrado por ib_label sigue calculándose con respecto a esta escala.
Color personalizado y control del valor #
// 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
Etiqueta personalizada y estado de error #
// 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
Buenas prácticas #
- Elija el modo en función de lo que sepa: indeterminado mientras se desconozca el volumen, determinado en cuanto se conozca.
- Prefiera
id_minimum/id_maximumal cálculo manual de un porcentaje: la etiqueta y la visualización se adaptan solas. - Deje
il_coloren-1para que la barra siga tanto el tema claro como el oscuro; fije un color únicamente para transmitir un significado (verde = éxito). Un procesamiento en pausa o fallido se indica conis_state. - Asigne
id_valuesin preocuparse: la barra solo se vuelve a dibujar cuando cambia lo que muestra. Cada dibujo deja que la pantalla se actualice: la barra avanza durante el bucle, sin código por su parte. - Llame a
of_reset()antes de reutilizar la misma barra para otro procesamiento.
Heredado de la base común #
Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.
| Miembros | Función | Detallado en |
|---|---|---|
of_reset | Poner el componente a cero | 3.6 Poner un componente a cero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atajos de teclado del componente | 3.5 Los atajos de teclado |
of_is_created · of_is_ready · of_get_last_error | Si ha nacido, si está listo, qué ha fallado | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar el render como imagen | 3.8 Exportar la representación como imagen |
of_set_redraw | Agrupar los cambios en un solo repintado | 3.10 Buenas prácticas |
of_preload_icons | Iconos mostrados sin retardo | Visualización instantánea: of_icon |
of_set_translation | Traducir una etiqueta del componente | 5.2 Adaptar una etiqueta: of_set_translation |
of_focus_webview | Dar el foco al componente | 6.4 Teclado y foco |
of_print · of_print_to_pdf | Imprimir, o escribir un PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar una propiedad por su nombre | 3.1 El motor de propiedades |
Dos ayudas no se heredan: of_icon y of_escape_markup viven en n_pbt_utils. Declare uno — n_pbt_utils lnv_utils, nada que crear — y llámelas sobre él.