statusbar — u_pbt_statusbar #
← Komponentenreferenz · Inhalt des Handbuchs
Statusleiste aus Bereichen: Rich-Text, Symbole, feste oder automatische Breiten, Ausrichtung nach links oder rechts, anklickbare Bereiche, ein Mini-Fortschrittsbalken und farbige Zustände.
▶ Live ansehen — Demoanwendung, Kachel Statusbar: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.
Auf einen Blick #
| Userobject | u_pbt_statusbar |
| Item-Klasse | n_pbt_statusbar_panel (Bereich) · n_pbt_statusbar_menu_item (Listeneintrag) |
| Wofür | Am unteren Fensterrand den Zustand der Anwendung anzeigen: Kontext, Fortschritt, dezente Hinweise |
| Opt-in-Optionen | — |
Schnellstart #
// open-Event des Fensters
// of_add_panel(id, Text, Symbol, Ausrichtung, Breite)
// leere id = rein informativer Bereich ; Breite 0 = an den Text angepasst
uo_statut.of_add_panel(/*key*/ "etat", /*text*/ "Bereit", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_panel(/*key*/ "", /*text*/ "Zeile 12, Sp. 4", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_panel(/*key*/ "heure", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 140)
// Einen Bereich jederzeit ueber seinen Bezeichner aktualisieren
uo_statut.of_panel("etat").is_text = "Wird gespeichert..."
Das Modell: Bereiche mit Schlüssel #
Die Leiste ist eine Folge von Bereichen, die der Reihe nach hinzugefügt werden. Ein Bereich erhält bei der Erstellung einen Bezeichner: Über ihn finden Sie ihn später wieder, um seinen Text, sein Symbol oder seinen Zustand zu ändern.
Der Bezeichner ist ein Adressierungsschlüssel, kein Schalter für Interaktivität:
- Bezeichner angegeben: das Panel ist wiederauffindbar — man ändert seinen Inhalt, man gibt ihm einen Tooltip. Es bleibt reglos: eine Statusleiste zeigt vor allem an, und ein Panel wie
Zeile 12, Sp. 4darf nicht drückbar wirken. - Leerer Bezeichner: das Panel ist rein dekorativ. Es ist weder auffindbar noch anklickbar, und es lässt sich kein Tooltip daran hängen. Geben Sie jedem Panel einen Bezeichner: das kostet nichts und hält die Tür offen.
- Um ein Panel anklickbar zu machen, verlangen Sie es:
of_panel("id").ib_clickable = true. Ein Panel mit einer Auswahlliste (of_add_menu_item) ist es bereits.
uo_statut.of_panel("etat").is_text = "3 Datensaetze geaendert"
Siehe Gemeinsame Basis · Die Items.
Eigenschaften #
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
ib_show_resize_grip | boolean | false | Zeigt den Größenänderungsgriff in der Ecke am Ende der Leiste an |
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 |
Methoden #
| Methode | Zweck |
|---|---|
of_add_panel (string as_key, string as_text, string as_icon_file, string as_align, integer ai_width) | Fügt einen Bereich am Ende der Leiste hinzu. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_add_sep ( ) | Fügt eine senkrechte Trennlinie zwischen zwei Gruppen von Bereichen ein. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_insert_panel (as_keys, as_text, as_icon_file, as_align, ai_width, ai_index) | Fügt einen Bereich an einer bestimmten Position ein (ab 1 gezählt). Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_move_panel (string as_key, integer ai_index) | Verschiebt einen vorhandenen Bereich an eine andere Position. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist |
of_remove_panel (string as_key) | Entfernt einen einzelnen Bereich; 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_panel (string as_key) → n_pbt_statusbar_panel | Gibt das Handle eines Bereichs zurück (beim ersten Zugriff erzeugt) |
of_flash_panel (string as_key, string as_text, long al_ms) | Zeigt eine Meldung für al_ms Millisekunden und setzt danach den vorherigen Text zurück (al_ms ≤ 0 = 2 Sekunden). 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_menu_item (string as_keys, string as_label) · (as_keys, as_label, as_image) | Fügt der Auswahlliste eines Panels einen Eintrag hinzu: as_keys hat zwei Ebenen, das Panel und dann den Eintrag ("enc/utf8"). Ab dem ersten Eintrag ist das Panel eine Auswahl: der Klick öffnet die Liste, und die Wahl kommt über ue_panel_menu_clicked mit derselben Adresse zurück. Eine leere Beschriftung übernimmt den Schlüssel. 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_menu_item (string as_keys, string as_label, integer ai_index) · (as_keys, as_label, as_image, ai_index) | Fügt einen Eintrag an einer bestimmten 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_add_menu_separator (string as_key) | Trennlinie in der Liste des Panels as_key. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist |
of_remove_menu_item (string as_keys) | Entfernt einen einzelnen Eintrag; ist der letzte weg, kehrt das Panel zu dem Verhalten zurück, das ihm ib_clickable gibt. 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_menu_item (string as_keys, integer ai_index) | Verschiebt einen Eintrag an eine andere Position seiner Liste. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist |
of_menu_item (string as_keys) → n_pbt_statusbar_menu_item | Gibt das Handle eines Eintrags zurück (beim ersten Zugriff erzeugt), um ihn auszugrauen, abzuhaken oder umzubenennen |
of_clear_menu (string as_key) | Entfernt die ganze Auswahlliste; das Panel kehrt zu dem Verhalten zurück, das ihm ib_clickable gibt. 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 ( ) | Leert die Leiste: alle Bereiche und alle Trenner. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_reset ( ) | Leert die Leiste und setzt alle Eigenschaften auf ihren Standard zurück. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
Die Argumente von of_add_panel #
| Argument | Werte | Wirkung |
|---|---|---|
as_keys | frei oder "" | Schlüssel des Panels, über den man es später wiederfindet. Leer = ein dekoratives Panel, weder adressierbar noch anklickbar |
as_text | Text | Inhalt des Bereichs. Die Rich-Text-Auszeichnung wird akzeptiert |
as_icon_file | Bildpfad, oder "" | Symbol, das vor dem Text angezeigt wird (akzeptierte Formen) |
as_align | ALIGN_START (Standard) oder ALIGN_END | Seite, zu der der Bereich geschoben wird. Logische Werte: START = Anfang der Leserichtung (links bei Schreibrichtung von links nach rechts). Die physischen Aliase "left" / "right" werden weiterhin akzeptiert |
ai_width | Pixel, oder 0 | Feste Breite. 0 = der Bereich passt sich seinem Inhalt an |
Auf einem Bereich — n_pbt_statusbar_panel #
| Element | Typ | Standard | Zweck |
|---|---|---|---|
is_text | string | "" | Text des Bereichs, Rich-Text-Auszeichnung wird akzeptiert |
is_image | string | "" | Symbol des Bereichs, jederzeit änderbar |
ib_enabled | boolean | true | Bereich ausgegraut und nicht anklickbar |
ib_visible | boolean | true | Bereich ausgeblendet, ohne aus der Leiste entfernt zu werden |
ii_progress | integer | — | Mini-Fortschrittsbalken im Bereich, von 0 bis 100; ein negativer Wert lässt ihn verschwinden |
is_state | string | "" | Semantischer Zustand des Bereichs, der ihn einfärbt: siehe die Konstanten unten |
ib_indeterminate | boolean | false | Balken ohne Wert animiert, für einen Vorgang unbekannter Dauer. Unabhängig von ii_progress, das der genaue Prozentsatz bleibt |
ib_clickable | boolean | false | Reagiert das Panel auf den Klick. Opt-in: ein Panel bleibt reglos, solange man es nicht verlangt, und behält dabei seinen Schlüssel — es wird gesteuert und trägt einen Tooltip. Ein Panel mit Auswahlliste ist ohnehin anklickbar |
Auf einem Listeneintrag — n_pbt_statusbar_menu_item #
Erhalten über of_menu_item("enc/utf8"): die Adresse hat zwei Ebenen, das Panel und dann den Eintrag. Die Liste ist ein natives Menü: eine Eigenschaft, die geändert wird, während es offen ist, zeigt sich beim nächsten Öffnen.
| Element | Typ | Standard | Zweck |
|---|---|---|---|
is_label | string | "" | Text des Eintrags |
is_image | string | "" | Bild vor dem Text, jederzeit änderbar |
ib_enabled | boolean | true | Eintrag ausgegraut: sichtbar, aber nicht wählbar |
ib_checked | boolean | false | Häkchen vor dem Eintrag, für den aktuellen Wert |
ib_visible | boolean | true | Eintrag aus der Liste genommen, ohne entfernt zu werden: ihn wieder zu zeigen braucht nichts weiter |
uo_statut.of_add_menu_item("enc/utf8", "UTF-8")
uo_statut.of_add_menu_item("enc/ansi", "ANSI")
uo_statut.of_menu_item("enc/utf8").ib_checked = true // la valeur en cours
uo_statut.of_menu_item("enc/ansi").ib_enabled = false // pas disponible ici
Zustandskonstanten #
| Konstante | Wert | Verwendung |
|---|---|---|
STATE_NONE | "" | Kein Zustand: normales Erscheinungsbild |
STATE_INFO | "info" | Information |
STATE_WARNING | "warning" | Warnung |
STATE_ERROR | "error" | Fehler |
STATE_SUCCESS | "success" | Erfolg |
Wie bei jeder Eigenschaft mit vordefinierten Werten sollten Sie die Konstante statt der Zeichenkette verwenden:
uo_statut.of_panel("etat").is_state = n_pbt_statusbar_panel.STATE_WARNING
Events #
| Event | Ausgelöst wenn |
|---|---|
ue_panel_clicked (string as_key) | Auf einen Bereich mit angegebenem Bezeichner wird geklickt |
ue_panel_double_clicked (string as_key) | Ein anklickbares Panel wurde doppelt angeklickt — die klassische Abkürzung hinter Zeile 12, Sp. 4, die ein "Gehe zu Zeile" öffnet |
ue_panel_rclicked (string as_key, long al_x, long al_y) | Ein Panel erhielt einen Rechtsklick. al_x und al_y sind Bildschirm-Pixel: geben Sie sie unverändert weiter, um ein Kontextmenü dort zu öffnen, wohin der Benutzer gezielt hat |
ue_panel_menu_clicked (string as_keys) | Ein Eintrag einer Panel-Auswahlliste wurde gewählt (siehe of_add_menu_item). as_keys trägt beide Ebenen: das Panel, dann den Eintrag — "clock/utc" |
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) |
Über die Tastatur #
Die Leiste ist ein einziger Tabulatorstopp: nur die zum Anklicken gedachten Felder gehören dazu, und die Pfeile durchlaufen sie.
| Taste | Wirkung |
|---|---|
| Pfeile | Wechseln zum vorherigen / nächsten interaktiven Feld, umlaufend; Anzeigefelder und deaktivierte Felder werden übersprungen |
| Pos1 / Ende | Erstes / letztes interaktives Feld |
| Eingabe oder Leertaste | Löst das Feld aus — also ue_panel_clicked, oder das Öffnen seiner Auswahlliste, sofern vorhanden |
Ein Feld, das nur anzeigt, ist kein Steuerelement: es ist weder fokussierbar noch wird es als solches angesagt. Ein anklickbares, aber deaktiviertes Feld bleibt dagegen als nicht verfügbar angesagt, statt für Text gehalten zu werden. Ein Fortschrittsbalken sagt seinen Wert an, ein unbestimmter keinen — dieses Fehlen ist die Bedeutung des Wortes.
Der Fokus übersteht den Neuaufbau der Leiste: sie wird bei jeder Textänderung neu gezeichnet, und ohne dies fiele der Fokus bei einer Leiste mit Uhr jede Sekunde weg.
Beispiele #
Feste und automatische Breiten #
// Breite 0 : der Bereich nimmt genau den Platz seines Textes ein
uo_statut.of_add_panel(/*key*/ "", /*text*/ "An den Inhalt angepasster Bereich", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
// Feste Breite in Pixeln : nuetzlich, wenn sich der Text haeufig aendert,
// damit die benachbarten Bereiche nicht bei jeder Aktualisierung springen
uo_statut.of_add_panel(/*key*/ "pos", /*text*/ "Zeile 1, Sp. 1", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 150)
// Ein Bereich, der ans entgegengesetzte Ende geschoben wird
uo_statut.of_add_panel(/*key*/ "heure", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 140)
Symbole und anklickbare Bereiche #
// Ein nicht leerer Bezeichner macht den Bereich anklickbar
uo_statut.of_add_panel(/*key*/ "save", /*text*/ "Gespeichert", /*icon_file*/ "mono:img\save.svg", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_sep() // Trennlinie zwischen zwei Gruppen von Bereichen
uo_statut.of_add_panel(/*key*/ "conn", /*text*/ "Verbunden", /*icon_file*/ "mono:img\plug.svg", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_panel(/*key*/ "user", /*text*/ "Guillaume", /*icon_file*/ "mono:img\user.svg", /*align*/ uo_statut.ALIGN_END, /*width*/ 160)
// Event ue_panel_clicked von uo_statut
choose case as_keys
case "conn" ; open(w_parametres_connexion)
case "user" ; open(w_profil)
end choose
Rich-Text in einem Bereich #
Die Bereiche akzeptieren die Rich-Text-Auszeichnung: Stile, Farben und kleine Bilder direkt im Text.
uo_statut.of_add_panel(/*key*/ "", /*text*/ "Willkommen [b]bei[/b] [accent]PBToolboxAI[/accent]", &
/*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_panel(/*key*/ "", /*text*/ "[green]Online[/green] [picture=mono:img\plug.svg,14,14]", &
/*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 0)
// Rich-Text gilt auch fuer Aktualisierungen
uo_statut.of_panel("etat").is_text = "[b]" + String(ll_modifies) + "[/b] Datensaetze geaendert"
Einen langen Vorgang verfolgen #
n_pbt_statusbar_panel lnv_avance
uo_statut.of_add_panel(/*key*/ "import", /*text*/ "Import", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 220)
lnv_avance = uo_statut.of_panel("import")
// In der Verarbeitungsschleife : der Mini-Balken folgt dem Fortschritt
lnv_avance.ii_progress = ll_pourcentage
lnv_avance.is_text = "Import " + String(ll_pourcentage) + " %"
// Am Ende : den Mini-Balken ausblenden und das Ergebnis melden
lnv_avance.ii_progress = -1 // negativer Wert = Balken ausgeblendet
lnv_avance.is_text = "Import abgeschlossen"
lnv_avance.is_state = lnv_avance.STATE_SUCCESS
Einen dezenten Hinweis melden #
n_pbt_statusbar_panel lnv_panneau
lnv_panneau = uo_statut.of_panel("conn")
if not ib_connecte then
lnv_panneau.is_text = "Offline"
lnv_panneau.is_state = lnv_panneau.STATE_ERROR
else
lnv_panneau.is_text = "Verbunden"
lnv_panneau.is_state = lnv_panneau.STATE_NONE // zurueck zum normalen Erscheinungsbild
end if
Die Leiste an den Kontext anpassen #
// Einen Bereich ausblenden, ohne ihn zu loeschen : er findet seinen Platz spaeter wieder
uo_statut.of_panel("user").ib_visible = ib_utilisateur_identifie
// Ihn ausgrauen, wenn die zugehoerige Aktion keinen Sinn ergibt
uo_statut.of_panel("save").ib_enabled = ib_document_ouvert
// Neu anordnen : den Zustandsbereich an den Anfang stellen (Positionen ab 1 gezaehlt)
uo_statut.of_move_panel(/*key*/ "etat", /*index*/ 1)
// Einen ueberfluessig gewordenen Bereich entfernen
uo_statut.of_remove_panel(/*key*/ "import")
Der Größenänderungsgriff #
// Bei einem Fenster mit veraenderbarer Groesse ist der Eckgriff ein vertrauter Anhaltspunkt
uo_statut.ib_show_resize_grip = true
Best Practices #
- Geben Sie Bereichen, deren Text sich häufig ändert (Cursorposition, Zähler), eine feste Breite: Die benachbarten Bereiche springen dann nicht mehr bei jeder Aktualisierung.
- Lassen Sie den Bezeichner bei einem rein informativen Bereich leer: Das vermeidet einen Klick ohne Wirkung.
- Halten Sie die rechte Seite für stabile Informationen frei (Uhrzeit, Benutzer, Verbindung) und die linke Seite für den aktuellen Kontext.
- Verwenden Sie
is_statestatt Farben im Text: Der Zustand folgt sowohl dem hellen als auch dem dunklen Design. - Denken Sie daran,
is_statewieder aufSTATE_NONEundii_progresswieder auf einen negativen Wert zu setzen, sobald der Hinweis oder der Vorgang beendet ist. - Eine Statusleiste ist kein Protokoll: Ab fünf oder sechs Bereichen ist eine toaster-Benachrichtigung vorzuziehen.
- Wenn der Fortschritt mehr verdient als einen Mini-Balken in einem Bereich, wechseln Sie zur progressbar.
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.