PBToolboxAI v4 ← 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_steps.of_add_step(/*key*/ "account",  /*label*/ "Konto")
uo_steps.of_add_step(/*key*/ "profile",  /*label*/ "Profil")
uo_steps.of_add_step(/*key*/ "payment", /*label*/ "Zahlung")
uo_steps.of_add_step(/*key*/ "done",     /*label*/ "Bestätigung")

// Aktueller Schritt (1 = der erste)
uo_steps.ii_current = 1
// Schaltflaeche Weiter des Assistenten : der naechste Schritt, ausgeblendete und deaktivierte werden uebersprungen
uo_steps.of_next()

// Schaltflaeche Zurueck
uo_steps.of_previous()

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

Drei weitere Zustände werden nie automatisch erreicht: Sie erzwingen sie für einen Schritt — error, wenn er fehlgeschlagen ist, warning, wenn er durchlaufen ist, aber noch etwas zu prüfen bleibt, skipped, wenn er übersprungen wurde (siehe weiter unten).


Eigenschaften #

EigenschaftTypStandardZweck
ii_currentinteger1Aktueller Schritt, ab 1 nummeriert (Anzahl der Schritte + 1 = alles erledigt). Das Setzen löst ue_step_changed aus, wenn sich die Leiste bewegt. Der aktuelle Schritt wird über seine Identität verfolgt: Einen Schritt davor hinzuzufügen, zu entfernen oder zu verschieben ändert den aktuellen Schritt nicht. Vor den Schritten gesetzt, bleibt der Wert erhalten und gilt, sobald der Schritt existiert. Ein ausgeblendeter aktueller Schritt lässt keinen Schritt „in Bearbeitung“ sichtbar. „Alles erledigt" ist am letzten Schritt dieses Moments verankert: Ein danach hinzugefügter Schritt wird zum aktuellen Schritt (und löst ue_step_changed aus); ein davor eingefügter ändert nichts
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), NAV_VISITED (jeder bereits erreichte Schritt außer dem aktuellen — nach einem Schritt zurück bleiben die weiter vorn erreichten Schritte einen Klick entfernt) 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_stylestring""Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen
is_theme_modestring""Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der 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_WARNING (durchlaufen, aber mit etwas zu prüfen: bernsteinfarbene Markierung mit „!“, bernsteinfarbene Beschriftung), STATE_SKIPPED (übersprungen, weder erledigt noch offen: hohle Markierung mit gestricheltem Ring und „–“, Beschriftung kursiv). Bildschirmleser sagen sie als „mit Warnung“ und „übersprungen“ an; nach beiden gilt die Linie als zurückgelegt, wie nach einem erledigten Schritt. STATE_AUTO = zurück zur automatischen Berechnung; beim Zurücklesen kommt der tatsächliche Zustand des Schritts, nicht der erzwungene. Auf einen Schlüssel gesetzt, der keinen Schritt bezeichnet, wird er ignoriert
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 leeren Schlüssel, einem Schlüssel mit / oder ` oder einem bereits vorhandenen Schlüssel, -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 leeren Schlüssel, einem Schlüssel mit / oder ` oder einem bereits vorhandenen Schlüssel, -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 leeren Schlüssel, einem Schlüssel mit / oder ` oder einem bereits vorhandenen Schlüssel, -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 1 gezählt; 0 oder weniger = an erster Stelle, über das Ende hinaus = am Ende). Liefert 0 nach der Anwendung, -5 bei einem leeren Schlüssel, einem Schlüssel mit / oder ` oder einem bereits vorhandenen Schlüssel, -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 leeren Schlüssel, einem Schlüssel mit / oder ` oder einem bereits vorhandenen Schlüssel, -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 leeren Schlüssel, einem Schlüssel mit / oder ` oder einem bereits vorhandenen Schlüssel, -2` wenn die Komponente nicht erzeugt ist
of_move_step (string as_key, integer ai_index)Verschiebt einen vorhandenen Schritt; der aktuelle Schritt bleibt aktuell. Liefert 0 nach der Anwendung, -5 bei einem leeren Schlüssel oder einem Schlüssel, der keinen Schritt bezeichnet, -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. Wird der aktuelle Schritt entfernt, geht die Leiste zum nächsten erreichbaren Schritt (oder zu „alles erledigt“) und löst ue_step_changed aus. Liefert 0 nach der Anwendung, -5 bei einem leeren Schlüssel oder einem Schlüssel, der keinen Schritt bezeichnet, -2 wenn die Komponente nicht erzeugt ist
of_clear_steps ( )Leert die Leiste. Die Leiste beginnt wieder beim ersten Schritt: die danach hinzugefügten Schritte bilden einen neuen Ablauf. 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 auf einen anderen Schritt gesetzt, of_next / of_previous aufgerufen, der aktuelle Schritt entfernt oder ein Schritt nach „alles erledigt" hinzugefügt. 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. Mit diesem Paar protokollieren oder speichern Sie den verlassenen Schritt; die Regel „zurück ja, vorwärts springen nein" schreibt sich mit NAV_BACKWARD.

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. NAV_VISITED geht weiter: Jeder bereits erreichte Schritt bleibt anklickbar, auch vor dem aktuellen — wer zu Schritt 2 zurückgegangen ist, um etwas zu korrigieren, kehrt mit einem Klick zu dem bereits erreichten Schritt 4 zurück, was NAV_BACKWARD nie erlaubt. Eine neue Schrittliste vergisst, was erreicht wurde, und ein eingefügter Schritt wurde nie erreicht.


Ü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: sie verschieben den Fokus. Eingabe oder Leertaste auf einem Schritt meldet den Klick (ue_step_clicked), wie die Maus; Ihre Anwendung verschiebt die Leiste. Eine Leiste mit acht Schritten per Tastatur zu durchlaufen darf keine acht Klicks senden.

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 #

// Die vier Schritte des Assistenten, der Reihe nach
uo_steps.of_add_step(/*key*/ "account",   /*label*/ "Konto")
uo_steps.of_add_step(/*key*/ "profile",   /*label*/ "Profil")
uo_steps.of_add_step(/*key*/ "payment", /*label*/ "Zahlung")
uo_steps.of_add_step(/*key*/ "done",      /*label*/ "Bestätigung")

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

Einen Schritt als fehlerhaft kennzeichnen #

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

Übersprungener Schritt, zu prüfender Schritt, wieder vorwärts #

// Die vier Schritte der Bestellung
uo_steps.of_add_step(/*key*/ "cart",    /*label*/ "Warenkorb")
uo_steps.of_add_step(/*key*/ "coupon",    /*label*/ "Gutschein")
uo_steps.of_add_step(/*key*/ "delivery", /*label*/ "Lieferung")
uo_steps.of_add_step(/*key*/ "payment",  /*label*/ "Zahlung")

// Der Kunde hat keinen Gutscheincode : der Schritt wird uebersprungen, weder erledigt noch offen
uo_steps.of_step(/*key*/ "coupon").is_state = n_pbt_stepbar_step.STATE_SKIPPED

// Adresse nicht geprueft : der Schritt ist durchlaufen, aber zu pruefen
uo_steps.of_step(/*key*/ "delivery").is_state = n_pbt_stepbar_step.STATE_WARNING

// Jeder bereits erreichte Schritt bleibt anklickbar, auch vor dem aktuellen
uo_steps.is_navigation_mode = u_pbt_stepbar.NAV_VISITED

// Der Assistent hat Schritt 4 erreicht und geht zum Warenkorb zurueck : Schritte 2 bis 4 bleiben einen Klick entfernt
uo_steps.ii_current = 4
uo_steps.ii_current = 1

Senkrechte Leiste #

// POSITION_START / POSITION_END : die Leiste wird senkrecht gezeichnet, ideal am Rand eines Formulars
uo_steps.is_position = uo_steps.POSITION_START

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

Erweiterte Bezeichnungen auf zwei Zeilen #

// Die Bezeichnung eines Schritts nimmt Rich-Text-Auszeichnung an
uo_steps.of_add_step(/*key*/ "account",   /*label*/ "[b]Konto[/b][br][size=9](Anmeldung)")
uo_steps.of_add_step(/*key*/ "profile",   /*label*/ "[b]Profil[/b][br][size=9](Ihre Angaben)")
uo_steps.of_add_step(/*key*/ "payment", /*label*/ "[b]Zahlung[/b][br][size=9](Karte)")
uo_steps.of_add_step(/*key*/ "done",      /*label*/ "[accent][b]Fertig[/b][/accent]")

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

Bedingter Schritt #

// Ein bereits bekannter Kunde hat keinen Schritt "Profil" auszufuellen
uo_steps.of_step(/*key*/ "profile").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
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.1 Die Eigenschaften-Engine

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