PBToolboxAI v2 ← Site

stepbar — u_pbt_stepbar #

← Komponentenreferenz · Inhalt des Handbuchs

Schrittleiste eines Assistenten: die bereits durchlaufenen Schritte, der aktuelle und die noch bevorstehenden, waagerecht oder senkrecht.

▶ Live ansehen — Demoanwendung, Kachel Stepbar: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.


Auf einen Blick #

Userobjectu_pbt_stepbar
Item-Klassen_pbt_stepbar_step (ein Schritt)
WofürDem Benutzer zeigen, wo er in einem Assistenten, einem mehrseitigen Formular oder einem Genehmigungsprozess steht
PrinzipSie deklarieren die Schritte und verschieben dann ii_current: Die Zustände ergeben sich von selbst

Schnellstart #

// open-Event des Fensters
uo_etapes.of_add_step(/*key*/ "compte",  /*bezeichnung*/ "Konto")
uo_etapes.of_add_step(/*key*/ "profil",  /*bezeichnung*/ "Profil")
uo_etapes.of_add_step(/*key*/ "paiement", /*bezeichnung*/ "Zahlung")
uo_etapes.of_add_step(/*key*/ "fin",     /*bezeichnung*/ "Bestätigung")

// Aktueller Schritt (1 = der erste)
uo_etapes.ii_current = 1
// Schaltflaeche Weiter des Assistenten
uo_etapes.ii_current = uo_etapes.ii_current + 1

Das Modell: ein Schritt, drei automatische Zustände #

Ein Schritt hat keinen Zustand, den Sie von Hand verwalten müssten. Er ergibt sich aus seiner Position relativ zu ii_current:

PositionZustandDarstellung
Vor dem aktuellen Schrittdone — abgeschlossenAbgehaktes Abzeichen
Der aktuelle Schrittcurrent — in BearbeitungHervorgehobenes Abzeichen
Nach dem aktuellen Schritttodo — bevorstehendNummeriertes Abzeichen, dezenter Farbton

Ein vierter Zustand, error, wird nie automatisch erreicht: Sie erzwingen ihn für einen Schritt, der fehlgeschlagen ist (siehe weiter unten).


Eigenschaften #

EigenschaftTypStandardZweck
ii_currentinteger1Aktueller Schritt, ab 1 nummeriert
is_positionstring"top"Ausrichtung: top / bottom (waagerechte Leiste) oder start / end (senkrechte Leiste) — Konstanten POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END sind logisch und folgen der Schreibrichtung
is_navigation_modestring"free"Was ein Klick erreichen darf: NAV_FREE (jeder Schritt, die Vorgabe), NAV_BACKWARD (nur die bereits durchlaufenen Schritte — zurückgehen, nie vorwärts springen) oder NAV_NONE (nichts: eine reine Fortschrittsanzeige, allein von Ihrem Code gesteuert). Was anklickbar bleibt, löst ue_step_clicked aus; die Leiste selbst bewegt sich bei einem Klick nie
is_overflow_modestring"auto"Zu viele Schritte für die Breite: OVERFLOW_AUTO verdichtet die Leiste unterhalb einer lesbaren Untergrenze je Schritt (jeder Schritt wird zu einem Punkt, nur der aktuelle behält seine Beschriftung, und alle bleiben anklickbar), OVERFLOW_SCROLL behält die Beschriftungen und scrollt, wobei der aktuelle Schritt im Blick bleibt, OVERFLOW_SHRINK quetscht sie bis zur Auslassung. Eine senkrechte Leiste verdichtet nie
is_theme_stylestringfluentVisueller Stil der Komponente (Konstanten THEME_STYLE_*)
is_theme_modestringlightHelle oder dunkle Variante (Konstanten THEME_MODE_*)
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent des Designs)
is_tooltipstring""Einfacher Tooltip beim Überfahren der Komponente
is_super_tooltip_titlestring""Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Tooltips

Eigenschaften eines Schritts — n_pbt_stepbar_step #

Erhältlich über of_step(id):

EigenschaftTypStandardZweck
is_statestringSTATE_TODOErzwingt den Zustand des Schritts: STATE_TODO, STATE_CURRENT, STATE_DONE, STATE_ERROR. STATE_AUTO = zurück zur automatischen Berechnung; beim Zurücklesen kommt der tatsächliche Zustand des Schritts, nicht der erzwungene
is_textstring—Ändert die Bezeichnung des Schritts, Rich-Text-Auszeichnung zulässig
is_descriptionstring""Zweite Zeile des Schritts — „Optional", ein Datum, ein Betrag. Rich-Text-Auszeichnung zulässig. Wird einem Screenreader als Beschreibung des Schritts angesagt, nach dessen Namen. Eine leere Zeichenfolge entfernt sie; eine verdichtete Leiste lässt sie weg, um einzeilig zu bleiben
is_imagestring""Anstelle der Schrittnummer angezeigtes Symbol (zulässige Formen)
ib_enabledbooleantrueSchritt aktiv; ein deaktivierter Schritt reagiert nicht mehr auf Klicks
ib_visiblebooleantrueBlendet den Schritt aus, ohne ihn aus dem Modell zu entfernen

Methoden #

MethodeZweck
of_add_step (string as_key, string as_label)Fügt einen Schritt am Ende der Leiste hinzu. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_add_step (string as_key, string as_label, string as_icon_file)Dasselbe, mit dem Symbol anstelle der Schrittnummer. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_add_step (string as_key, string as_label, string as_icon_file, string as_desc)Dasselbe, mit Symbol und zweiter Zeile. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_insert_step (string as_key, string as_label, integer ai_index)Fügt einen Schritt an der angegebenen Position ein (ab 0 gezählt). Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_insert_step (string as_key, string as_label, string as_icon_file, integer ai_index)Dasselbe, mit dem Symbol. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_insert_step (string as_key, string as_label, string as_icon_file, string as_desc, integer ai_index)Dasselbe, mit Symbol und zweiter Zeile. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_move_step (string as_key, integer ai_index)Verschiebt einen vorhandenen Schritt. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_next ( )Wechselt zum nächsten Schritt und überspringt die ausgeblendeten und deaktivierten — genau jene, auf denen ii_current + 1 landen würde. Hält beim letzten erreichbaren an. Der Navigationsmodus wird nicht herangezogen: er beschränkt den Benutzer, nicht Ihren Code. Es wird nicht gefragt, aber ue_step_changed wird ausgelöst. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_previous ( )Wechselt zum vorherigen Schritt, dieselben Regeln. Aus der Position „alles erledigt“ kehrt er zum letzten Schritt zurück. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_remove_step (string as_key)Entfernt einen Schritt; die übrigen behalten ihren Zustand. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist
of_clear_steps ( )Leert die Leiste. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_step (string as_key) → n_pbt_stepbar_stepHandle auf einen Schritt, um seine Eigenschaften zu setzen
of_reset ( )Leert die Schritte und setzt alle Eigenschaften auf ihren Standard zurück. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_set_redraw (boolean)Fasst eine Folge von Änderungen zu einer einzigen Darstellung zusammen. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_save_as_png (string) · of_save_as_jpg (string)Exportiert die Darstellung als Bild. Liefert 0 nach dem Schreiben des Bildes, -4 wenn das Schreiben fehlschlägt, -2 wenn die Komponente nicht erzeugt ist

Das dritte Argument ist das Symbol, wie überall sonst in der Bibliothek (of_add_item der Listbar, of_add_panel der Statusleiste, of_add_tile der Tilesbox). Die zweite Zeile folgt danach.


Events #

EventAusgelöst wenn
ue_step_clicked (integer ai_index, string as_key)Der Benutzer hat einen Schritt angeklickt. Die Leiste bewegt sich nicht: Skripten Sie dieses Ereignis, führen Sie Ihre Prüfungen durch und setzen Sie dann ii_current, wenn Sie einverstanden sind
ue_step_changed (integer ai_from_index, string as_from_key, integer ai_index, string as_key)Die Leiste hat sich bewegt: ii_current wurde gesetzt oder of_next / of_previous aufgerufen. Ein Klick landet hier nie
ue_ready ( )Die Komponente ist fertig geladen; alles zuvor Gesendete wurde nachgespielt
ue_runtime_missing ( )Die WebView2-Runtime fehlt: die Komponente bleibt leer
ue_bg_color (long al_color)Die Komponente hat ihre Design-Hintergrundfarbe berechnet; das Userobject hat sie bereits übernommen (backcolor)

Die Leiste navigiert NICHT von selbst. Ein Klick meldet (ue_step_clicked) und sonst nichts: Die Leiste bleibt, wo sie ist. Sie selbst verschieben sie, indem Sie ii_current setzen oder of_next / of_previous aufrufen — und diese Bewegungen melden sich über ue_step_changed.

Diese Aufteilung ist keine Einschränkung, sie ist der Sinn der Komponente: Eine Schrittleiste spiegelt einen Ablauf wider, den Ihre Anwendung steuert. Schritt 3 zu erreichen bedeutet in der Regel, dass ein Formular gültig war und ein Datensatz gespeichert wurde — das kann kein Klick für Sie entscheiden.

ue_step_clicked trägt den angezielten Schritt, ue_step_changed zusätzlich den verlassenen — mit fachlichem Bezeichner ebenso wie mit Rang. Genau dieses Paar erlaubt es, „zurück ja, vorwärts springen nein" in einer Zeile zu schreiben.

is_navigation_mode bleibt der Filter für den Klick: NAV_NONE löst überhaupt nichts mehr aus, NAV_BACKWARD lässt nur die bereits abgeschlossenen Schritte anklicken.


Über die Tastatur #

Die Leiste ist ein einziger Tabulatorstopp: einmal erreicht, lässt sie sich vollständig über die Tastatur durchlaufen.

TasteWirkung
PfeileVerschieben den Fokus von einem Schritt zum nächsten, umlaufend; ausgeblendete, deaktivierte oder unerreichbare Schritte (siehe is_navigation_mode) werden übersprungen
Pos1 / EndeErster / letzter erreichbarer Schritt
Eingabe oder LeertasteMeldet einen Klick auf den fokussierten Schritt (ue_step_clicked) — die Leiste bewegt sich dadurch nicht

Die Pfeile wählen nicht aus, anders als die Registerkarten eines dockcontainer. Einen Schritt zu erreichen stellt Ihrer Anwendung eine Frage: eine Leiste mit acht Schritten zu durchlaufen würde acht davon senden, und eine Ablehnung auf halbem Weg würde Fokus und aktuellen Schritt auseinanderlaufen lassen.

Jeder Schritt ist eine echte Schaltfläche: sie trägt ihre Beschriftung und ihren Zustand in ihrem gesprochenen Namen („Konto - abgeschlossen"), der aktuelle Schritt ist mit aria-current="step" markiert, und ein deaktivierter Schritt ist eine deaktivierte Schaltfläche — nicht bloß ausgegrauter Text. Der nummerierte Punkt wird nicht vorgelesen: ein Rang lehrt nichts.


Beispiele #

Im Assistenten weitergehen #

uo_etapes.of_add_step(/*key*/ "compte",   /*bezeichnung*/ "Konto")
uo_etapes.of_add_step(/*key*/ "profil",   /*bezeichnung*/ "Profil")
uo_etapes.of_add_step(/*key*/ "paiement", /*bezeichnung*/ "Zahlung")
uo_etapes.of_add_step(/*key*/ "fin",      /*bezeichnung*/ "Bestätigung")

// Die Schritte 1 und 2 wechseln automatisch auf "abgeschlossen" (Haken)
uo_etapes.ii_current = 3

Einen Schritt als fehlerhaft kennzeichnen #

// Der Zustand eines Schritts wird ueber sein Handle erzwungen
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_ERROR
// Sobald das Problem behoben ist, uebergibt man wieder an die automatische Berechnung
uo_etapes.of_step(/*key*/ "profil").is_state = n_pbt_stepbar_step.STATE_AUTO

Senkrechte Leiste #

// left / right : die Leiste wird senkrecht gezeichnet, ideal am Rand eines Formulars
uo_etapes.is_position = uo_etapes.POSITION_START

// Das DRITTE Argument ist das Symbol : es tritt an die Stelle der Schrittnummer
uo_etapes.of_add_step(/*key*/ "compte", /*bezeichnung*/ "Konto", /*symbol*/ "mono:img\packimages.dll:svg/samples/folder-open")

Erweiterte Bezeichnungen auf zwei Zeilen #

// Die Bezeichnung eines Schritts nimmt Rich-Text-Auszeichnung an
uo_etapes.of_add_step("compte",   "[b]Konto[/b][br][size=9](Anmeldung)")
uo_etapes.of_add_step("profil",   "[b]Profil[/b][br][size=9](Ihre Angaben)")
uo_etapes.of_add_step("paiement", "[b]Zahlung[/b][br][size=9](Karte)")
uo_etapes.of_add_step("fin",      "[accent][b]Fertig[/b][/accent]")

uo_etapes.ii_current = 2
// event ue_step_clicked de uo_etapes : (integer ai_index, string as_key)
// Die Leiste hat sich NICHT bewegt : hier wird entschieden.
if ai_index > uo_etapes.ii_current then
    MessageBox("Assistent", "Schliessen Sie den aktuellen Schritt zuerst ab.")
    return
end if
uo_etapes.ii_current = ai_index

Bedingter Schritt #

// Ein bereits bekannter Kunde hat keinen Schritt "Profil" auszufuellen
uo_etapes.of_step("profil").ib_visible = false

Best Practices #

Vom gemeinsamen Sockel geerbt #

Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.

MitgliederRolleBeschrieben in
of_count · of_keys_at · of_hasDurchlaufen, was die Komponente enthält3.2 Die Items
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken

Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.


← Komponentenreferenz · Inhalt des Handbuchs