PBToolboxAI v4 ← Site

ribbon — u_pbt_ribbon #

← Komponentenreferenz · Inhalt des Handbuchs

Menüband im Office-Stil: Registerkarten, Gruppen, zwölf Typen von Rich-Steuerelementen, Anwendungsmenü, Symbolleiste für den Schnellzugriff, kontextbezogene Registerkarten mit Banner und Keytips.

▶ Live ansehen — Demoanwendung, Kachel Ribbon: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.


Auf einen Blick #

Userobjectu_pbt_ribbon
Item-Klassenn_pbt_ribbon_tab (Registerkarte), n_pbt_ribbon_group (Gruppe), n_pbt_ribbon_item (Steuerelement), n_pbt_ribbon_menu_item (Menüeintrag), n_pbt_ribbon_ctx_group (Gruppe kontextbezogener Registerkarten)
WofürEine Menüleiste samt ihren Symbolleisten durch eine moderne, gut lesbare und klar gegliederte Befehlsoberfläche ersetzen
HöheIntrinsisch: Das Menüband richtet sich immer nach seinem Inhalt, es ist nichts zu aktivieren — siehe Automatische Höhe
Grenze im DemomodusHöchstens 2 Registerkarten — siehe Der Demomodus

Die goldene Regel: Alles läuft über den Pfad #

Das Menüband ist eine vierstufige Hierarchie: Registerkarte → Gruppe → Steuerelement → Menüeintrag. Sie müssen keine globalen Bezeichner verwalten: Jedes Objekt wird über den Pfad erreicht, der zu ihm führt, und jede Hinzufügung erfolgt auf dem Handle des übergeordneten Elements.

// Ein Steuerelement lesen oder steuern : immer der vollstaendige Pfad
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste").ib_enabled = false

Zwei praktische und angenehme Folgen: Zwei verschiedene Gruppen können denselben Bezeichner für ein Steuerelement verwenden, ohne sich in die Quere zu kommen, und die Events liefern Ihnen den vollständigen Pfad — Sie wissen immer, woher der Klick kommt.


Schnellstart #

// open-Event des Fensters

// Ein Register
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Start")

// Eine Gruppe: eine grosse Schaltflaeche und zwei kleine
uo_ribbon.of_add_group(/*keys*/ "home/clipboard", /*title*/ "Zwischenablage")
uo_ribbon.of_add_big_button(/*keys*/ "home/clipboard/paste", /*label*/ "Einfügen", /*image*/ "mono:img\paste.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/cut", /*label*/ "Ausschneiden", /*image*/ "mono:img\cut.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/copy", /*label*/ "Kopieren", /*image*/ "mono:img\copy.svg")

// Das Register anzeigen
uo_ribbon.of_select_tab(/*key*/ "home")
// Event ue_clicked von uo_ribbon : (string as_keys)
choose case as_keys
    case "home/clipboard/paste" ; of_paste()
    case "home/clipboard/cut" ; of_cut()
    case "home/clipboard/copy" ; of_copy()
end choose

Eigenschaften #

EigenschaftTypStandardZweck
is_app_buttonstring""Beschriftung der Anwendungsschaltfläche oben links, die das Anwendungsmenü öffnet. Eine Umbenennung behält ihr Menü; eine leere Zeichenkette entfernt die Schaltfläche samt Menü. Die Einträge des Anwendungsmenüs setzen die Schaltfläche voraus
ib_minimizedbooleanfalsetrue klappt das Menüband auf seine bloßen Registerkartenköpfe ein; ein Klick auf eine Registerkarte klappt es vorübergehend auf. Vom Code gesetzt, löst es ue_minimized aus wie die Geste des Benutzers — nichts, wenn das Menüband schon in diesem Zustand ist; ue_size_changed meldet die neue Höhe
ib_veto_gallerybooleanfalseNachfragen, bevor eine Galeriekachel übernommen wird — durch den Benutzer oder durch of_select_gallery_item (löst ue_gallery_selection_changing aus, das ablehnen kann; ein abgelehntes of_select_gallery_item liefert -4). Standardmäßig inaktiv, wie jedes abbrechbare Ereignis: Jede Frage kostet einen Hin- und Rückweg zu PowerBuilder (~35 ms). Auf true setzen, wenn Ihre Anwendung antwortet
is_theme_stylestring""Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen
is_theme_modestring""Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der 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

Konstante — ACCENT_LIGHT (-1): als Farbe einer kontextbezogenen Registerkarte oder Gruppe zu übergeben, damit sie dem aufgehellten Akzent des Designs folgt statt einer festen Farbe.

Eigenschaften einer Registerkarte — n_pbt_ribbon_tab #

Über of_tab("tab") erhalten, lassen sie sich im laufenden Betrieb ändern.

EigenschaftTypStandardZweck
ib_visiblebooleantruefalse blendet die Registerkarte aus, ohne sie zu entfernen — genau das ist der Mechanismus der kontextbezogenen Registerkarten
is_titlestring""Titel der Registerkarte. Von of_add_tab gesetzt; hier geschrieben ändert er sich, gelesen sagt er, was sie zeigt
is_keytipstring""Zugriffstaste, die nach Drücken von Alt angezeigt wird ("S" für Start). Ein Buchstabe oder mehrere ("FP", wie in Office), nacheinander getippt; die Rücktaste nimmt den letzten zurück. Nur Buchstaben und Ziffern

Eigenschaften einer Gruppe — n_pbt_ribbon_group #

Über of_group("tab/group") erhalten.

EigenschaftTypStandardZweck
ib_visiblebooleantruefalse blendet die Gruppe und alle ihre Steuerelemente aus
is_titlestring""Beschriftung unter der Gruppe. Von of_add_group gesetzt; hier geschrieben ändert sie sich
ib_launcherbooleanfalseZeigt den kleinen Pfeil unten rechts in der Gruppe — den Dialogfeld-Starter (löst ue_launcher aus). Der Pfeil sitzt in der Titelleiste der Gruppe, und eine Gruppe, die das Menüband aus Platzmangel einklappen musste, behält ihn an derselben Stelle — er wandert zusätzlich in das Panel, das die eingeklappte Gruppe öffnet.

Moduskonstanten der Farbauswahl: COLORMODE_PALETTE (Farbfeldpalette, Standardmodus) und COLORMODE_OPEN (vollständige Palette mit Bestätigung).

Eigenschaften eines Steuerelements — n_pbt_ribbon_item #

Über of_item("tab/group/control") erhalten. Sie gelten für alle Typen von Steuerelementen; Eigenschaften, die für einen bestimmten Typ ohne Belang sind, werden schlicht ignoriert.

EigenschaftTypStandardZweck
is_labelstring""Beschriftung des Steuerelements. Zulässig ist Rich-Text-Auszeichnung
is_imagestring""Bild des Steuerelements (Schaltfläche, große Schaltfläche, geteilte Schaltfläche, Dropdown-Schaltfläche, Kontrollkästchen, Farbauswahl, Schaltfläche der Symbolleiste für den Schnellzugriff), mit denselben Präfixen wie beim Hinzufügen (mono:, tint:). "" entfernt es. Live gelesen
ib_enabledbooleantruefalse graut das Steuerelement aus und blockiert seine Auslösung
ib_checkedbooleanfalseGedrückter Zustand eines Umschalters oder angehakter Zustand eines Kontrollkästchens
ib_visiblebooleantruefalse blendet das Steuerelement aus; die Nachbarn rücken zusammen
is_textstring""In einem Kombinationsfeld eingegebener oder ausgewählter Text
id_valuedouble0Zahlenwert eines Drehfelds
id_mindouble0Nur Drehfeld: Untergrenze des Bereichs, jederzeit änderbar. Der Wert wird sofort und stillschweigend in den neuen Bereich zurückgeholt (kein ue_value_changed, wie bei id_value per Code). Bei jedem anderen Steuerelement ohne Wirkung und als 0 gelesen
id_maxdouble0Nur Drehfeld: Obergrenze des Bereichs, jederzeit änderbar; der Wert wird stillschweigend in den Bereich zurückgeholt, wie bei id_min. Bei jedem anderen Steuerelement ohne Wirkung und als 0 gelesen
id_stepdouble0Nur Drehfeld: Schrittweite der Pfeile und der Tasten Auf / Ab, jederzeit änderbar. Ein Schritt von 0 oder weniger wird ignoriert. Bei jedem anderen Steuerelement ohne Wirkung und als 0 gelesen
il_colorlong-1Aktuelle Farbe einer Farbauswahl
ii_visible_itemsinteger3Nur Katalog: Anzahl der Kacheln, die der eingeklappte Streifen auf einmal zeigt. Die übrigen bleiben über die Pfeile erreichbar oder im ausgeklappten Raster
is_keytipstring""Zugriffstaste des Steuerelements, angezeigt nach Alt und dem Buchstaben der Registerkarte. Ein Buchstabe oder mehrere ("FP", wie in Office), nacheinander getippt; die Rücktaste nimmt den letzten zurück. Nur Buchstaben und Ziffern. Ein Steuerelement einer eingeklappten Gruppe behält seine Taste: sie öffnet das Panel der Gruppe
is_tooltipstring""Einfacher Tooltip beim Überfahren des Items
is_super_tooltip_titlestring""Titel des erweiterten Item-Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Item-Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Item-Tooltips

Eigenschaften eines Menüeintrags — n_pbt_ribbon_menu_item #

Über of_menu_item("tab/group/control/entry") erhalten.

EigenschaftTypStandardZweck
is_imagestring""Bild des Menüeintrags. Eine leere Zeichenkette entfernt es
of_is_separator ( ) → boolean——Ist der Eintrag eine Trennlinie? Nur lesend: was ein Eintrag ist, wurde beim Hinzufügen entschieden
of_is_header ( ) → boolean——Ist der Eintrag eine nicht anklickbare Überschrift? Nur lesend, gleicher Grund
of_is_checkable ( ) → boolean——Trägt der Eintrag ein Häkchen? Nur lesend; ib_checked sagt, ob es gesetzt ist
ib_enabledbooleantruefalse graut den Eintrag aus
ib_visiblebooleantruefalse nimmt den Eintrag beim nächsten Öffnen aus dem Menü — Kaskade inbegriffen — ohne ihn zu entfernen
ib_checkedbooleanfalseHaken eines mit of_add_menu_check erzeugten Eintrags

Eigenschaften eines Eintrags des Anwendungsmenüs — n_pbt_ribbon_app_menu_item #

Erhalten über of_app_menu_item("recent/a.txt"). Sie ändern sich im laufenden Betrieb: das Menü übernimmt sie beim nächsten Öffnen.

EigenschaftTypStandardZweck
is_labelstring""Text des Eintrags
is_imagestring""Bild des Eintrags. Eine leere Zeichenkette entfernt es
ib_enabledbooleantruefalse graut den Eintrag aus: angezeigt, nie gewählt — Speichern, solange nichts zu speichern ist
ib_checkedbooleanfalseHäkchen vor dem Eintrag
ib_visiblebooleantruefalse nimmt den Eintrag beim nächsten Öffnen aus dem Menü — samt Untermenü — ohne ihn zu entfernen
of_is_separator ( ) → boolean——Ist der Eintrag eine Trennlinie? Nur lesbar
of_keys_at (long al_index) → string——Die Adresse des Eintrags an Position ai_index (ab 1) unter diesem — oder auf der ersten Ebene für of_app_menu_item("") —, "" darüber hinaus: die Adresse, die of_app_menu_item und of_remove_app_menu_item erwarten

Die zwölf Typen von Steuerelementen #

Alle werden an der Adresse einer Gruppe — "home/clipboard" — hinzugefügt und liefern 0 (-5 bei einem ungültigen Argument, -2 wenn die Komponente nicht erzeugt ist); ein Menü oder eine Liste wird anschließend an der Adresse des Steuerelements gefüllt.

Methode der GruppeErhaltenes SteuerelementEvent
of_add_big_button (string as_keys, string as_label, string as_image) → longGroße Schaltfläche über die volle Höhe, Symbol über der Beschriftung. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_clicked
of_add_big_split (string as_keys, string as_label, string as_image) → longGroße geteilte Schaltfläche: Der obere Teil handelt, der Pfeil öffnet das Menü. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_clicked · ue_menu_selected
of_add_big_dropdown (string as_keys, string as_label, string as_image) → longGroße Schaltfläche mit Dropdown-Menü. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_menu_selected
of_add_button (string as_keys, string as_label, string as_image) → longKleine Schaltfläche (in Spalten zu dritt gestapelt). Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_clicked
of_add_toggle (string as_keys, string as_label, string as_image) → longKleiner Umschalter, der gedrückt bleibt. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_toggled
of_add_dropdown (string as_keys, string as_label, string as_image) → longKleine Schaltfläche mit Dropdown-Menü. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_menu_selected
of_add_checkbox (string as_keys, string as_label) → longKontrollkästchen. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_toggled
of_add_separator (string as_keys) → longSenkrechter Trennstrich zwischen zwei Blöcken von Steuerelementen. 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_combo (string as_keys, integer ai_width_px, boolean ab_editable) → longKombinationsfeld, bearbeitbar oder nicht. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_combo_changed
of_add_spinner (string as_keys, integer ai_width_px, double ad_min, double ad_max, double ad_step, double ad_value) → longNumerisches Drehfeld mit Pfeilen. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_value_changed
of_add_colorpicker (string as_keys, string as_label, string as_image, long al_color) → longGeteilte Farbschaltfläche: Der Klick wendet erneut an, der Pfeil öffnet die Farbfeldpalette. Liefert 0 nach der Anwendung, -5 bei einem ungültigen Argument (leerer Schlüssel, falsche Adresse), -2 wenn die Komponente nicht erzeugt istue_clicked · ue_color_changed
of_add_gallery (string as_keys, integer ai_width_px, integer ai_tile_w, integer ai_tile_h) → longScrollbares Band aus bebilderten Kachelnue_gallery_selection_changed

of_add_colorpicker nimmt ein fünftes Argument as_mode entgegen: COLORMODE_PALETTE (Farbfeldpalette) oder COLORMODE_OPEN (vollständige Palette mit den Schaltflächen OK und Abbrechen).


Methoden #

Das Menüband aufbauen #

MethodeZweck
of_add_tab (string as_key, string as_title)Fügt eine Registerkarte hinzu und liefert 0 (-5 bei einem ungültigen Argument, -2 wenn die Komponente nicht erzeugt ist): Gruppen werden anschließend an ihrer Adresse hinzugefügt
of_insert_tab (string as_key, string as_title, integer ai_index)Fügt eine Registerkarte an der Position ein, die Sie wählen (1 = ganz vorne), statt am Ende, und liefert 0 (-5 bei einem ungültigen Argument, -2 wenn die Komponente nicht erzeugt ist) wie of_add_tab. Eine bereits vergebene Id wird abgelehnt
of_tab (string as_key)Handle einer vorhandenen Registerkarte (wird beim ersten Zugriff erzeugt)
of_add_group (string as_keys, string as_title)Fügt einer Registerkarte — "home/clipboard" — eine betitelte Gruppe hinzu und liefert 0 (-5 bei einem ungültigen Argument, -2 wenn die Komponente nicht erzeugt ist)
of_group (string as_keys)Handle einer vorhandenen Gruppe, über ihre Adresse
of_item (string as_keys)Handle eines vorhandenen Steuerelements, über seine Adresse — "home/clipboard/paste"
of_select_tab (string as_key)Aktiviert eine Registerkarte wie ein Klick darauf: ue_selection_changed folgt (direkt nach Ihrem Skript, aus der Ereigniswarteschlange; nichts, wenn die Registerkarte schon aktiv ist), und of_selected_key liest sie sofort zurück. Anders als ein Klick klappt sie ein eingeklapptes Menüband nicht auf. Liefert 0 nach der Anwendung, -5 für eine unbekannte oder ausgeblendete Registerkarte, -2 wenn die Komponente nicht erzeugt ist
of_selected_key ( )Schlüssel der aktiven Registerkarte, "", wenn keine aktiv ist. Live aus der Komponente gelesen: schon in ue_selection_changed oder direkt nach of_select_tab nennt er die neue Registerkarte
of_remove_group (string as_keys)Entfernt eine Gruppe und alle ihre Steuerelemente, über ihre Adresse; die Handles des Entfernten werden freigegeben. Liefert 0 nach der Anwendung, -5 wenn unter dieser Adresse keine Gruppe liegt, -2 wenn die Komponente nicht erzeugt ist
of_remove_item (string as_keys)Entfernt ein Steuerelement über seine Adresse (registerkarte/gruppe/steuerelement) oder eine Schaltfläche der Symbolleiste für den Schnellzugriff allein über ihren Schlüssel; ihr Handle wird freigegeben. Liefert 0 nach der Anwendung, -5 wenn unter dieser Adresse nichts dergleichen liegt, -2 wenn die Komponente nicht erzeugt ist
of_remove_tab (string as_key)Entfernt eine Registerkarte und ihren gesamten Inhalt; die Handles des Entfernten werden freigegeben. Liefert 0 nach der Anwendung, -5 wenn keine Registerkarte diesen Schlüssel trägt, -2 wenn die Komponente nicht erzeugt ist
of_clear ( )Leert das Menüband vollständig: Registerkarten, Gruppen, Steuerelemente, Symbolleiste für den Schnellzugriff, Anwendungsmenü. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist

Menüs und Listen füllen #

Alle diese Methoden werden auf der Komponente aufgerufen, mit der Adresse des Steuerelements (Registerkarte/Gruppe/Steuerelement) — der Eintrag, die Auswahl oder die Kachel als vierte Ebene.

MethodeZweck
of_add_menu_item (string as_keys, string as_label, string as_image)Eintrag des Menüs einer Dropdown- oder geteilten Schaltfläche: registerkarte/gruppe/steuerelement/eintrag, eine Ebene mehr pro Kaskade. Liefert 0 nach der Anwendung, -5 bei falscher Adresse, einem Elternteil, das weder Dropdown noch Eintrag ist, oder einen in diesem Menü bereits vergebenen Schlüssel, -2 wenn die Komponente nicht erzeugt ist
of_add_menu_check (string as_keys, string as_label) · (id, label, image)Anhakbarer Eintrag: Der Klick schaltet seinen Zustand um und meldet ihn in ue_menu_selected. 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_header (string as_keys, string as_label)Nicht anklickbare Titelzeile, um ein langes Menü zu gliedern. 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_keys)Trennstrich in einem Menü: as_keys nennt das Steuerelement für sein eigenes Menü oder einen Eintrag für die Kaskade darunter. 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 Menüeintrag samt Kaskade (registerkarte/gruppe/steuerelement/eintrag, tiefer für einen kaskadierten Eintrag); seine Handles werden freigegeben. Liefert 0 nach der Anwendung, -5 wenn unter dieser Adresse kein Eintrag liegt, -2 wenn die Komponente nicht erzeugt ist
of_clear_menu (string as_keys)Leert das Menü einer Dropdown- oder geteilten Schaltfläche (registerkarte/gruppe/steuerelement): eine Liste „Zuletzt verwendet“ wird Eintrag für Eintrag neu aufgebaut, ohne das Steuerelement neu anzulegen. Liefert 0 nach der Anwendung, -5 wenn die Adresse weder ein Dropdown noch eine geteilte Schaltfläche ist, -2 wenn die Komponente nicht erzeugt ist
of_menu_item (string as_keys)Handle eines Menüeintrags, um ihn im laufenden Betrieb auszugrauen oder anzuhaken
of_add_combo_item (string as_keys, string as_label)Fügt der Liste eines Kombinationsfelds eine Auswahl hinzu; eine Auswahl hat ihre Beschriftung als Schlüssel. Liefert 0 nach der Anwendung, -5 wenn die Adresse kein Kombinationsfeld ist, oder bei einer Beschriftung, die schon in der Liste steht, leer ist oder / oder einen senkrechten Strich enthält, -2 wenn die Komponente nicht erzeugt ist
of_remove_combo_item (string as_keys)Entfernt eine Auswahl eines Kombinationsfelds: registerkarte/gruppe/liste/beschriftung. Liefert 0 nach der Anwendung, -5 wenn das Feld diese Auswahl nicht hat, -2 wenn die Komponente nicht erzeugt ist
of_clear_combo (string as_keys)Leert die Liste eines Kombinationsfelds (registerkarte/gruppe/liste); sein Text bleibt. Liefert 0 nach der Anwendung, -5 wenn die Adresse kein Kombinationsfeld ist, -2 wenn die Komponente nicht erzeugt ist
of_add_gallery_item (string as_keys, string as_image, string as_label)Fügt einem Katalog eine Kachel hinzu (registerkarte/gruppe/katalog/kachel); ihre Beschriftung ist auch ihr Name für eine Sprachausgabe. Liefert 0 nach der Anwendung, -5 bei falscher Adresse, einer dritten Ebene, die kein Katalog ist, oder einer bereits vergebenen Kachel, -2 wenn die Komponente nicht erzeugt ist
of_remove_gallery_item (string as_keys)Entfernt eine Kachel eines Katalogs (registerkarte/gruppe/katalog/kachel). Geht die ausgewählte Kachel, ist nichts mehr ausgewählt. Liefert 0 nach der Anwendung, -5 wenn es diese Kachel nicht gibt, -2 wenn die Komponente nicht erzeugt ist
of_select_gallery_item (string as_keys)Wählt eine Katalogkachel per Programm aus, über ihre vierstufige Adresse, wie eine Auswahl: bei aktivem ib_veto_gallery wird zuerst ue_gallery_selection_changing gefragt; dann folgt ue_gallery_selection_changed. Ist die Kachel schon ausgewählt, wird nichts gefragt und nichts ausgelöst. Liefert 0 nach der Anwendung (oder wenn schon ausgewählt), -4 wenn Ihr ue_gallery_selection_changing abgelehnt hat (die Kachel bleibt), -5 für eine andere Tiefe oder eine Kachel, die of_add_gallery_item nie hinzugefügt hat, -2 wenn die Komponente nicht erzeugt ist
of_open (string as_keys)Öffnet per Programm das Menü, die Liste oder die Farbpalette des Steuerelements an dieser Adresse (registerkarte/gruppe/steuerelement); die Adresse einer Gruppe (registerkarte/gruppe) öffnet ihr Panel, wenn ein zu schmales Fenster sie eingeklappt hat. Liefert 0 nach der Anwendung, -5 für eine Adresse, die weder ein Steuerelement noch eine Gruppe nennt (eine Schaltfläche der Symbolleiste für den Schnellzugriff hat kein Menü), -2 wenn die Komponente nicht erzeugt ist

Anwendungsmenü und Symbolleiste für den Schnellzugriff #

MethodeZweck
of_add_app_menu_item (string as_keys, string as_label, string as_image)Eintrag des Anwendungsmenüs (jenes, das die Schaltfläche is_app_button öffnet), über seine Adresse: recent an der Wurzel, recent/a.txt im Untermenü von recent. Liefert 0 nach der Anwendung, -5 bei einen ungültigen Schlüssel (leer, / oder senkrechter Strich in einer Ebene, beginnend mit __), einem bereits vergebenen Schlüssel, einem unbekannten Elterneintrag oder ohne Anwendungsschaltfläche, -2 wenn die Komponente nicht erzeugt ist
of_add_app_menu_separator (string as_keys)Trennlinie im Anwendungsmenü. as_keys ist ihre Adresse, wie die eines Eintrags: s1 an der Wurzel, saveas/s1 im Untermenü von saveas; eine leere Adresse erhält einen eigenen Schlüssel. Liefert 0 nach der Anwendung, -5 bei einem bereits vergebenen Schlüssel, einem unbekannten Elterneintrag oder ohne Anwendungsschaltfläche, -2 wenn die Komponente nicht erzeugt ist
of_remove_app_menu_item (string as_keys)Entfernt einen Eintrag (oder eine Trennlinie) des Anwendungsmenüs über seine Adresse, samt Untermenü; seine Handles werden freigegeben. Liefert 0 nach der Anwendung, -5 wenn es diesen Eintrag nicht gibt, -2 wenn die Komponente nicht erzeugt ist
of_app_menu_item (string as_keys)Handle eines Eintrags des Anwendungsmenüs (save, recent/a.txt), um ihn im laufenden Betrieb auszugrauen, abzuhaken, auszublenden oder umzubenennen — siehe unten. of_app_menu_item("") steht für das Menü selbst: of_count und of_keys_at durchlaufen seine erste Ebene
of_add_qat (string as_key, string as_image, string as_tooltip)Schaltfläche der Symbolleiste für den Schnellzugriff, über den Registerkarten; ihr Tooltip ist auch ihr Name für eine Sprachausgabe. Liefert 0 nach der Anwendung, -5 bei einen ungültigen Schlüssel (leer, / oder senkrechter Strich in einer Ebene, beginnend mit __) oder einem Schlüssel, der schon in der Leiste steht, -2 wenn die Komponente nicht erzeugt ist
of_qat_item (string as_key)Handle einer Schnellzugriffsschaltfläche, um sie im laufenden Betrieb auszugrauen oder auszublenden

Kontextbezogene Registerkarten #

MethodeZweck
of_add_contextual_tab (string as_key, string as_title, long al_color)Einzelne kontextbezogene Registerkarte: ausgeblendet angelegt, mit einem farbigen Streifen markiert. Übergeben Sie ACCENT_LIGHT, um dem Akzent des Designs zu folgen. Liefert 0 nach der Anwendung, -5 bei einen ungültigen Schlüssel (leer, / oder senkrechter Strich in einer Ebene, beginnend mit __) oder einem bereits vergebenen Schlüssel, -2 wenn die Komponente nicht erzeugt ist
of_add_contextual_group (string as_key, string as_title) · (id, title, al_color)Gruppe kontextbezogener Registerkarten: ein farbiges Band mit Titel krönt ihre Registerkarten. Liefert 0 nach der Anwendung, -5 bei einen ungültigen Schlüssel (leer, / oder senkrechter Strich in einer Ebene, beginnend mit __) oder einem bereits vergebenen Schlüssel (ihre Farbe ändert sich über of_ctx_group(schlüssel).il_color), -2 wenn die Komponente nicht erzeugt ist
of_ctx_group (string as_key)Findet das Handle einer bereits erzeugten kontextbezogenen Gruppe über ihren Schlüssel — an ihm werden ihre Eigenschaften gesetzt
of_remove_contextual_group (string as_key)Entfernt eine Gruppe kontextbezogener Registerkarten und die Registerkarten, die sie krönt — sie gehören zu ihr; ihre Handles werden freigegeben. Liefert 0 nach der Anwendung, -5 wenn of_add_contextual_group diese Gruppe nie angelegt hat, -2 wenn die Komponente nicht erzeugt ist
of_add_contextual_tab (string as_key, string as_title, string as_group_key)Fügt eine Registerkarte unter einer kontextbezogenen Gruppe hinzu: ausgeblendet angelegt, vom farbigen Band der Gruppe gekrönt. Liefert 0 nach der Anwendung, -5 bei einem ungültigen oder bereits vergebenen Schlüssel oder einer Gruppe, die of_add_contextual_group nie angelegt hat, -2 wenn die Komponente nicht erzeugt ist
il_color (Eigenschaft)Auf einem Handle einer kontextbezogenen Gruppe: färbt das Banner im laufenden Betrieb um (ACCENT_LIGHT, um zum Akzent zurückzukehren)

Gemeinsame #

MethodeZweck
of_reset ( )Leert das Menüband und bringt es in seinen fabrikneuen Zustand zurück, Eigenschaften eingeschlossen. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_set_redraw (boolean)Fasst eine Salve von Änderungen zu einer einzigen Darstellung zusammen. 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 die ihren sofort an. 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

Events #

Alle Events der Steuerelemente tragen den vollständigen Pfad: Sie brauchen nie einen anwendungsweit eindeutigen Bezeichner.

EventAusgelöst wenn
ue_clicked (string as_keys)Der Benutzer klickt eine Schaltfläche, eine große Schaltfläche, den Hauptteil einer geteilten Schaltfläche oder eine Schaltfläche der Symbolleiste für den Schnellzugriff — im Menüband, im Panel einer eingeklappten Gruppe oder über ihre Zugriffstaste. as_keys ist die Adresse registerkarte/gruppe/steuerelement oder allein der Schlüssel einer Schnellzugriffsschaltfläche
ue_toggled (string as_keys, boolean ab_checked)Der Benutzer schaltet eine Umschaltfläche oder ein Kontrollkästchen um (im Menüband oder im Panel einer eingeklappten Gruppe); ab_checked trägt den neuen Zustand. ib_checked per Code zu schreiben löst nichts aus
ue_menu_selected (string as_keys, boolean ab_checked)Der Benutzer wählt einen Eintrag im Menü einer Dropdown- oder geteilten Schaltfläche. as_keys ist seine vollständige Adresse: Registerkarte, Gruppe, tragendes Steuerelement, dann der Eintrag — eine Ebene mehr pro Kaskade. Ein abhakbarer Eintrag schaltet zuerst um, und ab_checked trägt seinen neuen Zustand. Ein ausgegrauter oder ausgeblendeter Eintrag lässt sich nicht wählen
ue_combo_changed (string as_keys, string as_text)Der Benutzer bestätigt den Text eines Kombinationsfelds: eine Auswahl in seiner Liste, Eingabe im Feld oder das Verlassen des Felds nach einer Eingabe. Escape verwirft die Eingabe und löst nichts aus; is_text per Code zu schreiben löst ebenfalls nichts aus
ue_value_changed (string as_keys, double ad_value)Der Benutzer ändert den Wert eines Drehfelds: seine Pfeile, Auf / Ab im Feld, Eingabe oder das Verlassen des Felds nach einer Eingabe (Escape verwirft sie). ad_value ist der neue Wert, auf den Bereich des Drehfelds begrenzt. id_value per Code zu schreiben löst nichts aus
ue_color_changed (string as_keys, long al_color)Der Benutzer wählt eine Farbe (Palette oder Auswahl) oder klickt den Hauptteil einer Farbauswahl, um ihre aktuelle Farbe erneut anzuwenden; al_color ist die PowerBuilder-Farbe. il_color per Code zu schreiben löst nichts aus
ue_gallery_selection_changed (string as_from_keys, string as_keys)Eine Galeriekachel wurde übernommen — durch den Benutzer oder durch of_select_gallery_item (ein Befehl Ihres Codes löst es ebenfalls aus). Dieselben Argumente wie ue_gallery_selection_changing: Frage und Ergebnis lesen sich gleich, und as_from_keys ist die verlassene Kachel
ue_gallery_selection_changing (string as_from_keys, string as_keys) → booleanAbbrechbar, wird vor der Übernahme der Kachel gestellt. Nur ausgelöst, wenn ib_veto_gallery = true. as_from_keys ist die aktuelle Kachel. Auch für of_select_gallery_item gestellt. Geben Sie false zurück, um sie zu behalten (ein Stil, den das Dokument noch nicht annehmen kann): of_select_gallery_item liefert dann -4
ue_launcher (string as_keys)Der Benutzer klickt den Startpfeil einer Gruppe (auch im Panel einer eingeklappten Gruppe): as_keys ist die Adresse der Gruppe registerkarte/gruppe — öffnen Sie Ihr Optionsfenster
ue_selection_changed (string as_keys)Eine andere Registerkarte kommt nach vorn: ein Klick, das Mausrad über dem Menüband, eine Zugriffstaste, oder of_select_tab (ein Befehl Ihres Codes löst es ebenfalls aus). as_keys ist der Schlüssel der Registerkarte — leer, wenn keine mehr übrig ist, nachdem die aktive ausgeblendet oder entfernt wurde
ue_app_button ( )Auf die Anwendungsschaltfläche wird geklickt
ue_app_menu_selected (string as_keys)Der Benutzer wählt einen Eintrag des Anwendungsmenüs: as_keys ist seine Adresse (saveas/as_pdf). Ein ausgegrauter oder ausgeblendeter Eintrag lässt sich nicht wählen
ue_minimized (boolean ab_minimized)Das Menüband klappt ein oder auf: das Chevron am Ende der Registerkartenzeile, ein Doppelklick auf eine Registerkarte, oder ib_minimized aus Ihrem Code (ein Befehl löst es ebenfalls aus); ue_size_changed meldet die neue Höhe in jedem Fall
ue_size_changed (long al_height, boolean ab_minimized)Die Höhe des Menübands hat sich von selbst geändert: eingeklappt, ausgeklappt, eine kontextbezogene Registerkarte eingeblendet, ein schmaleres Fenster, das eine Zeile verliert. Anders als ue_auto_height — das nur spricht, wenn sich die Komponente selbst bemisst — löst dieses Ereignis unabhängig von der automatischen Höhe aus: reine Information, um das darunter Liegende neu anzuordnen
ue_keytips (boolean ab_on, integer ai_level)Die Keytips erscheinen (true) oder verschwinden (false). ai_level gibt an, wo die Navigation gerade steht: 1 = die Registerkarten sind mit Buchstaben versehen, 2 = die Befehle der aktuellen Registerkarte sind es, 0 = kein Keytip mehr
ue_auto_height (long al_height)Das Menüband meldet seine ideale Höhe und hat sich soeben daran angepasst — immer aktiv: Die Höhe eines Menübands ist intrinsisch
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 vollständiges Menüband, vom Anwendungsmenü bis zu den Gruppen #

// open-Event : der gesamte Aufbau wird zu einer einzigen Darstellung zusammengefasst

// Das Zeichnen anhalten und die Anwendungsschaltflaeche benennen
uo_ribbon.of_set_redraw(/*on*/ false)
uo_ribbon.is_app_button = "Datei"

// Anwendungsmenue, mit einer Kaskade unter "Speichern unter"
uo_ribbon.of_add_app_menu_item(/*keys*/ "new", /*label*/ "Neu", /*image*/ "mono:img\new.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "open", /*label*/ "Öffnen...", /*image*/ "mono:img\open.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as", /*label*/ "Speichern unter", /*image*/ "mono:img\saveas.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as/as_pdf", /*label*/ "PDF-Dokument", /*image*/ "")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as/as_csv", /*label*/ "CSV-Datei", /*image*/ "")
uo_ribbon.of_add_app_menu_separator(/*keys*/ "sep1")
uo_ribbon.of_add_app_menu_item(/*keys*/ "quit", /*label*/ "Beenden", /*image*/ "mono:img\exit.svg")

// Symbolleiste fuer den Schnellzugriff, ueber den Registerkarten
uo_ribbon.of_add_qat(/*key*/ "qat_save", /*image*/ "mono:img\save.svg", /*tooltip*/ "Speichern")
uo_ribbon.of_add_qat(/*key*/ "qat_undo", /*image*/ "mono:img\undo.svg", /*tooltip*/ "Rückgängig")

// Registerkarte Start
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Start")
uo_ribbon.of_tab(/*key*/ "home").is_keytip = "S"

// Eine Gruppe: eine geteilte Schaltflaeche mit ihrem Menue, dann zwei kleine
uo_ribbon.of_add_group(/*keys*/ "home/clipboard", /*title*/ "Zwischenablage")
uo_ribbon.of_add_big_split(/*keys*/ "home/clipboard/paste", /*label*/ "Einfügen", /*image*/ "mono:img\paste.svg")
uo_ribbon.of_add_menu_item(/*keys*/ "home/clipboard/paste/paste_text", /*label*/ "Ohne Formatierung einfügen", /*image*/ "")
uo_ribbon.of_add_menu_item(/*keys*/ "home/clipboard/paste/paste_link", /*label*/ "Als Verknüpfung einfügen", /*image*/ "")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/cut", /*label*/ "Ausschneiden", /*image*/ "mono:img\cut.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/copy", /*label*/ "Kopieren", /*image*/ "mono:img\copy.svg")
uo_ribbon.of_group(/*keys*/ "home/clipboard").ib_launcher = true       // Optionspfeil unten rechts

// Alles auf einmal zeichnen, dann das Register anzeigen
uo_ribbon.of_set_redraw(/*on*/ true)
uo_ribbon.of_select_tab(/*key*/ "home")

Eine einzige Klickverteilung #

// Event ue_clicked von uo_ribbon : (string as_keys)
// Der vollstaendige Pfad kommt mit dem Event : eine einzige Verteilung genuegt,
// und zwei Gruppen koennen denselben Bezeichner wiederverwenden, ohne sich zu stoeren.
choose case as_keys
    case "clipboard/cut" ; of_cut()
    case "clipboard/copy" ; of_copy()
    case "clipboard/paste" ; of_paste()
    case "font/bold"          ; of_toggle_bold()
end choose

Den Zustand der Steuerelemente nach Rechten steuern #

// Immer ueber den Pfad : Registerkarte > Gruppe > Steuerelement
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste").ib_enabled = of_clipboard_has_data()
uo_ribbon.of_item(/*keys*/ "home/tools/brush").ib_checked = true
uo_ribbon.of_tab(/*key*/ "admin").ib_visible = gb_administrator

// Einen Eintrag INNERHALB eines Dropdown-Menues ausgrauen (Stufe 4)
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste") &
        .of_menu_item(/*keys*/ "paste_link").ib_enabled = false

Kontextbezogene Registerkarten mit Banner #

Das Prinzip von Office: Registerkarten, die nur erscheinen, wenn die Auswahl sie rechtfertigt, gekrönt von einem farbigen betitelten Banner.

// open-Event : die kontextbezogene Gruppe wird vorbereitet, standardmaessig ausgeblendet

// Ohne Farbe folgt das Banner dem Akzent des Designs ; RGB(...) erzwingt sie
uo_ribbon.of_add_contextual_group(/*key*/ "img", /*title*/ "Bildtools", &
                                           /*color*/ RGB(/*red*/ 224, /*green*/ 32, /*blue*/ 96))
uo_ribbon.of_add_contextual_tab(/*key*/ "format", /*title*/ "Format", /*group_key*/ "img")
uo_ribbon.of_add_group(/*keys*/ "format/adjust", /*title*/ "Anpassen")
uo_ribbon.of_add_big_button(/*keys*/ "format/adjust/crop", /*label*/ "Zuschneiden", /*image*/ "mono:img\crop.svg")
uo_ribbon.of_add_button(/*keys*/ "format/adjust/rotate", /*label*/ "Drehen", /*image*/ "mono:img\rotate.svg")
// Bei der Auswahl eines Bildes : die Registerkarte wird eingeblendet und aktiviert
uo_ribbon.of_tab(/*key*/ "format").ib_visible = true
uo_ribbon.of_select_tab(/*key*/ "format")
// Bei der Abwahl : sie wird ausgeblendet, das Banner verschwindet mit ihr
uo_ribbon.of_tab(/*key*/ "format").ib_visible = false

Kombinationsfeld, Drehfeld, Farbauswahl und Katalog #


// Eine neue Gruppe im Register
uo_ribbon.of_add_group(/*keys*/ "home/font", /*title*/ "Schriftart")

// Bearbeitbares Kombinationsfeld : es wird ueber sein Handle gefuellt
uo_ribbon.of_add_combo(/*keys*/ "home/font/font_name", /*width_px*/ 140, /*editable*/ true)
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Segoe UI")
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Arial")
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Calibri")
uo_ribbon.of_item(/*keys*/ "home/font/font_name").is_text = "Segoe UI"

// Numerisches Drehfeld : Minimum, Maximum, Schritt, Anfangswert
uo_ribbon.of_add_spinner(/*keys*/ "home/font/size", /*width_px*/ 70, /*min*/ 6, /*max*/ 96, &
                          /*step*/ 1, /*value*/ 11)

// Farbauswahl im Modus vollstaendige Palette (mit OK / Abbrechen)
uo_ribbon.of_add_colorpicker(/*keys*/ "home/font/color", /*label*/ "Farbe", &
                              /*image*/ "mono:img\font-color.svg", &
                              /*color*/ RGB(/*red*/ 0, /*green*/ 0, /*blue*/ 0), &
                              /*mode*/ u_pbt_ribbon.COLORMODE_OPEN)

// Katalog von Formatvorlagen : scrollende bebilderte Kacheln
uo_ribbon.of_add_gallery(/*keys*/ "home/font/styles", /*width_px*/ 220, &
                                     /*tile_w*/ 64, /*tile_h*/ 48)
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_normal", /*image*/ "img\style-normal.png", /*label*/ "Standard")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_title",  /*image*/ "img\style-titre.png",  /*label*/ "Titel")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_note",   /*image*/ "img\style-note.png",   /*label*/ "Notiz")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_code",   /*image*/ "img\style-code.png",   /*label*/ "Code")

// Der eingeklappte Streifen zeigt 4 Miniaturen auf einmal ; die uebrigen bleiben
// ueber die Pfeile erreichbar, oder im ausgeklappten Raster.
uo_ribbon.of_item(/*keys*/ "home/font/styles").ii_visible_items = 4

// Der zu Beginn ausgewaehlte Stil
uo_ribbon.of_select_gallery_item(/*keys*/ "home/font/styles/st_normal")
// Event ue_value_changed von uo_ribbon : (string as_keys, double ad_value)
n_pbt_utils lnv_utils   // autoinstantiate : nichts zu erzeugen, nichts zu zerstoeren
if lnv_utils.of_leaf(/*keys*/ as_keys) = "size" then of_apply_size(ad_value)

Bereich und Schrittweite eines Drehfelds lassen sich nachträglich über id_min, id_max und id_step seines Handles ändern: Der Wert wird sofort in den neuen Bereich zurückgeholt, ohne ue_value_changed auszulösen. Sein Bild ändert sich, wie das jedes Steuerelements, über is_image.

// Die groesste Groesse haengt von der gewaehlten Schriftart ab : 96, dann 400 in Schritten von 2
uo_ribbon.of_item(/*keys*/ "home/font/size").id_max = 400
uo_ribbon.of_item(/*keys*/ "home/font/size").id_step = 2
// Event ue_color_changed von uo_ribbon : (string as_keys, long al_color)
n_pbt_utils lnv_utils   // autoinstantiate : nichts zu erzeugen, nichts zu zerstoeren
if lnv_utils.of_leaf(/*keys*/ as_keys) = "color" then of_apply_color(al_color)

Die Wahl einer Katalogminiatur ablehnen #

// Die Frage wird nur auf Wunsch gestellt: diese Zeile schaltet sie ein, und
// ue_gallery_selection_changing entscheidet dann ueber jede Kachel.
uo_ribbon.ib_veto_gallery = true
// Event ue_gallery_selection_changing von uo_ribbon :
//   (string as_from_keys, string as_keys)
// FALSE zurueckzugeben behaelt die aktuelle Miniatur (as_from_keys) bei.
n_pbt_utils lnv_utils   // autoinstantiate : nichts zu erzeugen, nichts zu zerstoeren
if lnv_utils.of_leaf(/*keys*/ as_keys) = "st_code" and not of_document_supports_code() then
    MessageBox("Formatvorlage", "Dieses Dokument kann die Formatvorlage Code nicht annehmen.")
    return false
end if
return true

Der Dialogfeld-Starter #

// Der kleine Pfeil unten rechts in der Gruppe
uo_ribbon.of_group(/*keys*/ "home/font").ib_launcher = true
// Event ue_launcher von uo_ribbon : (string as_keys)
// Der Pfad benennt die Gruppe : das passende Optionsfenster wird geoeffnet.
n_pbt_utils lnv_utils   // autoinstantiate : nichts zu erzeugen, nichts zu zerstoeren
choose case lnv_utils.of_leaf(/*keys*/ as_keys)
    case "font"        ; open(w_font_options)
    case "clipboard" ; open(w_paste_options)
end choose

Keytips: das Menüband über die Tastatur führen #

// Alt zeigt die Buchstaben ; Alt, dann S, dann C loest "copy" aus
uo_ribbon.of_tab(/*key*/ "home").is_keytip = "S"
uo_ribbon.of_item(/*keys*/ "home/clipboard/copy").is_keytip = "C"
uo_ribbon.of_item(/*keys*/ "home/clipboard/cut").is_keytip = "X"

Ein Druck auf Alt übergibt dem Menüband das Kommando, gleichgültig wo der Fokus im Fenster liegt: Es übernimmt den Tastaturfokus und blendet seine Buchstaben ein. Sie müssen nichts verdrahten — es genügt, dass mindestens ein Keytip deklariert ist. Esc, ein zweites Alt oder die Wahl eines Befehls geben den Fokus an das Steuerelement zurück, das der Anwender verlassen hatte. Eine Zugriffstaste kann mehrere Buchstaben haben ("FP", wie in Office): der Benutzer tippt sie nacheinander, die Abzeichen, die nicht mehr mit dem Getippten beginnen, treten zurück, und die Rücktaste bringt sie wieder. Ein Steuerelement einer eingeklappten Gruppe behält seine Taste: sie öffnet das Panel der Gruppe.

ue_keytips benachrichtigt Sie bei jedem Zustandswechsel und nennt Ihnen die aktuelle Ebene:

// Event ue_keytips von uo_ribbon : (boolean ab_on, integer ai_level)
// Die Tastatur steuert das Menueband : den Hinweis in der Statusleiste
// loeschen, der von der Maus spricht, und ihn zuruecksetzen, sobald die
// Buchstaben wieder verschwinden.
if ab_on then
    uo_statusbar.of_item(/*keys*/ "main").is_text = "Buchstabe eingeben (Ebene " + String(ai_level) + ")"
else
    uo_statusbar.of_item(/*keys*/ "main").is_text = ""
end if

Erweiterte Tooltips auf einem Steuerelement #


// Der Super-Tooltip der Schaltflaeche Einfuegen: ein Titel, ein Text, ein Bild
lnv_item = uo_ribbon.of_item(/*keys*/ "home/clipboard/paste")
lnv_item.is_super_tooltip_title = "Einfügen (Strg+V)"
lnv_item.is_super_tooltip_text  = "Fügt den Inhalt der Zwischenablage ein." &
                                + "[br][br][size-=15]Verwenden Sie den Pfeil, um ohne Formatierung einzufügen.[/size-=15]"
lnv_item.is_super_tooltip_image = "img\paste.png"

Diese vier Eigenschaften sind exakt dieselben wie bei jedem anderen Item der Bibliothek. Für einen einzeiligen Tooltip genügt is_tooltip.

Automatische Höhe #

Das Menüband bemisst sich selbst: Es ist nichts zu aktivieren. Es benachrichtigt Sie bei jeder Höhenänderung (Einklappen, kontextbezogene Registerkarte, Designwechsel), damit Sie neu platzieren, was darunter liegt.

// Event ue_auto_height von uo_ribbon : (long al_height)
// Das Menueband hat sich bereits neu bemessen : wir setzen um, was darunter liegt.
uo_content.y      = uo_ribbon.y + uo_ribbon.height
uo_content.height = this.height - uo_content.y

Das Menüband einklappen, um Platz zu gewinnen #

// Start with the ribbon folded: only the tab headers show
uo_ribbon.ib_minimized = true
// Event ue_minimized von uo_ribbon : (boolean ab_minimized)
// Wir merken uns die Vorliebe des Benutzers fuer das naechste Oeffnen.
of_save_preference("ribbon_collapsed", ab_minimized)

Mit einem leeren Menüband neu beginnen #

// of_reset leert Registerkarten, Gruppen, Steuerelemente, Schnellzugriffsleiste und Menue
uo_ribbon.of_reset()
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Start")

Aus einem vorhandenen PowerBuilder-Menü #

Eine PowerBuilder-Anwendung hat ihre Befehle bereits einmal beschrieben: in ihrem Menü. Beschriftungen, Tastenkombinationen, Bilder, Trenner, Untermenüs, Tooltips — alles ist da. n_pbt_menu2ribbon liest dieses Menü per RTTI zurück und schreibt das PowerScript, das das passende Ribbon aufbaut.

// Einmalig, von Hand : der Generator SCHREIBT Code, er laeuft nicht in
// Produktion. Fuegen Sie sein Ergebnis in das open-Event Ihres Fensters ein.
n_pbt_menu2ribbon lnv_gen
string ls_code

// Den Code aus dem Menue erzeugen
lnv_gen = create n_pbt_menu2ribbon
ls_code = lnv_gen.of_generate(/*menu*/ m_principal, /*ribbon_var*/ "uo_ribbon")
destroy lnv_gen

// In die Zwischenablage, bereit zum Einfuegen
ClipBoard(ls_code)

Die Umwandlung ist deterministisch: keine KI, kein Netzwerkaufruf, nichts verlässt den Rechner. Jeder erzeugte Schlüssel ist der ClassName des Menüeintrags (m_fichier, m_ouvrir): Die Adresse, die das Menüband meldet (m_fichier/g1/m_ouvrir), führt also zum Eintrag zurück, und der am Ende des Codes geschriebene Router löst dessen Clicked aus ue_clicked, ue_toggled und ue_menu_selected aus - Ihr vorhandener Code läuft unverändert. Untermenüs werden in jeder Tiefe übernommen, ein ausgeblendeter Eintrag entfällt, ein ausgegrauter bleibt ausgegraut, ein abgehakter wird zu einem Umschalter oder einem abhakbaren Eintrag, der abgehakt beginnt.

Der erzeugte Code ist ein Ausgangspunkt zum Durchsehen, kein fertiges Ergebnis: Ein Menü ist eine Liste, ein Ribbon ist ein Layout. Fassen Sie zusammen, wählen Sie Ihre großen Schaltflächen, streichen Sie, was nicht dauerhaft sichtbar sein muss. Beispiel 9 der Ribbon-Seite in der Demo-Anwendung zeigt ein vollständiges Ergebnis.


Best Practices #

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.

MitgliederRolleBeschrieben in
of_count · of_keys_at · of_hasDurchlaufen, was die Komponente enthält3.2 Die Items
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.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.


← Komponentenreferenz · Inhalt des Handbuchs