stepbar — u_pbt_stepbar #
← Riferimento dei componenti · Sommario della guida
Sequenza di passaggi di una procedura guidata: i passaggi già compiuti, quello in corso e quelli ancora da affrontare, in orizzontale o in verticale.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Stepbar: l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_stepbar |
| Classe degli item | n_pbt_stepbar_step (un passaggio) |
| Serve per | Mostrare all'utente a che punto si trova in una procedura guidata, in un modulo su più pagine, in un processo di approvazione |
| Principio | Lei dichiara i passaggi, poi sposta ii_current: gli stati si calcolano da soli |
Avvio rapido #
// event open della finestra
uo_etapes.of_add_step(/*key*/ "compte", /*etichetta*/ "Account")
uo_etapes.of_add_step(/*key*/ "profil", /*etichetta*/ "Profilo")
uo_etapes.of_add_step(/*key*/ "paiement", /*etichetta*/ "Pagamento")
uo_etapes.of_add_step(/*key*/ "fin", /*etichetta*/ "Conferma")
// Passaggio in corso (1 = il primo)
uo_etapes.ii_current = 1
// Pulsante Avanti della procedura guidata
uo_etapes.ii_current = uo_etapes.ii_current + 1
Il modello: un passaggio, tre stati automatici #
Un passaggio non ha uno stato da gestire a mano. Esso si deduce dalla sua posizione rispetto a ii_current:
| Posizione | Stato | Resa |
|---|---|---|
| Prima del passaggio corrente | done — terminato | Pastiglia spuntata |
| Il passaggio corrente | current — in corso | Pastiglia messa in evidenza |
| Dopo il passaggio corrente | todo — prossimo | Pastiglia numerata, tinta discreta |
Un quarto stato, error, non si ottiene mai automaticamente: lo forza Lei su un passaggio che non è riuscito (vedere più avanti).
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
ii_current | integer | 1 | Passaggio in corso, numerato a partire da 1 |
is_position | string | "top" | Orientamento: top / bottom (sequenza orizzontale) oppure start / end (sequenza verticale) — costanti POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END sono logiche e seguono il senso di scrittura |
is_navigation_mode | string | "free" | Ciò che un clic può raggiungere: NAV_FREE (qualunque passaggio, l'impostazione predefinita), NAV_BACKWARD (solo i passaggi già percorsi — tornare indietro, mai saltare avanti) oppure NAV_NONE (nulla: un semplice indicatore di avanzamento, guidato dal suo codice soltanto). Ciò che resta cliccabile solleva ue_step_clicked; la barra, invece, non si sposta mai su un clic |
is_overflow_mode | string | "auto" | Troppi passaggi per la larghezza: OVERFLOW_AUTO compatta la barra sotto una soglia leggibile per passaggio (ogni passaggio diventa un punto, solo quello corrente conserva l'etichetta, e tutti restano cliccabili), OVERFLOW_SCROLL conserva le etichette e fa scorrere, tenendo in vista il passaggio corrente, OVERFLOW_SHRINK le comprime fino ai puntini di sospensione. Una sequenza verticale non compatta mai |
is_theme_style | string | fluent | Stile visivo del componente (costanti THEME_STYLE_*) |
is_theme_mode | string | light | Variante chiara o scura (costanti THEME_MODE_*) |
il_theme_accent | long | -1 | Colore d'accento di questo componente (-1 = accento del tema) |
is_tooltip | string | "" | Tooltip semplice mostrato al passaggio del mouse sul componente |
is_super_tooltip_title | string | "" | Titolo del tooltip avanzato (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo del tooltip avanzato (markup avanzato accettato) |
is_super_tooltip_image | string | "" | Immagine del tooltip avanzato |
Proprietà di un passaggio — n_pbt_stepbar_step #
Ottenute tramite of_step(id):
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_state | string | STATE_TODO | Forza lo stato del passaggio: STATE_TODO, STATE_CURRENT, STATE_DONE, STATE_ERROR. STATE_AUTO = ritorno al calcolo automatico; la rilettura restituisce lo stato effettivo del passaggio, non il forzamento |
is_text | string | — | Cambia l'etichetta del passaggio, testo formattato con tag accettato |
is_description | string | "" | Seconda riga del passaggio — « Facoltativo », una data, un importo. Testo formattato con tag accettato. Annunciata a un lettore di schermo come descrizione del passaggio, dopo il suo nome. Una stringa vuota la toglie; una barra compattata la abbandona per restare su una riga |
is_image | string | "" | Icona mostrata al posto del numero del passaggio (forme accettate) |
ib_enabled | boolean | true | Passaggio attivo; un passaggio disattivato non reagisce più al clic |
ib_visible | boolean | true | Nasconde il passaggio senza toglierlo dal modello |
Metodi #
| Metodo | Ruolo |
|---|---|
of_add_step (string as_key, string as_label) | Aggiunge un passaggio in fondo alla sequenza. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_add_step (string as_key, string as_label, string as_icon_file) | Lo stesso, con l'icona al posto del numero del passaggio. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_add_step (string as_key, string as_label, string as_icon_file, string as_desc) | Lo stesso, con l'icona e la seconda riga. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_insert_step (string as_key, string as_label, integer ai_index) | Inserisce un passaggio nella posizione indicata (contata a partire da 0). Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_insert_step (string as_key, string as_label, string as_icon_file, integer ai_index) | Lo stesso, con l'icona. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_insert_step (string as_key, string as_label, string as_icon_file, string as_desc, integer ai_index) | Lo stesso, con l'icona e la seconda riga. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_move_step (string as_key, integer ai_index) | Sposta un passaggio esistente. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_next ( ) | Passa al passaggio successivo, saltando quelli nascosti e disattivati — proprio quelli su cui ii_current + 1 atterrerebbe. Si ferma sull'ultimo raggiungibile. Il modo di navigazione non viene consultato: limita l'utente, non il suo codice. Nessuna domanda viene posta, ma ue_step_changed viene sollevato. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_previous ( ) | Torna al passaggio precedente, stesse regole. Dalla posizione « tutto terminato » torna sull'ultimo passaggio. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_remove_step (string as_key) | Toglie un passaggio; gli altri conservano il proprio stato. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_clear_steps ( ) | Svuota la sequenza. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_step (string as_key) → n_pbt_stepbar_step | Handle di un passaggio, per impostarne le proprietà |
of_reset ( ) | Svuota i passaggi e riporta tutte le proprietà ai valori predefiniti. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_set_redraw (boolean) | Raggruppa una raffica di modifiche in un solo rendering. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_save_as_png (string) · of_save_as_jpg (string) | Esporta il rendering come immagine. Restituisce 0 una volta scritta l'immagine, -4 se la scrittura fallisce, -2 se il componente non è creato |
Il terzo argomento è l'icona, come ovunque nella libreria (
of_add_itemdella listbar,of_add_paneldella statusbar,of_add_tiledella tilesbox). La seconda riga viene dopo.
Event #
| Event | Attivato quando |
|---|---|
ue_step_clicked (integer ai_index, string as_key) | L'utente ha cliccato un passo. La barra non si sposta: scrivete questo evento, fate i vostri controlli, poi impostate ii_current se accettate |
ue_step_changed (integer ai_from_index, string as_from_key, integer ai_index, string as_key) | La barra si è spostata: ii_current è stato impostato, oppure of_next / of_previous chiamato. Un clic non arriva mai qui |
ue_ready ( ) | Il componente ha terminato il caricamento; tutto ciò che è stato inviato prima è stato riprodotto |
ue_runtime_missing ( ) | Il runtime WebView2 è assente: il componente resta vuoto |
ue_bg_color (long al_color) | Il componente ha calcolato il colore di sfondo del proprio tema; l'userobject lo ha già adottato (backcolor) |
La barra NON naviga da sola. Un clic riferisce (ue_step_clicked) e nient'altro: la barra resta dov'è. Siete voi a spostarla, impostando ii_current o chiamando of_next / of_previous — e quegli spostamenti si annunciano con ue_step_changed.
Questa divisione non è un vincolo, è il senso del componente: una barra di passi rispecchia un percorso che la vostra applicazione guida. Raggiungere il passo 3 di solito significa che un modulo era valido e che un record è stato salvato; nessun clic può deciderlo al vostro posto.
ue_step_clicked porta il passo mirato, ue_step_changed porta in più il passo lasciato — per identificatore funzionale quanto per rango. È questa coppia che permette di scrivere «indietro sì, saltare avanti no» in una riga.
is_navigation_moderesta il filtro del clic:NAV_NONEnon solleva più nulla,NAV_BACKWARDlascia cliccare soltanto i passi già percorsi.
Da tastiera #
La barra è un solo arresto di tabulazione: una volta raggiunta, si percorre interamente da tastiera.
| Tasto | Effetto |
|---|---|
| Frecce | Spostano il fuoco da un passaggio all'altro, ciclando; i passaggi nascosti, disattivati o fuori portata (vedere is_navigation_mode) vengono saltati |
| Inizio / Fine | Primo / ultimo passaggio raggiungibile |
| Invio o Spazio | Riferisce un clic sul passaggio con il fuoco (ue_step_clicked) — la barra non si sposta per questo |
Le frecce non selezionano, a differenza delle schede di un dockcontainer. Raggiungere un passaggio pone una domanda alla sua applicazione: percorrere una barra di otto passaggi ne invierebbe otto, e un rifiuto a metà strada lascerebbe il fuoco e il passaggio corrente disallineati.
Ogni passaggio è un vero pulsante: porta la propria etichetta e il proprio stato nel nome pronunciato ("Account - completato"), il passaggio corrente è contrassegnato con aria-current="step", e un passaggio disattivato è un pulsante disattivato — non soltanto un testo in grigio. Il pallino numerato non viene letto ad alta voce: un numero d'ordine non insegna nulla.
Esempi #
Avanzare nella procedura guidata #
uo_etapes.of_add_step(/*key*/ "compte", /*etichetta*/ "Account")
uo_etapes.of_add_step(/*key*/ "profil", /*etichetta*/ "Profilo")
uo_etapes.of_add_step(/*key*/ "paiement", /*etichetta*/ "Pagamento")
uo_etapes.of_add_step(/*key*/ "fin", /*etichetta*/ "Conferma")
// I passaggi 1 e 2 passano automaticamente a "terminato" (spunta)
uo_etapes.ii_current = 3
Segnalare un passaggio in errore #
// Lo stato di un passaggio si forza tramite il suo handle
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_ERROR
// Una volta corretto il problema, si restituisce la mano al calcolo automatico
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_AUTO
Sequenza verticale #
// left / right : la sequenza si disegna verticalmente, ideale a lato di un modulo
uo_etapes.is_position = uo_etapes.POSITION_START
// Il TERZO argomento e l'icona : prende il posto del numero del passaggio
uo_etapes.of_add_step(/*key*/ "compte", /*etichetta*/ "Account", /*icona*/ "mono:img\packimages.dll:svg/samples/folder-open")
Etichette arricchite su due righe #
// L'etichetta di un passaggio accetta il testo formattato con tag
uo_etapes.of_add_step("compte", "[b]Account[/b][br][size=9](accesso)")
uo_etapes.of_add_step("profil", "[b]Profilo[/b][br][size=9](i suoi dati)")
uo_etapes.of_add_step("paiement", "[b]Pagamento[/b][br][size=9](carta)")
uo_etapes.of_add_step("fin", "[accent][b]Terminato[/b][/accent]")
uo_etapes.ii_current = 2
Navigazione al clic #
// event ue_step_clicked de uo_etapes : (integer ai_index, string as_key)
// La barra NON si e spostata : qui si decide.
if ai_index > uo_etapes.ii_current then
MessageBox("Procedura guidata", "Completate il passo corrente prima di proseguire.")
return
end if
uo_etapes.ii_current = ai_index
Passaggio condizionale #
// Un cliente gia noto non ha un passaggio "Profilo" da compilare
uo_etapes.of_step("profil").ib_visible = false
Buone pratiche #
- Date a ogni passo un identificatore funzionale stabile (
"paiement"): è quello che ricevete inue_step_clickedeue_step_changed, non un numero che si sposta al minimo inserimento. - Lasci che sia il componente a calcolare gli stati; forzi
is_statesolo per l'errore. - Il clic su un passaggio è un semplice segnale: sta a Lei autorizzare (o no) il salto, in particolare verso un passaggio non ancora raggiunto.
- Racchiuda la dichiarazione dei passaggi tra
of_set_redraw(false)/of_set_redraw(true)quando sono numerosi. - Chiami
of_reset()prima di riutilizzare la stessa sequenza per un'altra procedura guidata.
Ereditato dalla base comune #
Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.
| Membri | Ruolo | Descritto in |
|---|---|---|
of_count · of_keys_at · of_has | Percorrere ciò che il componente contiene | 3.2 Gli item |
of_reset | Riportare il componente a zero | 3.6 Riportare un componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Scorciatoie da tastiera del componente | 3.5 Le scorciatoie da tastiera |
of_is_created · of_is_ready · of_get_last_error | Se è nato, se è pronto, cosa è fallito | 3.7 Diagnostica |
of_save_as_png · of_save_as_jpg | Esportare il rendering in immagine | 3.8 Esportare il rendering come immagine |
of_set_redraw | Raggruppare le modifiche in un solo ridisegno | 3.10 Buone pratiche |
of_preload_icons | Icone mostrate senza ritardo | Visualizzazione istantanea: of_icon |
of_set_translation | Tradurre una dicitura del componente | 5.2 Adattare un'etichetta: of_set_translation |
of_focus_webview | Dare il focus al componente | 6.4 Tastiera e focus |
of_print · of_print_to_pdf | Stampare, o scrivere un PDF | 6.9 Stampare |
Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.