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 #
| Userobject | u_pbt_stepbar |
| Item-Klasse | n_pbt_stepbar_step (ein Schritt) |
| Wofür | Dem Benutzer zeigen, wo er in einem Assistenten, einem mehrseitigen Formular oder einem Genehmigungsprozess steht |
| Prinzip | Sie 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:
| Position | Zustand | Darstellung |
|---|---|---|
| Vor dem aktuellen Schritt | done — abgeschlossen | Abgehaktes Abzeichen |
| Der aktuelle Schritt | current — in Bearbeitung | Hervorgehobenes Abzeichen |
| Nach dem aktuellen Schritt | todo — bevorstehend | Nummeriertes 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 #
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
ii_current | integer | 1 | Aktueller Schritt, ab 1 nummeriert |
is_position | string | "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_mode | string | "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_mode | string | "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_style | string | fluent | Visueller Stil der Komponente (Konstanten THEME_STYLE_*) |
is_theme_mode | string | light | Helle oder dunkle Variante (Konstanten THEME_MODE_*) |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent des Designs) |
is_tooltip | string | "" | Einfacher Tooltip beim Überfahren der Komponente |
is_super_tooltip_title | string | "" | Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Tooltips (Rich-Markup zulässig) |
is_super_tooltip_image | string | "" | Bild des erweiterten Tooltips |
Eigenschaften eines Schritts — n_pbt_stepbar_step #
Erhältlich über of_step(id):
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_state | string | STATE_TODO | Erzwingt 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_text | string | — | Ändert die Bezeichnung des Schritts, Rich-Text-Auszeichnung zulässig |
is_description | string | "" | 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_image | string | "" | Anstelle der Schrittnummer angezeigtes Symbol (zulässige Formen) |
ib_enabled | boolean | true | Schritt aktiv; ein deaktivierter Schritt reagiert nicht mehr auf Klicks |
ib_visible | boolean | true | Blendet den Schritt aus, ohne ihn aus dem Modell zu entfernen |
Methoden #
| Methode | Zweck |
|---|---|
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 1 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_step | Handle 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_itemder Listbar,of_add_panelder Statusleiste,of_add_tileder Tilesbox). Die zweite Zeile folgt danach.
Events #
| Event | Ausgelö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_modebleibt der Filter für den Klick:NAV_NONElöst überhaupt nichts mehr aus,NAV_BACKWARDlä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.
| Taste | Wirkung |
|---|---|
| Pfeile | Verschieben den Fokus von einem Schritt zum nächsten, umlaufend; ausgeblendete, deaktivierte oder unerreichbare Schritte (siehe is_navigation_mode) werden übersprungen |
| Pos1 / Ende | Erster / letzter erreichbarer Schritt |
| Eingabe oder Leertaste | Meldet 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
Navigation per Klick #
// 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 #
- Geben Sie jedem Schritt einen stabilen fachlichen Bezeichner (
"paiement"): Genau diesen erhalten Sie inue_step_clickedundue_step_changed, nicht eine Nummer, die sich bei der geringsten Einfügung verschiebt. - Lassen Sie die Komponente die Zustände berechnen; erzwingen Sie
is_statenur für den Fehlerfall. - Der Klick auf einen Schritt ist nur ein Signal: Sie entscheiden, ob Sie den Sprung erlauben oder nicht, insbesondere zu einem noch nicht erreichten Schritt.
- Klammern Sie die Deklaration der Schritte mit
of_set_redraw(false)/of_set_redraw(true)ein, wenn es viele sind. - Rufen Sie
of_reset()auf, bevor Sie dieselbe Leiste für einen anderen Assistenten wiederverwenden.
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.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_count · of_keys_at · of_has | Durchlaufen, was die Komponente enthält | 3.2 Die Items |
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.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.