tab — u_pbt_tab #
← Komponentenreferenz · Inhalt des Handbuchs
Moderne Registerkarten, die echte PowerBuilder-Steuerelemente hosten: verschiebbare Registerleiste, Symbole je Registerkarte, schließbare Registerkarten, Umsortieren mit der Maus.
▶ Live ansehen — Demoanwendung, Kachel Tab: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.
Auf einen Blick #
| Userobject | u_pbt_tab |
| Item-Klasse | n_pbt_tab_page (eine Seite = eine Registerkarte) |
| Wofür | Eine PowerBuilder-tab durch eine gestaltete Leiste ersetzen und dabei Ihre vorhandenen Masken als Seiten beibehalten |
| Opt-in-Optionen | ib_reorderable |
Der entscheidende Punkt: Eine Seite ist kein HTML-Entwurf, sondern ein PowerBuilder-dragobject — ein Userobject, eine DataWindow, eine Gruppe von Steuerelementen oder sogar eine weitere PBToolboxAI-Komponente. Die Komponente übernimmt das Positionieren, das Anpassen der Größe sowie das Ein- und Ausblenden beim Wechsel der Registerkarte. Siehe Echte PowerBuilder-Steuerelemente hosten.
Schnellstart #
// open-Event des Fensters : jede Seite ist ein PB-Steuerelement, das bereits auf dem Fenster liegt
uo_onglets.of_add_page("clients", "Kunden", uo_page_clients)
uo_onglets.of_add_page("factures", "Rechnungen", uo_page_factures, /*schliessbar*/ true)
// Ein Symbol je Registerkarte, am Handle der Seite gesetzt
uo_onglets.of_page("clients").is_icon = "mono:img\clients.svg"
uo_onglets.of_page("factures").is_icon = "mono:img\invoice.svg"
uo_onglets.of_select_page("clients")
// Event ue_selection_changed von uo_onglets : (string as_from_key, string as_key)
of_charger_page(as_key)
Eigenschaften #
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_position | string | "top" | Platzierung der Leiste: top, bottom (waagerechte Leiste), start, end (senkrechte Leiste). Konstanten POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END sind logisch und folgen der Schreibrichtung |
is_overflow_mode | string | "menu" | Was eine für ihre Registerkarten zu kleine Leiste tut. menu (Standard) hält jede Registerkarte lesbar: Was nicht mehr hineinpasst, verlässt die Leiste, und die Schaltfläche ··· listet alle auf, wobei die aktive stets sichtbar bleibt. compact behält alle in der Leiste und lässt sie schrumpfen, bis auf den Platz, den ein abgeschnittener Text braucht. Konstanten OVERFLOW_MENU, OVERFLOW_COMPACT |
ib_reorderable | boolean | false | Opt-in: Der Benutzer kann die Registerkarten umsortieren, indem er ihre Kopfzeile mit der Maus zieht (löst ue_tab_reordered aus) |
ib_veto_selection | boolean | true | Nachfragen, bevor die aktive Registerkarte wechselt (löst ue_selection_changing aus, das ablehnen kann). Standardmäßig aktiv: Wird nichts geskriptet, ist der Wechsel immer erlaubt. Auf false setzen, um den Hin- und Rückweg zu PowerBuilder (~35 ms) dort zu sparen, wo er auffiele |
ib_veto_close | boolean | true | Nachfragen, bevor eine schließbare Registerkarte geschlossen wird (löst ue_tab_closing aus, das ablehnen kann). Standardmäßig aktiv, dieselbe Regel |
ib_context_menu | boolean | true | Integriertes Kontextmenü auf einer Registerkarten-Kopfzeile: Schließen, Andere schließen, Rechts davon schließen, Alle schließen, ausgegraut, wenn sie kein Ziel haben. Standardmäßig aktiv. Der Rechtsklick wählt zuerst die Registerkarte aus: Lehnt die Anwendung den Wechsel ab, öffnet sich kein Menü. Jedes Schließen läuft über ue_tab_closing, eine Frage pro Seite: die Seite mit ungespeicherter Arbeit lehnt allein ab und bleibt offen, während ihre Nachbarn gehen. Auf false, um Ihr eigenes Menü aus ue_rclicked anzuzeigen |
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 einer Seite — n_pbt_tab_page #
Über of_page(id) bezogen, lassen sie sich im laufenden Betrieb ändern, ohne die Leiste neu aufzubauen.
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_title | string | "" | Beschriftung der Registerkarte. Akzeptiert die Rich-Text-Auszeichnung |
is_icon | string | "" | Symbol der Registerkarte (zulässige Formen: Pfad, mono:, tint:, DLL-Ressource). Leer = kein Symbol |
ib_enabled | boolean | true | false blendet die Registerkarte grau aus und verhindert ihre Auswahl durch den Benutzer |
ib_visible | boolean | true | false blendet die Registerkarte aus, ohne die Seite zu entfernen; wird die aktive Registerkarte ausgeblendet, wird eine benachbarte aktiviert |
ib_closable | boolean | false | Schliesskreuz auf dieser Registerkarte. Beim Hinzufuegen selten bekannt: Es wird true, sobald das enthaltene Dokument gespeichert ist, und false, solange darin ein Vorgang laeuft |
is_shortcut | string | "" | Tastenkombination, die diese Registerkarte aktiviert: "Ctrl+2", "Alt+F", "F6"… Sie antwortet, wo immer der Benutzer im Fenster ist, die eingebettete Seite eingeschlossen — die Kombination hält die DLL, nicht die Registerleiste. So auszuwählen ist ein Klick: ue_selection_changing wird gefragt, ue_selection_changed folgt. "" entfernt sie |
is_tooltip | string | "" | Einfacher Tooltip beim Überfahren des Items |
is_super_tooltip_title | string | "" | Titel des erweiterten Item-Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Item-Tooltips (Rich-Markup zulässig) |
is_super_tooltip_image | string | "" | Bild des erweiterten Item-Tooltips |
Methoden #
| Methode | Zweck |
|---|---|
of_add_page (string as_key, string as_title, dragobject ado_page) | Fügt eine nicht schließbare Registerkarte ohne Symbol hinzu und hostet das Steuerelement. 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_page (string as_key, string as_title, dragobject ado_page, boolean ab_closable) | Dasselbe, mit Schließkreuz, wenn ab_closable. 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_page (string as_key, string as_title, dragobject ado_page, boolean ab_closable, string as_icon) | Dasselbe, mit dem Symbol im selben Aufruf gesetzt (die Registerkarte erscheint von Anfang an vollständig). 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_page (string as_key, string as_title, dragobject ado_page, integer ai_index) | Fügt die Seite hinzu und verschiebt sie anschließend an die Position ai_index (1 = die erste). Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_insert_page (string as_key, string as_title, dragobject ado_page, boolean ab_closable, string as_icon, integer ai_index) | Ebenso, mit dem, was of_add_page sagt: ob der Tab schließbar ist, und sein Symbol. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_move_page (string as_key, integer ai_index) | Verschiebt eine vorhandene Registerkarte; ihre gehostete Seite und die Auswahl bleiben erhalten. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist |
of_select_page (string as_key) | Aktiviert eine Registerkarte — genau gleichwertig zu einem Klick des Benutzers (durchläuft ue_selection_changing, dann ue_selection_changed). 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_page (string as_key) | Entfernt die Registerkarte und gibt das Steuerelement an sein ursprüngliches Fenster zurück, ausgeblendet. Das Steuerelement bleibt nutzbar und kann anderswo gehostet werden. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist |
of_selected_key ( ) | Bezeichner der aktiven Registerkarte, "", wenn keine aktiv ist |
of_get_layout ( ) | Liest die aktuelle Anordnung als JSON zurück: die Reihenfolge der Registerkarten und deren Sichtbarkeit. Speichern (Datei, Datenbank, Registry) und beim nächsten Start mit of_set_layout zurückgeben. Dasselbe Paar trägt auf jeder umsortierbaren Komponente dieselben Namen |
of_set_layout (string as_layout_json) | Stellt eine mit of_get_layout gelesene oder über ue_layout_changed empfangene Anordnung wieder her. Was die Anordnung nicht nennt, behält seinen Platz am Ende: Eine gestern gespeicherte Anordnung darf seither Hinzugefügtes nicht verschwinden lassen. Das Anwenden löst kein Event aus — Sie haben sie geliefert. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt ist |
of_page (string as_key) | n_pbt_tab_page-Handle der Seite (beim ersten Zugriff erzeugt) |
of_refresh_page (string as_key) | Frischt die Darstellung einer außerhalb des Bildschirms aufgebauten Seite auf, ohne Flackern. Liefert 0, -5 wenn der Schlüssel kein Panel bezeichnet, -2 wenn die Komponente nicht erzeugt ist |
of_relayout ( ) | Veröffentlicht den Seitenbereich erneut, damit das gehostete Steuerelement neu positioniert wird (nützlich nach einer verzögerten Anzeige). Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_preload_icons (string as_icons[]) | Wärmt beim Start einen Satz Symbole vor: Eine später geöffnete Registerkarte zeigt ihr Symbol sofort. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist |
of_reset ( ) | Leert die Leiste: Jede gehostete Seite wird an ihr ursprüngliches Fenster zurückgegeben, danach kehrt die Komponente in ihren Neuzustand 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 |
of_add_pagegibt einen negativen Code zurück, wenn der Bezeichner leer ist, bereits verwendet wird oder wenn das übergebene Steuerelement ungültig ist.
Wenn zu viele Registerkarten offen sind — sie schrumpfen, um in das Band zu passen, aber nie unter eine lesbare Breite: Symbol und Schließkreuz beanspruchen ihren Platz zusätzlich zum Titel, nie auf dessen Kosten. Was nicht mehr hineinpasst, wird aus dem Band genommen, und an dessen Ende erscheint eine Schaltfläche ···: Sie öffnet die Liste aller sichtbaren Registerkarten, die aktive angehakt, und die Auswahl wechselt dorthin. Die aktive Registerkarte bleibt immer sichtbar. Das Band scrollt nicht — diese Schaltfläche ist der Weg zu den Registerkarten außerhalb des Rahmens. Nichts zu programmieren, das Verhalten ist automatisch.
Events #
| Event | Ausgelöst wenn |
|---|---|
ue_selection_changed (string as_from_key, string as_key) | Die aktive Registerkarte hat gewechselt — durch Klick oder über of_select_page. Dieselben Argumente wie ue_selection_changing: Frage und Ergebnis lesen sich gleich, und as_from_key ist die verlassene Seite |
ue_tab_closed (string as_key) | Der Benutzer klickt auf das Kreuz einer schließbaren Registerkarte. Die Registerkarte ist bereits entfernt und die Seite an ihr Fenster zurückgegeben |
ue_tab_reordered (string as_key, integer ai_index) | Der Benutzer hat das Ziehen einer Kopfzeile beendet. ai_index ist die neue Position, beginnend bei 1, wie of_move_page |
ue_layout_changed (string as_layout_json) | Die Anordnung hat sich geändert — der Benutzer hat etwas umsortiert, oder Ihr eigener Code. Trägt die gesamte Anordnung, nicht nur das Verschobene: Das Speichern ist eine einzige Zuweisung |
ue_selection_changing (string as_from_key, string as_key) → boolean | Abbrechbar, wird vor dem Wechsel der aktiven Registerkarte gestellt. Standardmäßig ausgelöst; ib_veto_selection = false entfernt sie. Geben Sie false zurück, um den Benutzer auf seiner Seite zu halten |
ue_tab_closing (string as_key) → boolean | Abbrechbar, wird vor dem Schließen einer schließbaren Registerkarte gestellt. Standardmäßig ausgelöst; ib_veto_close = false entfernt sie. Benannt als Paar zu ue_tab_closed: closing / closed. Geben Sie false zurück, um die Registerkarte (und ihre gehostete Seite) offen zu halten |
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) |
Beispiele #
Ein Ordner mit fachlichen Seiten #
// open-Event : die Seiten-Userobjects liegen bereits auf dem Fenster
uo_onglets.of_set_redraw(false)
uo_onglets.of_add_page(/*key*/ "identite", /*titel*/ "Identität", /*seite*/ uo_identite)
uo_onglets.of_add_page(/*key*/ "adresses", /*titel*/ "Adressen", /*seite*/ uo_adresses)
uo_onglets.of_add_page(/*key*/ "compta", /*titel*/ "Buchhaltung", /*seite*/ uo_compta)
uo_onglets.of_page("identite").is_icon = "mono:img\user.svg"
uo_onglets.of_page("adresses").is_icon = "mono:img\map.svg"
uo_onglets.of_page("compta").is_icon = "mono:img\euro.svg"
uo_onglets.of_set_redraw(true)
uo_onglets.of_select_page("identite")
Schließbare Dokumente, bei Bedarf geöffnet #
// Ein Dokument in einer neuen schliessbaren Registerkarte oeffnen
uo_onglets.of_add_page(/*key*/ ls_cle, /*titel*/ ls_libelle, /*seite*/ uo_editeur, &
/*schliessbar*/ true, /*symbol*/ "mono:img\doc.svg")
uo_onglets.of_select_page(ls_cle)
// Event ue_tab_closed von uo_onglets : (string as_key)
// Die Registerkarte ist bereits entfernt ; es bleibt nur, Ihre Fachdaten freizugeben.
of_liberer_document(as_key)
Umsortieren mit der Maus #
uo_onglets.ib_reorderable = true
// Event ue_tab_reordered von uo_onglets : (string as_key, integer ai_index)
// ai_index = neue Position, beginnend bei 1 (wie of_move_page) : wir speichern die gewaehlte Reihenfolge.
of_enregistrer_ordre(as_key, ai_index)
Senkrechte Leiste #
// Registerleiste an der linken Seite, nuetzlich bei langen Beschriftungen
uo_onglets.is_position = uo_onglets.POSITION_START
Eine Registerkarte je nach Rechten grau ausblenden oder verbergen #
// Der Weg fuehrt immer ueber das Handle der Seite
uo_onglets.of_page("compta").ib_enabled = of_a_le_droit("compta")
uo_onglets.of_page("audit").ib_visible = gb_mode_expert
Auf die Auswahl reagieren #
// Event ue_selection_changed von uo_onglets : (string as_from_key, string as_key)
choose case as_key
case "identite" ; uo_identite.of_rafraichir()
case "adresses" ; uo_adresses.of_rafraichir()
case "compta" ; uo_compta.of_rafraichir()
end choose
Einen Registerkartenwechsel oder ein Schließen ablehnen #
// Beide Fragen werden STANDARDMAESSIG gestellt: nichts zu aktivieren. Diese
// Zeilen tun das Gegenteil und entfernen sie, wo die Abwaegung nichts bringt.
uo_onglets.ib_veto_selection = false
uo_onglets.ib_veto_close = false
// Event ue_selection_changing von uo_onglets : (string as_from_key, string as_key)
// FALSE zurueckzugeben haelt den Benutzer auf der Seite, die er verlaesst.
if of_page_modifiee(as_from_key) then
if MessageBox("Änderungen", "Ohne Speichern verlassen?", Question!, YesNo!) = 2 then
return false
end if
end if
return true
// Event ue_tab_closing von uo_onglets : (string as_key)
// FALSE zurueckzugeben haelt die Registerkarte und ihre gehostete Seite offen.
return not of_page_modifiee(as_key)
Wieder mit einer leeren Leiste beginnen #
// of_reset gibt JEDE gehostete Seite an ihr urspruengliches Fenster zurueck, bevor geleert wird
uo_onglets.of_reset()
uo_onglets.of_add_page("accueil", "Startseite", uo_accueil)
Best Practices #
- Die gehosteten Steuerelemente müssen vor dem Aufruf vorhanden sein: Legen Sie sie zur Entwurfszeit auf das Fenster, die Komponente kümmert sich um das Ausblenden und das Neupositionieren.
- Laden Sie die Seiten einmal im
open-Event und steuern Sie danach nur noch die Auswahl: Das ist schneller, als fortlaufend Seiten hinzuzufügen und zu entfernen. - Rufen Sie
of_preload_iconsbeim Start auf, wenn Ihre Registerkarten Symbole tragen: Andernfalls zeigt sich beim ersten Öffnen einer ausgeblendeten Registerkarte eine kurze Verzögerung, bevor das Symbol erscheint. - Beide Fragen werden standardmäßig gestellt: Ein leer gelassenes Ereignis erlaubt die Aktion immer, Sie müssen nichts tun. Schalten Sie sie mit
ib_veto_selection/ib_veto_closeauffalseab, wenn die Abwägung Ihnen nichts bringt, denn jede Frage kostet einen Hin- und Rückweg zu PowerBuilder. - Ein gehostetes Steuerelement ist ein natives Fenster: Es zeichnet sich über der Web-Ebene. Kein visueller Effekt der Komponente kann darüber hinweggehen.
- Vergessen Sie
of_reset()nicht, bevor Sie eine Leiste neu aufbauen: Ohne diesen Aufruf schlägt die Wiederverwendung eines Seitenbezeichners fehl und die vorherigen Steuerelemente bleiben sichtbar. - Für Bereiche, die sich in der Größe ändern und abdocken lassen, statt sich gegenseitig ausschließender Seiten, greifen Sie besser zu dockcontainer.
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.