PBToolboxAI v2 ← Site

stepbar — u_pbt_stepbar #

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

Hilo de pasos de un asistente: los pasos ya superados, el que está en curso y los que quedan por delante, en horizontal o en vertical.

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


De un vistazo #

Userobjectu_pbt_stepbar
Clase de itemsn_pbt_stepbar_step (un paso)
Sirve paraSituar al usuario en un asistente, en un formulario de varias páginas, en un proceso de validación
PrincipioUsted declara los pasos y luego desplaza ii_current: los estados se calculan solos

Inicio rápido #

// event open de la ventana
uo_etapes.of_add_step(/*key*/ "compte",  /*etiqueta*/ "Cuenta")
uo_etapes.of_add_step(/*key*/ "profil",  /*etiqueta*/ "Perfil")
uo_etapes.of_add_step(/*key*/ "paiement", /*etiqueta*/ "Pago")
uo_etapes.of_add_step(/*key*/ "fin",     /*etiqueta*/ "Confirmación")

// Paso en curso (1 = el primero)
uo_etapes.ii_current = 1
// Boton Siguiente del asistente
uo_etapes.ii_current = uo_etapes.ii_current + 1

El modelo: un paso, tres estados automáticos #

Un paso no tiene ningún estado que gestionar a mano. Se deduce de su posición respecto a ii_current:

PosiciónEstadoRepresentación
Antes del paso actualdone — terminadoPastilla marcada
El paso actualcurrent — en cursoPastilla destacada
Después del paso actualtodo — próximoPastilla numerada, tono discreto

Un cuarto estado, error, nunca se obtiene automáticamente: usted lo fuerza en un paso que ha fallado (véase más abajo).


Propiedades #

PropiedadTipoPredeterminadoFunción
ii_currentinteger1Paso en curso, numerado a partir de 1
is_positionstring"top"Orientación: top / bottom (hilo horizontal) o start / end (hilo vertical) — constantes POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END son lógicas y siguen el sentido de escritura
is_navigation_modestring"free"Lo que un clic puede alcanzar: NAV_FREE (cualquier paso, el valor predeterminado), NAV_BACKWARD (solo los pasos ya recorridos — volver atrás, nunca saltar adelante) o NAV_NONE (nada: un simple indicador de progreso, gobernado únicamente por su código). Lo que sigue siendo pulsable lanza ue_step_clicked; la barra, en cambio, nunca se mueve con un clic
is_overflow_modestring"auto"Demasiados pasos para el ancho: OVERFLOW_AUTO compacta la barra por debajo de un mínimo legible por paso (cada paso se convierte en un punto, solo el actual conserva su etiqueta, y todos siguen siendo pulsables), OVERFLOW_SCROLL conserva las etiquetas y desplaza, manteniendo a la vista el paso actual, OVERFLOW_SHRINK las comprime hasta los puntos suspensivos. Un hilo vertical nunca compacta
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

Propiedades de un paso — n_pbt_stepbar_step #

Obtenidas mediante of_step(id):

PropiedadTipoPredeterminadoFunción
is_statestringSTATE_TODOFuerza el estado del paso: STATE_TODO, STATE_CURRENT, STATE_DONE, STATE_ERROR. STATE_AUTO = vuelta al cálculo automático; la relectura devuelve el estado efectivo del paso, no el forzado
is_textstring—Cambia la etiqueta del paso, se acepta el texto enriquecido con etiquetas
is_descriptionstring""Segunda línea del paso — «Opcional», una fecha, un importe. Marcado de texto enriquecido aceptado. Se anuncia a un lector de pantalla como la descripción del paso, tras su nombre. Una cadena vacía la retira; una barra compactada la abandona para caber en una línea
is_imagestring""Icono mostrado en lugar del número del paso (formas aceptadas)
ib_enabledbooleantruePaso activo; un paso desactivado ya no reacciona al clic
ib_visiblebooleantrueOculta el paso sin retirarlo del modelo

Métodos #

MétodoFunción
of_add_step (string as_key, string as_label)Añade un paso al final del hilo. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_add_step (string as_key, string as_label, string as_icon_file)Lo mismo, con el icono en lugar del número del paso. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_add_step (string as_key, string as_label, string as_icon_file, string as_desc)Lo mismo, con el icono y la segunda línea. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_insert_step (string as_key, string as_label, integer ai_index)Inserta un paso en la posición indicada (contada a partir de 0). Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_insert_step (string as_key, string as_label, string as_icon_file, integer ai_index)Lo mismo, con el icono. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_insert_step (string as_key, string as_label, string as_icon_file, string as_desc, integer ai_index)Lo mismo, con el icono y la segunda línea. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_move_step (string as_key, integer ai_index)Desplaza un paso existente. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_next ( )Pasa al paso siguiente, saltando los ocultos y los desactivados — aquellos en los que ii_current + 1 aterrizaría. Se detiene en el último alcanzable. El modo de navegación no se consulta: limita al usuario, no a su código. No se plantea ninguna pregunta, pero se lanza ue_step_changed. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_previous ( )Vuelve al paso anterior, las mismas reglas. Desde la posición «todo terminado» regresa al último paso. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_remove_step (string as_key)Retira un paso; los demás conservan su estado. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado
of_clear_steps ( )Vacía el hilo. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_step (string as_key) → n_pbt_stepbar_stepHandle de un paso, para establecer sus propiedades
of_reset ( )Vacía los pasos y devuelve todas las propiedades a su valor predeterminado. 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

El tercer argumento es el icono, como en todo el resto de la biblioteca (of_add_item de la listbar, of_add_panel de la statusbar, of_add_tile de la tilesbox). La segunda línea va después.


Eventos #

EventoSe activa cuando
ue_step_clicked (integer ai_index, string as_key)El usuario ha hecho clic en un paso. La barra no se mueve: programe este evento, haga sus comprobaciones y luego asigne ii_current si lo acepta
ue_step_changed (integer ai_from_index, string as_from_key, integer ai_index, string as_key)La barra se ha desplazado: se asignó ii_current, o se llamó a of_next / of_previous. Un clic nunca llega aquí
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)

La barra NO navega sola. Un clic informa (ue_step_clicked) y nada más: la barra se queda donde está. Es usted quien la desplaza, asignando ii_current o llamando a of_next / of_previous — y esos desplazamientos se anuncian con ue_step_changed.

Este reparto no es una restricción, es el sentido del componente: una barra de pasos refleja un recorrido que su aplicación gobierna. Alcanzar el paso 3 suele significar que un formulario era válido y que se guardó un registro; ningún clic puede decidirlo por usted.

ue_step_clicked lleva el paso apuntado, ue_step_changed lleva además el paso abandonado — tanto por identificador funcional como por rango. Es esa pareja la que permite escribir «volver atrás sí, saltar adelante no» en una línea.

is_navigation_mode sigue siendo el filtro del clic: NAV_NONE ya no lanza nada, NAV_BACKWARD solo deja pulsar los pasos ya recorridos.


Con el teclado #

La barra es una sola parada de tabulación: una vez alcanzada, se recorre íntegramente con el teclado.

TeclaEfecto
FlechasDesplazan el foco de un paso a otro, en bucle; los pasos ocultos, desactivados o fuera de alcance (véase is_navigation_mode) se saltan
Inicio / FinPrimer / último paso alcanzable
Intro o EspacioInforma de un clic en el paso enfocado (ue_step_clicked) — la barra no se mueve por ello

Las flechas no seleccionan, a diferencia de las pestañas de un dockcontainer. Alcanzar un paso plantea una pregunta a su aplicación: recorrer una barra de ocho pasos enviaría ocho, y un rechazo a medio camino dejaría el foco y el paso actual desincronizados.

Cada paso es un verdadero botón: lleva su etiqueta y su estado en su nombre hablado («Cuenta - completado»), el paso actual está marcado con aria-current="step", y un paso desactivado es un botón desactivado — no solo un texto atenuado. La viñeta numerada no se lee en voz alta: un número de orden no enseña nada.


Ejemplos #

Avanzar en el asistente #

uo_etapes.of_add_step(/*key*/ "compte",   /*etiqueta*/ "Cuenta")
uo_etapes.of_add_step(/*key*/ "profil",   /*etiqueta*/ "Perfil")
uo_etapes.of_add_step(/*key*/ "paiement", /*etiqueta*/ "Pago")
uo_etapes.of_add_step(/*key*/ "fin",      /*etiqueta*/ "Confirmación")

// Los pasos 1 y 2 pasan automaticamente a "terminado" (marca)
uo_etapes.ii_current = 3

Señalar un paso en error #

// El estado de un paso se fuerza mediante su handle
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_ERROR
// Una vez corregido el problema, se devuelve el mando al calculo automatico
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_AUTO

Hilo vertical #

// left / right : el hilo se dibuja verticalmente, ideal al margen de un formulario
uo_etapes.is_position = uo_etapes.POSITION_START

// El TERCER argumento es el icono : ocupa el lugar del numero del paso
uo_etapes.of_add_step(/*key*/ "compte", /*etiqueta*/ "Cuenta", /*icono*/ "mono:img\packimages.dll:svg/samples/folder-open")

Etiquetas enriquecidas en dos líneas #

// La etiqueta de un paso acepta el texto enriquecido con etiquetas
uo_etapes.of_add_step("compte",   "[b]Cuenta[/b][br][size=9](conexión)")
uo_etapes.of_add_step("profil",   "[b]Perfil[/b][br][size=9](sus datos)")
uo_etapes.of_add_step("paiement", "[b]Pago[/b][br][size=9](tarjeta)")
uo_etapes.of_add_step("fin",      "[accent][b]Terminado[/b][/accent]")

uo_etapes.ii_current = 2
// event ue_step_clicked de uo_etapes : (integer ai_index, string as_key)
// La barra NO se ha movido : aqui se decide.
if ai_index > uo_etapes.ii_current then
    MessageBox("Asistente", "Termine el paso actual antes de continuar.")
    return
end if
uo_etapes.ii_current = ai_index

Paso condicional #

// Un cliente ya conocido no tiene un paso "Perfil" que rellenar
uo_etapes.of_step("profil").ib_visible = false

Buenas prácticas #

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.

MiembrosFunciónDetallado en
of_count · of_keys_at · of_hasRecorrer lo que el componente contiene3.2 Los items
of_resetPoner el componente a cero3.6 Poner un componente a cero: of_reset()
of_register_shortcut · of_clear_shortcutsAtajos de teclado del componente3.5 Los atajos de teclado
of_is_created · of_is_ready · of_get_last_errorSi ha nacido, si está listo, qué ha fallado3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar el render como imagen3.8 Exportar la representación como imagen
of_set_redrawAgrupar los cambios en un solo repintado3.10 Buenas prácticas
of_preload_iconsIconos mostrados sin retardoVisualización instantánea: of_icon
of_set_translationTraducir una etiqueta del componente5.2 Adaptar una etiqueta: of_set_translation
of_focus_webviewDar el foco al componente6.4 Teclado y foco
of_print · of_print_to_pdfImprimir, o escribir un PDF6.9 Imprimir

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.


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