stepbar — u_pbt_stepbar #
← Référence des composants · Sommaire du guide
Fil d'étapes d'un assistant : les étapes franchies, celle en cours et celles à venir, en horizontal ou en vertical.
▶ Le voir en vrai — Application de démonstration, tuile Stepbar : l'aperçu, le code qui le produit et cette page, côte à côte.
En bref #
| Userobject | u_pbt_stepbar |
| Classe d'items | n_pbt_stepbar_step (une étape) |
| Sert à | Situer l'utilisateur dans un assistant, un formulaire en plusieurs pages, un processus de validation |
| Principe | Vous déclarez les étapes, puis vous déplacez ii_current : les états se calculent tout seuls |
Démarrage rapide #
// event open de la fenetre
uo_etapes.of_add_step(/*key*/ "compte", /*libelle*/ "Compte")
uo_etapes.of_add_step(/*key*/ "profil", /*libelle*/ "Profil")
uo_etapes.of_add_step(/*key*/ "paiement", /*libelle*/ "Paiement")
uo_etapes.of_add_step(/*key*/ "fin", /*libelle*/ "Confirmation")
// Etape en cours (1 = la premiere)
uo_etapes.ii_current = 1
// Bouton Suivant de l'assistant
uo_etapes.ii_current = uo_etapes.ii_current + 1
Le modèle : une étape, trois états automatiques #
Une étape n'a pas d'état à gérer à la main. Il se déduit de sa position par rapport à ii_current :
| Position | État | Rendu |
|---|---|---|
| Avant l'étape courante | done — terminée | Pastille cochée |
| L'étape courante | current — en cours | Pastille mise en avant |
| Après l'étape courante | todo — à venir | Pastille numérotée, teinte discrète |
Un quatrième état, error, ne s'obtient jamais automatiquement : vous le forcez sur une étape qui a échoué (voir plus bas).
Propriétés #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
ii_current | integer | 1 | Étape en cours, numérotée à partir de 1 |
is_position | string | "top" | Orientation : top / bottom (fil horizontal) ou start / end (fil vertical) — constantes POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END sont logiques et suivent le sens d'écriture |
is_navigation_mode | string | "free" | Ce qu'un clic peut atteindre : NAV_FREE (n'importe quelle étape, le défaut), NAV_BACKWARD (uniquement les étapes déjà passées — revenir en arrière, jamais sauter en avant) ou NAV_NONE (rien : un simple indicateur de progression, piloté par votre code seul). Ce qui reste cliquable déclenche ue_step_clicked ; la barre, elle, ne bouge jamais sur un clic |
is_overflow_mode | string | "auto" | Trop d'étapes pour la largeur : OVERFLOW_AUTO compacte la barre sous un plancher lisible par étape (chaque étape devient un point, seule l'étape courante garde son libellé, et toutes restent cliquables), OVERFLOW_SCROLL garde les libellés et fait défiler en gardant l'étape courante en vue, OVERFLOW_SHRINK les écrase jusqu'à l'ellipse. Un fil vertical ne compacte jamais |
is_theme_style | string | fluent | Style visuel du composant (constantes THEME_STYLE_*) |
is_theme_mode | string | light | Variante claire ou sombre (constantes THEME_MODE_*) |
il_theme_accent | long | -1 | Couleur d'accent de ce composant (-1 = accent du thème) |
is_tooltip | string | "" | Info-bulle simple affichée au survol du composant |
is_super_tooltip_title | string | "" | Titre de l'info-bulle enrichie (prend le pas sur is_tooltip) |
is_super_tooltip_text | string | "" | Texte de l'info-bulle enrichie (balisage riche accepté) |
is_super_tooltip_image | string | "" | Image de l'info-bulle enrichie |
Propriétés d'une étape — n_pbt_stepbar_step #
Obtenues par of_step(id) :
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
is_state | string | STATE_TODO | Force l'état de l'étape : STATE_TODO, STATE_CURRENT, STATE_DONE, STATE_ERROR. STATE_AUTO = retour au calcul automatique ; la relecture rend l'état effectif de l'étape, pas le forçage |
is_text | string | — | Change le libellé de l'étape, balisage riche accepté |
is_description | string | "" | Seconde ligne de l'étape — « Facultatif », une date, un montant. Balisage riche accepté. Annoncée à un lecteur d'écran comme la description de l'étape, après son nom. Une chaîne vide la retire ; une barre compactée l'abandonne pour tenir sur une ligne |
is_image | string | "" | Icône affichée à la place du rang de l'étape (formes acceptées) |
ib_enabled | boolean | true | Étape active ; une étape désactivée ne réagit plus au clic |
ib_visible | boolean | true | Masque l'étape sans la retirer du modèle |
Méthodes #
| Méthode | Rôle |
|---|---|
of_add_step (string as_key, string as_label) | Ajoute une étape en fin de fil. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_add_step (string as_key, string as_label, string as_icon_file) | Même chose, avec l'icône affichée à la place du rang de l'étape. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_add_step (string as_key, string as_label, string as_icon_file, string as_desc) | Même chose, avec l'icône et la seconde ligne. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_insert_step (string as_key, string as_label, integer ai_index) | Insère une étape à la position donnée (comptée à partir de 0). Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_insert_step (string as_key, string as_label, string as_icon_file, integer ai_index) | Même chose, avec l'icône. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_insert_step (string as_key, string as_label, string as_icon_file, string as_desc, integer ai_index) | Même chose, avec l'icône et la seconde ligne. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_move_step (string as_key, integer ai_index) | Déplace une étape existante. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_next ( ) | Passe à l'étape suivante, en sautant les masquées et les désactivées — celles sur lesquelles ii_current + 1 atterrirait. S'arrête sur la dernière atteignable. Le mode de navigation n'est pas consulté : il bride l'utilisateur, pas votre code. Aucune question n'est posée, mais ue_step_changed est levé. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_previous ( ) | Revient à l'étape précédente, mêmes règles. Depuis la position « tout est terminé », revient sur la dernière étape. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_remove_step (string as_key) | Retire une étape ; les autres conservent leur état. Renvoie 0 une fois appliqué, -5 sur un argument invalide (clé vide, adresse fausse), -2 si le composant n'est pas créé |
of_clear_steps ( ) | Vide le fil. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_step (string as_key) → n_pbt_stepbar_step | Handle d'une étape, pour poser ses propriétés |
of_reset ( ) | Vide les étapes et remet toutes les propriétés à leur défaut. 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éé |
Le troisième argument est l'icône, comme partout ailleurs dans la bibliothèque (
of_add_itemdu listbar,of_add_panelde la statusbar,of_add_tiledu tilesbox). La seconde ligne vient après elle.
Événements #
| Événement | Déclenché quand |
|---|---|
ue_step_clicked (integer ai_index, string as_key) | L'utilisateur a cliqué une étape. La barre ne bouge pas : scriptez cet événement, faites vos contrôles, puis posez ii_current si vous acceptez |
ue_step_changed (integer ai_from_index, string as_from_key, integer ai_index, string as_key) | La barre a bougé : ii_current a été posé, ou of_next / of_previous appelé. Un clic n'arrive jamais ici |
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) |
La barre ne navigue pas toute seule. Un clic rapporte (ue_step_clicked) et rien d'autre : la barre reste où elle est. C'est vous qui la déplacez, en posant ii_current ou en appelant of_next / of_previous — et ces déplacements-là s'annoncent par ue_step_changed.
Ce partage n'est pas une contrainte, c'est le sens du composant : une barre d'étapes reflète un parcours que votre application pilote. Atteindre l'étape 3 veut dire qu'un formulaire était valide et qu'un enregistrement est parti ; aucun clic ne peut en décider à votre place.
ue_step_clicked porte l'étape visée, ue_step_changed porte en plus l'étape quittée — par identifiant métier autant que par rang. C'est ce couple qui permet d'écrire « on peut revenir en arrière, mais pas sauter en avant » en une ligne.
is_navigation_modereste le filtre du clic :NAV_NONEne lève plus rien du tout,NAV_BACKWARDne laisse cliquer que les étapes déjà franchies.
Au clavier #
La barre est un seul arrêt de tabulation : une fois atteinte, elle se parcourt entièrement au clavier.
| Touche | Effet |
|---|---|
| Flèches | Déplacent le focus d'une étape à l'autre, en bouclant ; les étapes masquées, désactivées ou hors de portée (voir is_navigation_mode) sont sautées |
| Début / Fin | Première / dernière étape atteignable |
| Entrée ou Espace | Rapporte un clic sur l'étape focalisée (ue_step_clicked) — la barre ne bouge pas pour autant |
Les flèches ne sélectionnent pas, à la différence des onglets d'un dockcontainer. Atteindre une étape pose une question à votre application : parcourir une barre de huit étapes en enverrait huit, et un refus en cours de route laisserait le focus et l'étape courante désynchronisés.
Chaque étape est un vrai bouton : elle porte son libellé et son état dans son nom parlé (« Compte - terminée »), l'étape courante est marquée aria-current="step", et une étape désactivée est un bouton désactivé — pas seulement un texte grisé. La pastille numérotée n'est pas lue à voix haute : un rang n'apprend rien.
Exemples #
Avancer dans l'assistant #
uo_etapes.of_add_step(/*key*/ "compte", /*libelle*/ "Compte")
uo_etapes.of_add_step(/*key*/ "profil", /*libelle*/ "Profil")
uo_etapes.of_add_step(/*key*/ "paiement", /*libelle*/ "Paiement")
uo_etapes.of_add_step(/*key*/ "fin", /*libelle*/ "Confirmation")
// Les etapes 1 et 2 passent automatiquement en "terminee" (coche)
uo_etapes.ii_current = 3
Signaler une étape en erreur #
// L'etat d'une etape se force par son handle
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_ERROR
// Une fois le probleme corrige, on rend la main au calcul automatique
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_AUTO
Fil vertical #
// left / right : le fil se dessine verticalement, ideal en marge d'un formulaire
uo_etapes.is_position = uo_etapes.POSITION_START
// Le TROISIEME argument est l'icone : elle prend la place du rang de l'etape
uo_etapes.of_add_step(/*key*/ "compte", /*libelle*/ "Compte", /*icone*/ "mono:img\packimages.dll:svg/samples/folder-open")
Libellés enrichis sur deux lignes #
// Le libelle d'une etape accepte le balisage riche
uo_etapes.of_add_step("compte", "[b]Compte[/b][br][size=9](connexion)")
uo_etapes.of_add_step("profil", "[b]Profil[/b][br][size=9](vos informations)")
uo_etapes.of_add_step("paiement", "[b]Paiement[/b][br][size=9](carte)")
uo_etapes.of_add_step("fin", "[accent][b]Termine[/b][/accent]")
uo_etapes.ii_current = 2
Navigation au clic #
// event ue_step_clicked de uo_etapes : (integer ai_index, string as_key)
// La barre n'a PAS bouge : c'est ici qu'on decide.
if ai_index > uo_etapes.ii_current then
MessageBox("Assistant", "Terminez l'etape en cours avant de continuer.")
return
end if
uo_etapes.ii_current = ai_index
Étape conditionnelle #
// Un client deja connu n'a pas d'etape "Profil" a remplir
uo_etapes.of_step("profil").ib_visible = false
Bonnes pratiques #
- Donnez à chaque étape un identifiant métier stable (
"paiement") : c'est lui que vous recevez dansue_step_clicked, pas un numéro qui bouge à la moindre insertion. - Laissez le composant calculer les états ; ne forcez
is_stateque pour l'erreur. - Le clic sur une étape est un simple signal : c'est à vous d'autoriser (ou non) le saut, en particulier vers une étape non encore atteinte.
- Encadrez la déclaration des étapes par
of_set_redraw(false)/of_set_redraw(true)quand elles sont nombreuses. - Appelez
of_reset()avant de réutiliser le même fil pour un autre assistant.
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.
| Membres | Rôle | Détaillé dans |
|---|---|---|
of_count · of_keys_at · of_has | Parcourir ce que le composant contient | 3.2 Les items |
of_reset | Remettre le composant à zéro | 3.6 Remettre un composant à zéro : of_reset() |
of_register_shortcut · of_clear_shortcuts | Raccourcis clavier du composant | 3.5 Les raccourcis clavier |
of_is_created · of_is_ready · of_get_last_error | S'il est né, s'il est prêt, ce qui a échoué | 3.7 Diagnostic |
of_save_as_png · of_save_as_jpg | Exporter le rendu en image | 3.8 Exporter le rendu en image |
of_set_redraw | Grouper les modifications en un seul repaint | 3.10 Bonnes pratiques |
of_preload_icons | Icônes affichées sans délai | Affichage instantané : of_icon |
of_set_translation | Traduire un libellé du composant | 5.2 Adapter un libellé : of_set_translation |
of_focus_webview | Donner le focus au composant | 6.4 Clavier et focus |
of_print · of_print_to_pdf | Imprimer, ou écrire un PDF | 6.9 Imprimer |
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.