PBToolboxAI v1 ← Site

statusbar — u_pbt_statusbar #

← Referencia de componentes · Índice de la guía

Barra de estado con paneles: texto enriquecido, iconos, anchuras fijas o automáticas, alineación a la izquierda o a la derecha, paneles en los que se puede hacer clic, mini barra de progreso y estados con color.

Verlo en vivo — Aplicación de demostración, mosaico Statusbar: la vista previa, el código que lo genera y esta página, uno al lado del otro.


De un vistazo #

Userobjectu_pbt_statusbar
Clase de itemsn_pbt_statusbar_panel (panel)
Sirve paraMostrar en la parte inferior de la ventana el estado de la aplicación: contexto, avance, avisos discretos
Opciones opt-in

Inicio rápido #

// event open de la ventana
// of_add_panel(id, texto, icono, alineacion, anchura)
// id vacio = panel meramente informativo ; anchura 0 = ajustada al texto
uo_statut.of_add_panel(/*id*/ "etat",  /*text*/ "Listo",           /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START,  /*width*/ 0)
uo_statut.of_add_panel(/*id*/ "",      /*text*/ "Línea 12, Col 4", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START,  /*width*/ 0)
uo_statut.of_add_panel(/*id*/ "heure", /*text*/ "12:00",          /*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 140)
// Actualizar un panel en cualquier momento, mediante su identificador
uo_statut.of_item("etat").is_text = "Guardando..."

El modelo: paneles con clave #

La barra es una sucesión de paneles, añadidos por orden. Un panel recibe un identificador al crearse: es por él como se le encuentra después para cambiar su texto, su icono o su estado.

El identificador es una clave de direccionamiento, no un interruptor de interactividad:

uo_statut.of_item("etat").is_text = "3 registros modificados"

Véase Base común · Los items.


Propiedades #

PropiedadTipoPredeterminadoFunción
ib_show_resize_gripbooleanfalseMuestra el asa de redimensionamiento en la esquina del final de la barra
is_theme_stylestringfluentEstilo visual del componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara u oscura (constantes THEME_MODE_*)
il_theme_accentlong-1Color de acento de este componente (-1 = acento del tema)
is_tooltipstring""Tooltip simple mostrado al pasar el ratón por el componente
is_super_tooltip_titlestring""Título del tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto del tooltip enriquecido (se acepta el marcado enriquecido)
is_super_tooltip_imagestring""Imagen del tooltip enriquecido

Métodos #

MétodoFunción
of_add_panel (string as_id, string as_text, string as_icon_file, string as_align, integer ai_width)Añade un panel al final de la barra
of_add_sep ( )Añade una línea vertical de separación entre dos grupos de paneles
of_insert_panel (as_id, as_text, as_icon_file, as_align, ai_width, ai_index)Inserta un panel en una posición concreta (contada a partir de 0)
of_move_panel (string as_id, integer ai_index)Desplaza un panel existente a otra posición
of_remove_panel (string as_id)Elimina un solo panel; los demás conservan su estado
of_item (string as_id)n_pbt_statusbar_panelDevuelve el handle de un panel (creado en el primer acceso)
of_flash_panel (string as_id, string as_text, long al_ms)Muestra un mensaje durante al_ms milisegundos y luego repone el texto anterior (al_ms ≤ 0 = 2 segundos)
of_set_panel_menu (string as_id, string as_item_ids[], string as_labels[])Convierte el panel en un selector: el clic abre una lista desplegable y la elección vuelve por ue_panel_menu_clicked. Un identificador - inserta un separador; una etiqueta vacía retoma el identificador
of_clear_panel_menu (string as_id)Retira la lista desplegable; el panel recupera el comportamiento que le da ib_clickable
of_clear ( )Vacía la barra: todos los paneles y todos los separadores
of_reset ( )Vacía la barra y devuelve las propiedades a su valor predeterminado

Los argumentos de of_add_panel #

ArgumentoValoresEfecto
as_idlibre, o ""Clave del panel, con la que se le vuelve a encontrar después. Vacío = panel decorativo, ni direccionable ni pulsable
as_texttextoContenido del panel. Se acepta el texto enriquecido con etiquetas
as_icon_fileruta de imagen, o ""Icono mostrado antes del texto (formas aceptadas)
as_alignALIGN_START (predeterminado) o ALIGN_ENDLado hacia el que se empuja el panel. Valores lógicos: START = inicio de la lectura (izquierda en escritura de izquierda a derecha). Los alias físicos "left" / "right" siguen aceptándose
ai_widthpíxeles, o 0Anchura fija. 0 = el panel se ajusta a su contenido

En un panel — n_pbt_statusbar_panel #

MiembroTipoPredeterminadoFunción
is_textstring""Texto del panel, se acepta el texto enriquecido con etiquetas
is_imagestring""Icono del panel, modificable en cualquier momento
ib_enabledbooleantruePanel atenuado y sin clic
ib_visiblebooleantruePanel oculto, sin ser retirado de la barra
ii_progressintegerMini barra de progreso dentro del panel, de 0 a 100; un valor negativo la hace desaparecer
is_statestring""Estado semántico del panel, que lo colorea: véanse las constantes más abajo
ib_indeterminatebooleanfalseBarra animada sin valor, para un tratamiento de duración desconocida. Independiente de ii_progress, que sigue siendo el porcentaje exacto
ib_clickablebooleanfalse¿Reacciona el panel al clic? Opt-in: un panel permanece inerte mientras no se pida, conservando su clave — se pilota y lleva una información sobre herramientas. Un panel con lista desplegable ya es pulsable

Constantes de estado #

ConstanteValorUso
STATE_NONE""Ningún estado: apariencia normal
STATE_INFO"info"Información
STATE_WARNING"warning"Advertencia
STATE_ERROR"error"Error
STATE_SUCCESS"success"Éxito

Como para toda propiedad con valores predefinidos, utilice la constante en lugar de la cadena:

n_pbt_statusbar_panel lnv_panneau
lnv_panneau = uo_statut.of_item("etat")
lnv_panneau.is_state = lnv_panneau.STATE_WARNING

Eventos #

EventoSe activa cuando
ue_panel_clicked (string as_id)Se hace clic en un panel cuyo identificador está informado
ue_panel_double_clicked (string as_id)Un panel pulsable recibe un doble clic — el atajo clásico detrás de Línea 12, Col 4 que abre un "Ir a la línea"
ue_panel_rclicked (string as_id, long al_x, long al_y)Un panel recibe un clic derecho. al_x y al_y son píxeles de pantalla: páselos tal cual para abrir un menú contextual donde el usuario apuntó
ue_panel_menu_clicked (string as_id, string as_item_id)Se ha elegido una entrada de una lista desplegable de panel (véase of_set_panel_menu)
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)

Con el teclado #

La barra es una sola parada de tabulación: solo entran en ella los paneles hechos para ser pulsados, y las flechas los recorren.

TeclaEfecto
FlechasPasan al panel interactivo anterior / siguiente, en bucle; los paneles de visualización y los desactivados se saltan
Inicio / FinPrimer / último panel interactivo
Intro o EspacioDispara el panel — es decir, ue_panel_clicked, o la apertura de su lista desplegable si la tiene

Un panel que se limita a mostrar no es un control: no es enfocable ni se anuncia como tal. Un panel pulsable pero desactivado sí permanece anunciado como no disponible, en lugar de pasar por texto. Una barra de progreso anuncia su valor, y una indeterminada no anuncia ninguno — esa ausencia es el sentido de la palabra.

El foco sobrevive a la reconstrucción de la barra: se redibuja en cada cambio de texto, y sin esto el foco caería cada segundo en una barra que muestra un reloj.


Ejemplos #

Anchuras fijas y anchuras automáticas #

// Anchura 0 : el panel ocupa exactamente el espacio de su texto
uo_statut.of_add_panel(/*id*/ "", /*text*/ "Panel ajustado al contenido", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)

// Anchura fija en pixeles : util cuando el texto cambia a menudo,
// para que los paneles vecinos no se muevan en cada actualizacion
uo_statut.of_add_panel(/*id*/ "pos", /*text*/ "Línea 1, Col 1", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 150)

// Un panel empujado al extremo opuesto
uo_statut.of_add_panel(/*id*/ "heure", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 140)

Iconos y paneles con clic #

// Un identificador no vacio hace que se pueda hacer clic en el panel
uo_statut.of_add_panel(/*id*/ "save", /*text*/ "Guardado", /*icon_file*/ "mono:img\save.svg", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_sep()   // linea de separacion entre dos grupos de paneles
uo_statut.of_add_panel(/*id*/ "conn", /*text*/ "Conectado",   /*icon_file*/ "mono:img\plug.svg", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_panel(/*id*/ "user", /*text*/ "Guillaume",  /*icon_file*/ "mono:img\user.svg", /*align*/ uo_statut.ALIGN_END, /*width*/ 160)
// event ue_panel_clicked de uo_statut
choose case as_id
    case "conn" ; open(w_parametres_connexion)
    case "user" ; open(w_profil)
end choose

Texto enriquecido en un panel #

Los paneles aceptan el texto enriquecido con etiquetas: estilos, colores y pequeñas imágenes directamente en el texto.

uo_statut.of_add_panel(/*id*/ "", /*text*/ "Bienvenido [b]a[/b] [accent]PBToolboxAI[/accent]", &
                       /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)

uo_statut.of_add_panel(/*id*/ "", /*text*/ "[green]En línea[/green] [picture=mono:img\plug.svg,14,14]", &
                       /*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 0)
// El texto enriquecido vale tambien para las actualizaciones
uo_statut.of_item("etat").is_text = "[b]" + String(ll_modifies) + "[/b] registros modificados"

Seguir un proceso largo #

n_pbt_statusbar_panel lnv_avance

uo_statut.of_add_panel(/*id*/ "import", /*text*/ "Importación", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 220)
lnv_avance = uo_statut.of_item("import")
// En el bucle de proceso : la mini barra sigue el avance
lnv_avance.ii_progress = ll_pourcentage
lnv_avance.is_text     = "Importación " + String(ll_pourcentage) + " %"
// Al final : ocultar la mini barra y senalar el resultado
lnv_avance.ii_progress = -1                       // valor negativo = barra oculta
lnv_avance.is_text     = "Importación finalizada"
lnv_avance.is_state    = lnv_avance.STATE_SUCCESS

Señalar un aviso discreto #

n_pbt_statusbar_panel lnv_panneau
lnv_panneau = uo_statut.of_item("conn")

if not ib_connecte then
    lnv_panneau.is_text  = "Sin conexión"
    lnv_panneau.is_state = lnv_panneau.STATE_ERROR
else
    lnv_panneau.is_text  = "Conectado"
    lnv_panneau.is_state = lnv_panneau.STATE_NONE   // vuelta a la apariencia normal
end if

Adaptar la barra al contexto #

// Ocultar un panel sin eliminarlo : mas tarde recuperara su sitio
uo_statut.of_item("user").ib_visible = ib_utilisateur_identifie

// Atenuarlo cuando la accion correspondiente no tiene sentido
uo_statut.of_item("save").ib_enabled = ib_document_ouvert

// Reorganizar : colocar el panel de estado al principio (posiciones contadas a partir de 0)
uo_statut.of_move_panel(/*id*/ "etat", /*index*/ 0)

// Retirar un panel que ya no sirve
uo_statut.of_remove_panel(/*id*/ "import")

El asa de redimensionamiento #

// En una ventana redimensionable, el asa de esquina es una referencia familiar
uo_statut.ib_show_resize_grip = true

Buenas prácticas #


← Referencia de componentes · Índice de la guía