PBToolboxAI v1 ← Site

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 #

Userobjectu_pbt_statusbar
Item-Klassen_pbt_statusbar_panel (Bereich)
WofürAm 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(/*id*/ "etat",  /*text*/ "Bereit",           /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START,  /*width*/ 0)
uo_statut.of_add_panel(/*id*/ "",      /*text*/ "Zeile 12, Sp. 4", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START,  /*width*/ 0)
uo_statut.of_add_panel(/*id*/ "heure", /*text*/ "12:00",          /*icon_file*/ "", /*align*/ uo_statut.ALIGN_END, /*width*/ 140)
// Einen Bereich jederzeit ueber seinen Bezeichner aktualisieren
uo_statut.of_item("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:

uo_statut.of_item("etat").is_text = "3 Datensaetze geaendert"

Siehe Gemeinsame Basis · Die Items.


Eigenschaften #

EigenschaftTypStandardZweck
ib_show_resize_gripbooleanfalseZeigt den Größenänderungsgriff in der Ecke am Ende der Leiste an
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

Methoden #

MethodeZweck
of_add_panel (string as_id, string as_text, string as_icon_file, string as_align, integer ai_width)Fügt einen Bereich am Ende der Leiste hinzu
of_add_sep ( )Fügt eine senkrechte Trennlinie zwischen zwei Gruppen von Bereichen ein
of_insert_panel (as_id, as_text, as_icon_file, as_align, ai_width, ai_index)Fügt einen Bereich an einer bestimmten Position ein (ab 0 gezählt)
of_move_panel (string as_id, integer ai_index)Verschiebt einen vorhandenen Bereich an eine andere Position
of_remove_panel (string as_id)Entfernt einen einzelnen Bereich; die übrigen behalten ihren Zustand
of_item (string as_id)n_pbt_statusbar_panelGibt das Handle eines Bereichs zurück (beim ersten Zugriff erzeugt)
of_flash_panel (string as_id, 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)
of_set_panel_menu (string as_id, string as_item_ids[], string as_labels[])Macht aus dem Panel eine Auswahl: der Klick öffnet eine Auswahlliste, und die Wahl kommt über ue_panel_menu_clicked zurück. Ein Bezeichner - fügt einen Trenner ein; eine leere Beschriftung greift auf den Bezeichner zurück
of_clear_panel_menu (string as_id)Entfernt die Auswahlliste; das Panel kehrt zu dem Verhalten zurück, das ihm ib_clickable gibt
of_clear ( )Leert die Leiste: alle Bereiche und alle Trenner
of_reset ( )Leert die Leiste und setzt alle Eigenschaften auf ihren Standard zurück

Die Argumente von of_add_panel #

ArgumentWerteWirkung
as_idfrei oder ""Schlüssel des Panels, über den man es später wiederfindet. Leer = ein dekoratives Panel, weder adressierbar noch anklickbar
as_textTextInhalt des Bereichs. Die Rich-Text-Auszeichnung wird akzeptiert
as_icon_fileBildpfad, oder ""Symbol, das vor dem Text angezeigt wird (akzeptierte Formen)
as_alignALIGN_START (Standard) oder ALIGN_ENDSeite, 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_widthPixel, oder 0Feste Breite. 0 = der Bereich passt sich seinem Inhalt an

Auf einem Bereich — n_pbt_statusbar_panel #

ElementTypStandardZweck
is_textstring""Text des Bereichs, Rich-Text-Auszeichnung wird akzeptiert
is_imagestring""Symbol des Bereichs, jederzeit änderbar
ib_enabledbooleantrueBereich ausgegraut und nicht anklickbar
ib_visiblebooleantrueBereich ausgeblendet, ohne aus der Leiste entfernt zu werden
ii_progressintegerMini-Fortschrittsbalken im Bereich, von 0 bis 100; ein negativer Wert lässt ihn verschwinden
is_statestring""Semantischer Zustand des Bereichs, der ihn einfärbt: siehe die Konstanten unten
ib_indeterminatebooleanfalseBalken ohne Wert animiert, für einen Vorgang unbekannter Dauer. Unabhängig von ii_progress, das der genaue Prozentsatz bleibt
ib_clickablebooleanfalseReagiert 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

Zustandskonstanten #

KonstanteWertVerwendung
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:

n_pbt_statusbar_panel lnv_panneau
lnv_panneau = uo_statut.of_item("etat")
lnv_panneau.is_state = lnv_panneau.STATE_WARNING

Events #

EventAusgelöst wenn
ue_panel_clicked (string as_id)Auf einen Bereich mit angegebenem Bezeichner wird geklickt
ue_panel_double_clicked (string as_id)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_id, 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_id, string as_item_id)Ein Eintrag einer Panel-Auswahlliste wurde gewählt (siehe of_set_panel_menu)
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.

TasteWirkung
PfeileWechseln zum vorherigen / nächsten interaktiven Feld, umlaufend; Anzeigefelder und deaktivierte Felder werden übersprungen
Pos1 / EndeErstes / letztes interaktives Feld
Eingabe oder LeertasteLö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(/*id*/ "", /*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(/*id*/ "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(/*id*/ "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(/*id*/ "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(/*id*/ "conn", /*text*/ "Verbunden",   /*icon_file*/ "mono:img\plug.svg", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)
uo_statut.of_add_panel(/*id*/ "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_id
    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(/*id*/ "", /*text*/ "Willkommen [b]bei[/b] [accent]PBToolboxAI[/accent]", &
                       /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 0)

uo_statut.of_add_panel(/*id*/ "", /*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_item("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(/*id*/ "import", /*text*/ "Import", /*icon_file*/ "", /*align*/ uo_statut.ALIGN_START, /*width*/ 220)
lnv_avance = uo_statut.of_item("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_item("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_item("user").ib_visible = ib_utilisateur_identifie

// Ihn ausgrauen, wenn die zugehoerige Aktion keinen Sinn ergibt
uo_statut.of_item("save").ib_enabled = ib_document_ouvert

// Neu anordnen : den Zustandsbereich an den Anfang stellen (Positionen ab 0 gezaehlt)
uo_statut.of_move_panel(/*id*/ "etat", /*index*/ 0)

// Einen ueberfluessig gewordenen Bereich entfernen
uo_statut.of_remove_panel(/*id*/ "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 #


← Komponentenreferenz · Inhalt des Handbuchs