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 | ib_announce |
Schnellstart #
// open-Event des Fensters
// of_add_panel(Schluessel, Text, Symbol, Ausrichtung, Breite)
// ueber den Schluessel findet man den Bereich wieder ; Breite 0 = an den Text angepasst, -1 = nimmt den freien Platz
uo_status.of_add_panel(/*key*/ "state", /*text*/ "Ready", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ -1)
uo_status.of_add_panel(/*key*/ "pos", /*text*/ "Line 12, Col 4", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
uo_status.of_add_panel(/*key*/ "clock", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 140)
// Einen Bereich jederzeit ueber seinen Bezeichner aktualisieren
uo_status.of_panel(/*key*/ "state").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. Den Rechtsklick erhält es dennoch (ue_panel_rclicked) : ein Kontextmenü « Kopieren » ist keine Aktivierung. - 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. Er zählt dennoch in
of_countund in den Positionen, undof_keys_atliefert für ihn einen leeren Schlüssel. - Um ein Panel anklickbar zu machen, verlangen Sie es:
of_panel(/*key*/ "id").ib_clickable = true. Ein Panel mit einer Auswahlliste (of_add_menu_item) ist es bereits.
// Der Bereich zeigt einen neuen Text
uo_status.of_panel(/*key*/ "state").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; daran ziehen ändert die Größe des Fensters, das die Leiste trägt — ein MDI-Blatt, nicht sein Rahmen — von seiner Ecke unten rechts (unten links bei Leserichtung von rechts nach links). Er wird nur gezeichnet, wenn die Leiste in der unteren Ecke dieses Fensters sitzt und sich das Fenster vergrößern lässt: maximiert, ohne veränderbaren Rahmen oder mit höher platzierter Leiste verschwindet er, und die Eigenschaft bleibt gesetzt |
ib_announce | boolean | false | Für Bildschirmleser: bei true wird ein Text oder ein Zustand, der sich auf einem angezeigten Bereich ändert, vorgelesen (ein höflicher Live-Bereich, der den Leser seinen Satz beenden lässt). Eine Meldung von of_flash_panel wird immer vorgelesen, was diese Eigenschaft auch sagt: eine Meldung ist zum Lesen da. Standardmäßig aus: eine sekündlich tickende Uhr würde den ganzen Tag reden |
is_help | string | "" | Die MicroHelp eines PowerBuilder-Rahmens: was SetMicroHelp schrieb. Wird ÜBER dem Text des Bereichs angezeigt, den is_help_panel nennt — sein is_text liest weiterhin seinen eigenen Text —; "" gibt dem Bereich seinen Text zurück. Eine Meldung von of_flash_panel steht davor, solange sie dauert |
is_help_panel | string | "" | Schlüssel des Bereichs, der is_help anzeigt — meist der erste, der Ready-Bereich. Leer = kein Hilfebereich: is_help wartet, bis einer genannt wird |
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der 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 am Ende der Leiste einen Bereich hinzu; eine Breite von -1 macht ihn zu einer Feder, die den freien Platz nimmt (ib_spring). Gibt 0 zurück, sobald angewendet, -5, wenn der Schlüssel schon vergeben ist, / oder ` | enthält oder mit __ beginnt (ein leerer Schlüssel fügt einen dekorativen Bereich hinzu), -2`, wenn die Komponente nicht erstellt ist |
of_add_sep ( ) | Fügt an der aktuellen Position einen Gruppenumbruch ein. Bereiche trennen sich bereits durch eine feine Linie : dieser ist breiter, damit die Bereiche davor und danach als zwei Gruppen erscheinen. Zwischen zwei of_add_panel aufrufen ; er eröffnet die Gruppe des folgenden Bereichs (auf der Seite des vorigen, wenn er zuletzt kommt). Ein Trenner ist kein Bereich : er zählt weder für of_count / of_keys_at noch bei Positionen. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist | |
of_insert_panel (string as_key, string as_text, string as_icon_file, string as_align, integer ai_width, integer ai_index) | Fügt einen Bereich an einer bestimmten Position ein, in Bereichen ab 1 gezählt (0 oder weniger = zuerst, hinter dem letzten = am Ende). Dieselben Ablehnungen wie of_add_panel. Liefert 0 nach der Anwendung, -5 wenn der Schlüssel schon vergeben ist oder / bzw. ` | enthält, -2` wenn die Komponente nicht erzeugt ist |
of_move_panel (string as_key, integer ai_index) | Verschiebt einen vorhandenen Bereich an eine andere Position, in Bereichen ab 1 gezählt. Liefert 0 nach der Anwendung, -5 bei einem leeren oder der Leiste nie übergebenen Schlüssel, -2 wenn die Komponente nicht erzeugt ist | |
of_remove_panel (string as_key) | Entfernt einen einzelnen Bereich samt Aufklappliste ; die übrigen behalten ihren Zustand. Liefert 0 nach der Anwendung, -5 bei einem leeren oder der Leiste nie übergebenen Schlüssel, -2 wenn die Komponente nicht erzeugt ist | |
of_panel (string as_key) → n_pbt_statusbar_panel | Liefert das Handle eines Bereichs (beim ersten Zugriff erzeugt). Ein leerer Schlüssel (dekorativer Bereich), eine Adresse oder eine Liste bezeichnen nichts: ihr Handle schreibt nirgendwohin und liest sich leer | |
of_flash_panel (string as_key, string as_text, long al_ms) | Zeigt eine Meldung al_ms Millisekunden lang an und danach wieder den Text des Bereichs (al_ms ≤ 0 = 2 Sekunden). Die Meldung liegt ÜBER dem Text: is_text liest sich immer als Text des Bereichs, nie als Meldung. Liefert 0 nach der Anwendung, -5 bei einem leeren Schlüssel, einer Adresse oder einem Schlüssel, den die Leiste nie erhalten hat, -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 Aufklappliste eines Bereichs einen Eintrag hinzu : as_keys hat zwei Ebenen, erst der Bereich, dann der Eintrag ("enc/utf8"). Ab dem ersten Eintrag wird der Bereich zur Auswahl : ein Klick öffnet die Liste, 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 einer Adresse ohne zwei Ebenen, einem der Leiste nie übergebenen Bereich oder einem schon vergebenen Eintrag, -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, gezählt in Einträgen ab 1: ein Trenner ist keiner. Gibt 0 zurück, sobald angewendet, -5 bei einer Adresse ohne zwei Ebenen, einem Schlüssel, der mit __ beginnt, einem Bereich, den die Leiste nie erhalten hat, oder einem schon vergebenen Eintrag, -2, wenn die Komponente nicht erstellt ist | |
of_add_menu_separator (string as_key) | Trennlinie in der Liste des Bereichs as_key. Ein Trenner hat keine Adresse: nur of_clear_menu entfernt ihn, und eine Liste nur aus Trennern ist keine Liste (weder Pfeil noch Klick). Liefert 0 nach der Anwendung, -5 bei einem leeren Schlüssel oder einem Bereich, den die Leiste nie erhalten hat, -2 wenn die Komponente nicht erzeugt ist | |
of_remove_menu_item (string as_keys) | Entfernt einen einzigen Eintrag; ist der letzte weg, nimmt der Bereich wieder das Verhalten an, das ihm ib_clickable gibt. Gibt 0 zurück, sobald angewendet, -5 bei einer Adresse, die die Leiste nie erhalten hat, -2, wenn die Komponente nicht erstellt ist | |
of_move_menu_item (string as_keys, integer ai_index) | Verschiebt einen Eintrag an eine andere Position seiner Liste, gezählt in Einträgen ab 1: ein Trenner ist keiner. Gibt 0 zurück, sobald angewendet, -5 bei einer Adresse, die die Leiste nie erhalten hat, -2, wenn die Komponente nicht erstellt 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. Eine Adresse ohne zwei Ebenen bezeichnet nichts : ihr Handle schreibt nirgendwohin und liest leer | |
of_clear_menu (string as_key) | Entfernt die ganze Dropdown-Liste; der Bereich nimmt wieder das Verhalten an, das ihm ib_clickable gibt. Gibt 0 zurück, sobald angewendet, -5 bei einem leeren Schlüssel, einer Adresse oder einem Bereich, den die Leiste nie erhalten hat, -2, wenn die Komponente nicht erstellt ist | |
of_dock_bottom ( ) | Setzt die Leiste an die UNTERE Kante dessen, was sie trägt (ein Fenster, eine Registerkarte, ein Userobject), über die ganze Breite; ihre Höhe ändert sich nicht. Im resize-Event des Fensters aufrufen. In einem MDI-Rahmen mdi_1 auf den verbleibenden Platz verkleinern: WorkSpaceHeight() - uo_status.Height. Gibt 0 zurück, sobald platziert, -5, wenn die Leiste weder auf einem Fenster noch auf einem Userobject liegt, -2, wenn die Komponente nicht erstellt 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_key | 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, 0 oder -1 | Feste Breite. 0 = der Bereich passt sich seinem Inhalt an; -1 = eine Feder, die den ganzen freien Platz der Leiste nimmt (ib_spring) |
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, neben dem Text, von 0 bis 100 (über 100 ist der Balken voll und liest sich 100); ein negativer Wert blendet ihn aus. Liest sich -1, wenn der Bereich keinen Balken hat (und 0 für einen Balken bei 0 %) |
is_state | string | "" | Semantischer Zustand des Bereichs, der seinen Text färbt und seinen Anfangsrand markiert: siehe die Konstanten unten. Jeder andere Wert bedeutet keinen Zustand und liest sich leer; ein deaktivierter Bereich ist ausgegraut, Zustandsmarkierung inbegriffen |
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 |
ib_spring | boolean | false | Feder: der Bereich nimmt den ganzen freien Platz der Leiste, und sein Text wird als erster gekürzt, wenn das Fenster schmaler wird — der Ready-Bereich, der mit dem Fenster wächst. Mehrere Federn teilen sich den Platz; eine feste Breite tritt zurück |
is_tooltip | string | "" | Tooltip des Bereichs (Rich-Text-Markup erlaubt). Er erscheint auch auf einem ausgegrauten Bereich, um zu sagen, warum. Ohne Tooltip zeigt ein Bereich mit gekürztem Text beim Überfahren seinen ganzen Text |
is_super_tooltip_title | string | "" | Titel des reichhaltigen Tooltips des Bereichs (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des reichhaltigen Tooltips des Bereichs (Markup erlaubt) |
is_super_tooltip_image | string | "" | Bild des reichhaltigen Tooltips des Bereichs |
il_accent | long | -1 | Akzent dieses Bereichs: die Füllung seines Mini-Fortschrittsbalkens. -1 = der Akzent der Komponente |
il_back_color | long | -1 | Hintergrund dieses Bereichs im Ruhezustand. -1 = der der Leiste |
il_text_color | long | -1 | Textfarbe dieses Bereichs im Ruhezustand. Ein Zustand (is_state) oder ein ausgegrauter Bereich malt zuerst seine eigene Farbe: die Bedeutung geht der Farbe vor. -1 = die der Leiste |
il_back_color_hover | long | -1 | Hintergrund unter dem Zeiger — nur ein anklickbarer Bereich (ib_clickable) reagiert auf den Zeiger. -1 = der des Themas |
il_text_color_hover | long | -1 | Textfarbe unter dem Zeiger, auf einem anklickbaren Bereich. -1 = die des Themas |
Auf einem Listeneintrag — n_pbt_statusbar_menu_item #
Erhalten über of_menu_item(/*keys*/ "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 |
Die Eigenschaften, die jedes Item-Handle erbt — is_tooltip, is_super_tooltip_title, is_super_tooltip_text, is_super_tooltip_image, il_accent, il_back_color, il_text_color, il_back_color_hover, il_text_color_hover — sind auf einem Eintrag wirkungslos: die Liste ist ein natives Menü, das weder einen Tooltip noch die Farben eines Eintrags zeigt. Sie werden ignoriert und lesen sich leer (-1 für eine Farbe). Eine Position in einer Liste zählt Einträge: ein Trenner ist keiner, und of_count("enc"), of_keys_at("enc", n), of_has("enc/utf8") durchlaufen die Einträge eines Bereichs. Ein Schlüssel, der mit __ beginnt, ist der Komponente vorbehalten.
// The menu of the encoding panel, entry by entry
uo_status.of_add_menu_item(/*keys*/ "enc/utf8", /*label*/ "UTF-8")
uo_status.of_add_menu_item(/*keys*/ "enc/ansi", /*label*/ "ANSI")
uo_status.of_menu_item(/*keys*/ "enc/utf8").ib_checked = true // the current value
uo_status.of_menu_item(/*keys*/ "enc/ansi").ib_enabled = false // not available here
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:
// The panel takes the colors of a warning
uo_status.of_panel(/*key*/ "state").is_state = n_pbt_statusbar_panel.STATE_WARNING
Events #
| Event | Ausgelöst wenn |
|---|---|
ue_panel_clicked (string as_key) | Ein anklickbarer Bereich (ib_clickable) wird angeklickt |
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. Nie bei einem Bereich mit Auswahlliste: sein erster Klick hat die Liste geöffnet |
ue_panel_rclicked (string as_key, long al_x, long al_y) | Ein Bereich mit Schlüssel erhielt einen Rechtsklick — anklickbar oder nicht (ein Kontextmenü ist keine Aktivierung), nie wenn er deaktiviert ist. Ein Ereignis pro Rechtsklick. al_x und al_y sind Bildschirm-Pixel ; für ein PowerBuilder-Menü PopMenu(PointerX(), PointerY()) Ihres Fensters. Über die Tastatur löst die Menü-Taste oder Umschalt+F10 auf dem fokussierten Bereich es ebenfalls aus, an der Ecke unten links des Bereichs |
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 — "enc/utf8". Per Tastatur öffnen Eingabe, Leertaste, Pfeil nach oben oder unten die Liste. Ein Bereich, der entfernt, deaktiviert oder ausgeblendet wird, während seine Liste offen ist, schließt sie, und nichts wird ausgelöst |
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 |
| Nach oben / Nach unten | Auf einem Bereich mit Dropdown-Liste: öffnen sie, oberhalb des Bereichs |
| Menü-Taste oder Umschalt+F10 | ue_panel_rclicked des fokussierten Bereichs, an seiner Ecke unten links |
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. Ein ausgegrauter anklickbarer Bereich zeigt weiterhin seinen Tooltip — den, der sagt, warum er ausgegraut ist — und ein Bereich mit Liste sagt, ob seine Liste offen ist.
Ein Bildschirmleser hört die Meldungen von of_flash_panel, ohne dass sich der Fokus bewegt: dafür ist eine Statusleiste da (ein höflicher Live-Bereich). Die anderen Änderungen — ein neuer Text, ein neuer Zustand — werden nur mit ib_announce = true vorgelesen; sonst würde eine sekündlich tickende Uhr den ganzen Tag reden.
Der Fokus übersteht den Neuaufbau der Leiste: ein hinzugefügter, entfernter, ausgeblendeter oder ausgegrauter Bereich baut sie neu auf, und der Fokus kehrt zum selben Bereich zurück (zum nächsten, wenn er ihn nicht mehr nehmen kann). Ein Text, ein Zustand oder ein Fortschritt ändert sich an Ort und Stelle, ohne Neuaufbau — eine sekündlich tickende Uhr stiehlt nie den Fokus.
Beispiele #
Feste und automatische Breiten #
// Breite 0 : der Bereich nimmt genau den Platz seines Textes ein
uo_status.of_add_panel(/*key*/ "", /*text*/ "An den Inhalt angepasster Bereich", /*icon_file*/ "", /*align*/ uo_status.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_status.of_add_panel(/*key*/ "pos", /*text*/ "Zeile 1, Sp. 1", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 150)
// Ein Bereich, der ans entgegengesetzte Ende geschoben wird
uo_status.of_add_panel(/*key*/ "clock", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 140)
Symbole und anklickbare Bereiche #
// Ein Schluessel macht den Bereich adressierbar ; ib_clickable macht ihn anklickbar
uo_status.of_add_panel(/*key*/ "save", /*text*/ "Gespeichert", /*icon_file*/ "mono:img\save.svg", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
uo_status.of_add_sep() // Trennlinie zwischen zwei Gruppen von Bereichen
uo_status.of_add_panel(/*key*/ "conn", /*text*/ "Verbunden", /*icon_file*/ "mono:img\plug.svg", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
uo_status.of_add_panel(/*key*/ "user", /*text*/ "Alex Martin", /*icon_file*/ "mono:img\user.svg", /*align*/ uo_status.ALIGN_END, /*width*/ 160)
// Nur diese beiden reagieren auf einen Klick (ue_panel_clicked)
uo_status.of_panel(/*key*/ "conn").ib_clickable = true
uo_status.of_panel(/*key*/ "user").ib_clickable = true
// Event ue_panel_clicked von uo_status
choose case as_key
case "conn" ; open(w_connection_settings)
case "user" ; open(w_profile)
end choose
Rich-Text in einem Bereich #
Die Bereiche akzeptieren die Rich-Text-Auszeichnung: Stile, Farben und kleine Bilder direkt im Text.
// Eine Begruessung links
uo_status.of_add_panel(/*key*/ "", /*text*/ "Willkommen [b]bei[/b] [accent]PBToolboxAI[/accent]", &
/*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 0)
// Der Verbindungsstatus rechts
uo_status.of_add_panel(/*key*/ "", /*text*/ "[green]Online[/green] [picture=mono:img\plug.svg,14,14]", &
/*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 0)
// Lokale Variablen
long ll_changed
// Rich-Text gilt auch fuer Aktualisierungen
ll_changed = dw_list.ModifiedCount()
uo_status.of_panel(/*key*/ "state").is_text = "[b]" + String(ll_changed) + "[/b] records changed"
Einen langen Vorgang verfolgen #
// Local variables
n_pbt_statusbar_panel lnv_import
// Der Import-Bereich, dann sein Handle, um ihm zu folgen
uo_status.of_add_panel(/*key*/ "import", /*text*/ "Import", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ 220)
lnv_import = uo_status.of_panel(/*key*/ "import")
// Lokale Variablen
long ll_percent
// In der Verarbeitungsschleife : der Mini-Balken folgt dem Fortschritt
for ll_percent = 0 to 100 step 25
lnv_import.ii_progress = ll_percent
lnv_import.is_text = "Import " + String(ll_percent) + " %"
next
// Am Ende : den Mini-Balken ausblenden und das Ergebnis melden
lnv_import.ii_progress = -1 // negativer Wert = Balken ausgeblendet
lnv_import.is_text = "Import abgeschlossen"
lnv_import.is_state = lnv_import.STATE_SUCCESS
Einen dezenten Hinweis melden #
// Local variables
n_pbt_statusbar_panel lnv_panel
// Der Bereich der Verbindung
lnv_panel = uo_status.of_panel(/*key*/ "conn")
// Offline : der Bereich zeigt einen Fehler ; verbunden : er sieht wieder normal aus
if not ib_connected then
lnv_panel.is_text = "Offline"
lnv_panel.is_state = lnv_panel.STATE_ERROR
else
lnv_panel.is_text = "Verbunden"
lnv_panel.is_state = lnv_panel.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_status.of_panel(/*key*/ "user").ib_visible = ib_user_signed_in
// Ihn ausgrauen, wenn die zugehoerige Aktion keinen Sinn ergibt
uo_status.of_panel(/*key*/ "save").ib_enabled = ib_document_open
// Neu anordnen : den Zustandsbereich an den Anfang stellen (Positionen ab 1 gezaehlt)
uo_status.of_move_panel(/*key*/ "state", /*index*/ 1)
// Einen ueberfluessig gewordenen Bereich entfernen
uo_status.of_remove_panel(/*key*/ "import")
Der Größenänderungsgriff #
// Am Eckgriff ziehen aendert die Groesse des Fensters, das die Leiste traegt (ausgeblendet, solange es maximiert ist)
uo_status.ib_show_resize_grip = true
Ein Bereich, der den freien Platz nimmt #
Wie der Bereich « Bereit » jeder Windows-Statusleiste: er wächst mit dem Fenster, schiebt die Endbereiche ans Ende, und sein Text wird als erster gekürzt, wenn der Platz knapp wird.
// Eine Breite von -1 : der Bereich nimmt den ganzen freien Platz
uo_status.of_add_panel(/*key*/ "state", /*text*/ "Ready", /*icon_file*/ "", /*align*/ uo_status.ALIGN_START, /*width*/ -1)
uo_status.of_add_panel(/*key*/ "clock", /*text*/ "12:00", /*icon_file*/ "", /*align*/ uo_status.ALIGN_END, /*width*/ 140)
// Dasselbe auf einem schon vorhandenen Bereich
uo_status.of_panel(/*key*/ "state").ib_spring = true
Die Leiste an den unteren Fensterrand setzen #
of_dock_bottom setzt sie über die ganze Breite an den unteren Rand dessen, was sie trägt: ein Aufruf im resize-Event genügt. In einem MDI-Rahmen teilen sich die Blätter, was darüber bleibt.
// resize-Event des Fensters : die Leiste folgt dem unteren Rand
uo_status.of_dock_bottom()
// resize-Event eines MDI-Rahmens : die Leiste unten, die Blaetter darueber
uo_status.of_dock_bottom()
mdi_1.Resize(WorkSpaceWidth(), WorkSpaceHeight() - uo_status.Height)
Die MicroHelp übernehmen #
In einem MDI-Rahmen mit MicroHelp schreibt PowerBuilder die Hilfe des Menüeintrags unter dem Zeiger, und SetMicroHelp schreibt Ihre. Die Leiste übernimmt diese Rolle: nennen Sie einmal den Bereich, der die Hilfe zeigt (is_help_panel), und schreiben Sie dann is_help dort, wo Sie SetMicroHelp aufriefen. Die Hilfe steht über dem Text des Bereichs, und "" gibt ihm den Text zurück.
// Einmal : der Bereich, der die Hilfe zeigt (meist der erste)
uo_status.is_help_panel = "state"
// Wo Sie SetMicroHelp aufriefen : die Hilfe steht ueber Ready
uo_status.is_help = "Saving the order..."
// "" gibt dem Bereich seinen eigenen Text zurueck
uo_status.is_help = ""
// ue_item_hover-Event einer Menueleiste (uo_menu) : die Hilfe des Eintrags unter dem Zeiger
uo_status.is_help = this.of_item(/*keys*/ as_keys).is_tooltip
// getfocus-Event eines Feldes (sle_name) : sein Tag ist seine Hilfe
uo_status.is_help = sle_name.Tag
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.
- Machen Sie den ersten Bereich zu einer Feder (
ib_springoder eine Breite von-1): er nimmt den freien Platz, und sein Text wird als erster gekürzt. - Ein Bereich ist standardmäßig reglos: verlangen Sie den Klick mit
ib_clickableund lassen Sie Bereiche, die nur anzeigen, ohne Reaktion. - Reservieren Sie das Ende der Leiste (
ALIGN_END) für stabile Informationen (Uhrzeit, Benutzer, Verbindung) und den Anfang (ALIGN_START) für den aktuellen Kontext; bei Leserichtung von rechts nach links tauschen beide Seiten von selbst. - 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 |
is_accessible_name · is_accessible_description | Name und Beschreibung, die ein Bildschirmleser sagt | 3.4 Optionale Eigenschaften und Events |
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.