PBToolboxAI v5 ← Site

menubar — u_pbt_menubar #

← Komponentenreferenz · Inhalt des Leitfadens

Anwendungsmenüleiste: Menüs, Untermenüs, abhakbare Einträge, Trennlinien, Symbole und Tastenkürzel — alles von der Bibliothek gezeichnet, ohne Windows-Menü.

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


Auf einen Blick #

Userobjectu_pbt_menubar
Item-Klassen_pbt_menubar_item (ein Eintrag) · n_pbt_menubar_menu (ein Menü der Leiste)
Dient zuIhrem Fenster die Menüleiste der Anwendung geben, im selben Thema wie alles andere
PrinzipSie deklarieren die Menüs, dann ihre Einträge; jeder Eintrag wird über seine Adresse menu/id wiedergefunden

Schnellstart #

// Open-Event des Fensters
uo_menus.of_add_menu(/*key*/ "file", /*text*/ "Datei")
uo_menus.of_add_item(/*keys*/ "file/open", /*text*/ "Oeffnen")
uo_menus.of_add_item(/*keys*/ "file/save", /*text*/ "Speichern")
// event ue_item_selected : (string as_keys)
choose case as_keys
	case "file/open"; of_open_document()
	case "file/save"; of_save_document()
end choose

Das Modell: drei Ebenen, ein Schlüssel je Ebene #

Eine Menüleiste hat drei Ebenen, und jede wird über ihren Schlüssel angesprochen:

EbeneHinzugefügt durchSchlüssel
Das Menü der Leisteof_add_menusein Schlüssel, file
Der Eintrag eines Menüsof_add_itemdie Adresse menu/eintrag, file/open
Der Untereintrag eines Eintragsof_add_itemdie Adresse menu/eintrag/untereintrag, file/export/pdf — so tief wie nötig

Ein Schlüssel ist nur unter seinem Elternelement eindeutig: deshalb wird ein Eintrag immer über seine vollständige Adresse bezeichnet, das Menü zuerst — nie über seinen Schlüssel allein. Zwei Menüs können also jeweils ihren eigenen Eintrag open haben und zwei Untermenüs ihr eigenes pdf (file/export/pdf, file/print/pdf), ohne sich zu stören. Ein Schlüssel enthält weder / noch |, ist nicht leer und beginnt nicht mit __: die Hinzufüge-Methoden lehnen ihn ab (-5), ebenso eine bereits vergebene Adresse oder ein nie hinzugefügtes Elternelement.

Eine Trennlinie hat keinen Schlüssel: of_add_separator zieht einen Strich am Ende eines Menüs (file) oder der Kaskade eines Eintrags (file/export), und danach gibt es nichts zurückzulesen.


Eigenschaften #

EigenschaftTypStandardRolle
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 erlaubt)
is_super_tooltip_imagestring""Bild des erweiterten Tooltips
ib_wrapbooleanfalsefalse (Standard): Die Leiste bleibt auf einer Zeile; die Titel, die nicht passen, wandern vom Ende her in das Dropdown eines Chevrons an ihrem Ende (ihre Einträge als Kaskaden), und die Höhe ändert sich nicht mehr. true: Die Leiste bricht um und meldet ihre neue Höhe (ue_auto_height) — wie vor der 4.0
ib_track_hoverbooleanfalseAbonnement für ue_item_hover: ohne es melden die Dropdowns nicht einmal den überfahrenen Eintrag — ein Event, das bei jeder Zeigerbewegung ausgelöst wird, geht nur an eine Anwendung, die es verlangt hat

Eigenschaften eines Eintrags — n_pbt_menubar_item #

Über of_item(adresse) erhalten — of_item("file/export/pdf"). Eine Adresse mit einer einzigen Ebene bezeichnet ein Menü, keinen Eintrag: ihr Handle ändert nichts, verwenden Sie of_menu.

EigenschaftTypStandardRolle
is_textstring—Ändert die Beschriftung des Eintrags, im laufenden Betrieb
ib_enabledbooleantrueEintrag aktiv; ein ausgegrauter Eintrag reagiert nicht mehr auf Klicks
ib_visiblebooleantrueEintrag aus der Liste genommen, ohne entfernt zu werden — Untermenü und Tastenkürzel ruhen mit ihm; er behält seinen Schlüssel und kommt unverändert zurück. Ein ruhendes Kürzel behält seine Tastenkombination: sie erreicht auch Ihre Anwendung nicht; is_shortcut = "" gibt sie ihr zurück
is_shortcutstring""Die angezeigte Tastenkombination rechts vom Eintrag (Ctrl+S) — und aktiv: sie löst ue_item_selected für diesen Eintrag aus, wo auch immer der Fokus liegt. In einem Menü lernt man die Kürzel einer Anwendung; eine angezeigte Taste, die nichts tut, lehrt das Falsche. Tasten: ein Buchstabe, eine Ziffer, F1 bis F24, Enter, Esc, Del, Insert, Home, End, PageUp, PageDown, und mit Strg oder Alt auch +, -, ,, ., die Pfeiltasten (Left…), Space, Tab, Backspace (Ctrl++ zum Zoomen). Ein Kürzel gehört auf ein Blatt: auf einem Eintrag, der eine Kaskade öffnet, wird es weder angezeigt noch ausgelöst. Ein leerer Text nimmt beides zurück. Aktiv, sobald der Eintrag existiert (zuerst of_add_item): auf einer Adresse, die keinen Eintrag bezeichnet, wird nichts aktiviert. Bevor es wirkt, löst es ue_menu_opening seines Menüs aus
ib_checkedbooleanfalseHäkchen vor dem Eintrag — für eine Option, die an- und ausgeht
is_imagestring""Das Symbol des Eintrags, live geändert: der Eintrag behält seinen Platz in der Liste. Dieselben Pfade wie bei of_add_item (mono:, tint:, datei.dll:NAME); ein leerer Text entfernt es
is_groupstring""Macht den Eintrag zu einem Optionseintrag: die Einträge einer Gruppe unter demselben Elternteil schließen sich aus — einen abzuhaken (ib_checked = true oder die Wahl des Benutzers) hakt die anderen ab, und ein runder Punkt ersetzt das Häkchen. ue_item_selected sagt weiterhin, welcher gewählt wurde. Ein leerer Text macht ihn wieder zu einem gewöhnlichen Eintrag
is_tonestring""Der Ton des Befehls: sein Text im Ruhezustand in einer Farbe des hellen oder dunklen Designs — TONE_DANGER für den zerstörenden, TONE_WARN, TONE_SUCCESS, TONE_INFO; leer oder TONE_NEUTRAL = der Text des Designs. Beim Zeigen nimmt der Eintrag die Hover-Farben des Designs an; ein il_text_color des Eintrags hat Vorrang. Die Konstanten liegen auf u_pbt_menubar
il_accentlong-1Akzent dieses Eintrags: sein Häkchen und sein Rand unter dem Zeiger (-1 = der des Themas)
il_back_colorlong-1Hintergrund dieses Eintrags im Aufklappmenü, in Ruhe
il_text_colorlong-1Textfarbe dieses Eintrags
il_back_color_hoverlong-1Hintergrund dieses Eintrags unter dem Zeiger
il_text_color_hoverlong-1Textfarbe dieses Eintrags unter dem Zeiger
is_tooltipstring""Gespeichert und zurücklesbar, aber ein Eintrag des Aufklappmenüs zeigt keinen Tooltip: das native Aufklappmenü hat keinen. Nur die Menütitel zeigen ihren (of_menu)
is_super_tooltip_titlestring""Titel seines erweiterten Tooltips — gespeichert, nicht angezeigt (siehe is_tooltip)
is_super_tooltip_textstring""Text seines erweiterten Tooltips — gespeichert, nicht angezeigt
is_super_tooltip_imagestring""Bild seines erweiterten Tooltips — gespeichert, nicht angezeigt

Eigenschaften eines Menüs — n_pbt_menubar_menu #

Über of_menu(schluessel) erhalten — of_menu("file"). Farben und Tooltip erscheinen auf dem Titel des Menüs in der Leiste.

EigenschaftTypStandardRolle
is_textstring—Beschriftung des Menüs, & inklusive (Mnemonik), geändert ohne die Leiste neu aufzubauen
ib_enabledbooleantrueAusgegrautes Menü: es öffnet sich nicht mehr, seine Einträge und ihre Tastenkürzel mit ihm; die Tastatur überspringt es
ib_visiblebooleantrueDas Menü verlässt die Leiste — Einträge und Tastenkürzel schlafen mit ihm — und kehrt unverändert zurück. Ruhende Kürzel behalten ihre Tastenkombination: sie erreicht auch Ihre Anwendung nicht
is_alignstring"start"u_pbt_menubar.ALIGN_END setzt das Menü ans Ende der Leiste, wie Hilfe — mit denen, die ihm in derselben Ausrichtung folgen, dahinter; ALIGN_START (Standard) stellt es wieder zu den anderen. Logisch: Das Ende ist bei einem Layout von rechts nach links die linke Seite. Mit dem Chevron klappen die Titel am Ende zuerst ein
il_accentlong-1Akzent dieses Menüs: ein Strich unter seinem Titel, solange sein Aufklappmenü offen ist (-1 = keiner)
il_back_colorlong-1Hintergrund seines Titels, in Ruhe
il_text_colorlong-1Textfarbe seines Titels, in Ruhe
il_back_color_hoverlong-1Hintergrund seines Titels unter dem Zeiger oder geöffnet
il_text_color_hoverlong-1Textfarbe seines Titels unter dem Zeiger oder geöffnet
is_tooltipstring""Tooltip, wenn der Zeiger auf seinem Titel ruht
is_super_tooltip_titlestring""Titel des erweiterten Tooltips seines Titels
is_super_tooltip_textstring""Text dieses erweiterten Tooltips (Rich-Markup erlaubt)
is_super_tooltip_imagestring""Bild dieses erweiterten Tooltips

Methoden #

MethodeRolle
of_add_menu (string as_key, string as_text)Fügt der Leiste ein Menü hinzu. Liefert 0 nach der Anwendung, -5 wenn der Schlüssel abgelehnt wird (leer, mit / oder senkrechtem Strich, beginnt mit __ oder bereits vergeben), -2 wenn die Komponente nicht erzeugt ist
of_add_item (string as_keys, string as_text)Fügt einen Eintrag an seiner Adresse hinzu: file/open im Menü File, file/export/pdf unter dem Eintrag Export, so tief wie nötig. Liefert 0 nach der Anwendung, -5 wenn die Adresse abgelehnt wird: weniger als zwei Ebenen, eine leere Ebene, ein Schlüssel mit / oder senkrechtem Strich oder beginnend mit __, ein nie hinzugefügtes Menü oder Elternelement, oder eine bereits vergebene Adresse. -2 wenn die Komponente nicht erzeugt ist
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)Dasselbe, mit Symbol und Häkchen. Um den Eintrag jetzt oder später auszugrauen, über sein Handle: of_item(adresse).ib_enabled = false. Liefert 0 nach der Anwendung, -5 wenn die Adresse abgelehnt wird: weniger als zwei Ebenen, eine leere Ebene, ein Schlüssel mit / oder senkrechtem Strich oder beginnend mit __, ein nie hinzugefügtes Menü oder Elternelement, oder eine bereits vergebene Adresse. -2 wenn die Komponente nicht erzeugt ist
of_add_separator (string as_keys)Zieht eine Trennlinie am Ende eines Menüs (file) oder der Kaskade eines Eintrags (file/export). Liefert 0 nach der Anwendung, -5 wenn an dieser Adresse nichts hinzugefügt wurde, -2 wenn die Komponente nicht erzeugt ist
of_add_header (string as_keys, string as_text) → longSetzt eine Abschnittsüberschrift an das Ende eines Menüs (view) oder der Kaskade eines Eintrags (view/panels): eine Titelzeile über den folgenden Einträgen, bis zur nächsten Überschrift oder Trennlinie. Sie ist kein Eintrag — nie gewählt, nie von of_count gezählt, auch nicht im Demo-Limit — und wird nicht gezeichnet, wenn alle Einträge darunter ausgeblendet sind. Liefert 0 nach dem Hinzufügen, -5, wenn an dieser Adresse nichts erzeugt wurde, -2, wenn die Komponente nicht erzeugt ist
of_item (string as_keys) → n_pbt_menubar_itemHandle eines Eintrags, über seine Adresse — of_item("file/export/pdf") —, um seine Eigenschaften zu lesen oder zu setzen. Genau das liefert ue_item_selected: das Argument geht unverändert hier hinein. Nie der Schlüssel allein: zwei Untermenüs können jeweils ihr pdf haben, und nur die Adresse unterscheidet sie. Eine Adresse mit einer Ebene bezeichnet ein Menü: ihr Handle ändert nichts, verwenden Sie of_menu
of_menu (string as_key) → n_pbt_menubar_menuHandle eines Menüs der obersten Ebene, um es live zu lesen oder zu ändern — ausgrauen, ausblenden, umbenennen, ans Ende setzen, färben — ohne die Leiste neu aufzubauen; ib_visible nimmt es aus der Leiste, Einträge und Tastenkürzel ruhen mit ihm
of_remove_item (string as_keys) → longEntfernt einen Eintrag an seiner Adresse (file/open, file/export/pdf) — seine Kaskade mit ihm; die anderen bleiben. Seine Handles werden freigegeben und sein Tastenkürzel entschärft: die Taste gehört wieder Ihrer Anwendung. Um eine Kaskade zu leeren und den Eintrag an seinem Platz zu behalten: of_clear_items. Liefert 0 nach der Anwendung, -5 wenn an dieser Adresse kein Eintrag lebt, -2 wenn die Komponente nicht erzeugt ist
of_remove_menu (string as_key) → longEntfernt ein Menü der obersten Ebene, seine Einträge mit ihm — Handles freigegeben, Tastenkürzel entschärft. Die Leiste wird neu gezeichnet und ihre Höhe neu gemeldet. Liefert 0 nach der Anwendung, -5 für ein nie hinzugefügtes Menü, -2 wenn die Komponente nicht erzeugt ist
of_insert_item (string as_keys, string as_text, integer ai_index) → longFügt einen Eintrag an einem Rang seiner Liste ein statt am Ende: as_keys ist die Adresse, die er haben wird (file/recent), ai_index seine Stelle unter den Einträgen dieser Liste, ab 1 (0 oder weniger = vorne; hinter dem Ende = am Ende). Trennlinien und Überschriften zählen nicht: der Eintrag kommt direkt vor den, der diesen Rang innehatte. Eine Liste zuletzt geöffneter Dateien bleibt so an ihrem Platz, über Beenden. Liefert 0 nach der Anwendung, -5 wenn die Adresse abgelehnt wird (wie bei of_add_item), -2 wenn die Komponente nicht erzeugt ist
of_insert_item (string as_keys, string as_text, string as_image, boolean ab_checked, integer ai_index) → longDasselbe, mit Symbol und Häkchen, wie bei of_add_item. Liefert 0 nach der Anwendung, -5 wenn die Adresse abgelehnt wird, -2 wenn die Komponente nicht erzeugt ist
of_clear_items (string as_keys) → longLeert ein Menü (file) oder die Kaskade eines Eintrags (file/recent) und behält das Menü bzw. den Eintrag an seinem Platz — was eine bei jedem Öffnen neu aufgebaute Liste zuletzt geöffneter Dateien braucht. Die entfernten Einträge nehmen ihre Handles und Tastenkürzel mit. Liefert 0 nach der Anwendung, -5 wenn an dieser Adresse nichts erzeugt wurde, -2 wenn die Komponente nicht erzeugt ist
of_open (string as_key) → longÖffnet das Dropdown eines Menüs der obersten Ebene per Code, wie ein Klick auf seinen Titel: zuerst wird ue_menu_opening ausgelöst, das Dropdown erscheint nach dessen Antwort, dann ue_item_selected oder ue_menu_closed. Ein in den Chevron eingeklapptes Menü öffnet sich vom Chevron aus. Liefert 0 nach der Anforderung, -5 für ein unbekanntes, ausgeblendetes oder ausgegrautes Menü, -2 wenn die Komponente nicht erzeugt ist
of_close ( ) → longSchließt das angezeigte Dropdown — oder ein Menü, das sich noch öffnet — ohne Auswahl: ue_menu_closed folgt, wie bei einem Klick außerhalb. Ist nichts offen, geschieht nichts. Liefert 0 nach der Anforderung, -2 wenn die Komponente nicht erzeugt ist
of_is_open ( ) → booleanTRUE, sobald sich ein Menü öffnet — sein ue_menu_opening ist ausgelöst — bis es sich schließt, mit oder ohne Auswahl. Aus der Komponente gelesen, nie aus einer Kopie
of_load_menu (menu am_menu) → longBaut die ganze Leiste aus einem PowerBuilder-Menü — dem Menü eines Fensters: jedes Element von am_menu wird ein Menü der Leiste, seine Elemente die Einträge, Kaskaden eingeschlossen, mit ihrem Text (&-Markierungen bleiben), ihrem Zustand (Enabled, Checked, Visible), ihrem Symbolleistenbild, wenn es eine Datei ist, und ihrem Shortcut, angezeigt und aktiv. Die Schlüssel sind die ClassNames der Elemente: m_file/m_export/m_pdf. Die Leiste bleibt lebendig: vor jedem Öffnen (und bevor ein Tastenkürzel wirkt) läuft das Clicked des Titels, wie PowerBuilder es ausführt, dann wird jedes Element neu gelesen: sein Text (samt dem nach einem Tabulator geschriebenen Tastenkürzel), Enabled, Checked und Visible. Die Wahl eines Eintrags führt zuerst das Clicked seines Elements aus, dann ue_item_selected; ein inzwischen ausgegrautes Element führt nichts aus (ue_menu_closed). Ein Clicked findet kein ParentWindow: halten Sie das Fenster in einer Instanzvariablen des Menüs. Das Menü ersetzt, was die Leiste enthielt; halten Sie das Menüobjekt am Leben. Liefert 0 nach dem Laden, -5 wenn am_menu nicht gültig ist, -2 wenn die Komponente nicht erzeugt ist
of_loaded_item (string as_keys) → menuDas PowerBuilder-Menüelement, aus dem ein Menü oder Eintrag stammt (of_load_menu), über seine Adresse — um zu lesen, was das Menü weiß und die Leiste nicht, sein MicroHelp für eine Hilfezeile in ue_item_hover. Eine Adresse, die nicht aus einem Menü stammt, liefert eine ungültige Referenz: prüfen Sie sie mit IsValid
of_clear ( )Leert die Leiste — Menüs und Einträge; ihre Handles werden freigegeben und die Tastenkürzel der Einträge entschärft. 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
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

Events #

EventAusgelöst, wenn
ue_menu_opening (string as_key)Ausgelöst, wenn sich ein Menü der obersten Ebene gleich öffnet — und das Dropdown wartet: es öffnet sich erst, wenn das Event zurückgekehrt ist. Aktivieren, grauen oder füllen Sie seine Einträge hier: die Änderung ist bei diesem Öffnen sichtbar, nicht beim nächsten. Auch ausgelöst, bevor ein Tastenkürzel eines seiner Einträge wirkt, wie Windows es tut: hier ausgegrautes oder aktiviertes Einfügen antwortet auf Strg+V genauso. Der Chevron löst es einmal für jedes angezeigte Menü aus. Auf jedes ue_menu_opening folgt genau ein ue_item_selected oder ein ue_menu_closed — auch ein Öffnen, das vor dem Erscheinen abgebrochen wurde: was es vorbereitet hat, lässt sich immer rückgängig machen
ue_menu_closed (string as_key)Ein Menü hat sich ohne Auswahl geschlossen: durch den Benutzer (Klick außerhalb, Esc oder Gleiten zum Nachbarmenü), durch Ihren Code, der das offene Menü entfernt, leert, ausblendet oder ausgraut oder of_close aufruft, bei einem Öffnen, das vor dem Erscheinen des Dropdowns abgebrochen wurde (schnelles Gleiten, Esc, das Fenster verliert den Fokus), und bei einem Tastenkürzel, dessen Eintrag ue_menu_opening ausgegraut hat. Machen Sie hier rückgängig, was ue_menu_opening vorbereitet hatte (eine Vorschau, eine Auswahl). Eine Auswahl löst stattdessen ue_item_selected aus, und of_reset löst nichts aus
ue_item_selected (string as_keys)Der Benutzer hat einen Eintrag gewählt oder sein Tastenkürzel gedrückt. as_keys ist seine Adresse, das Menü zuerst — file/open, file/export/pdf: der Schlüssel allein sagt nicht, aus welchem Untermenü er kommt, und zwei Untermenüs können jeweils ihren eigenen haben. Genau dieser Text geht unverändert an of_item zurück. Ein Eintrag, der ausgegraut, ausgeblendet oder entfernt wurde, während sein Aufklappmenü offen war, löst nichts aus. Ein Eintrag aus einem PowerBuilder-Menü (of_load_menu) hat das Clicked seines Elements bereits ausgeführt
ue_item_hover (string as_keys)Mit ib_track_hover = true: der Eintrag unter dem Zeiger oder der Tastatur in einem offenen Dropdown, mit seiner Adresse (file/export/pdf) — auch ein ausgegrauter Eintrag, seine Hilfe kann sagen, warum. Einmal je Eintrag ausgelöst, dann mit einer leeren Adresse beim Schließen des Dropdowns (vor ue_item_selected bei einer Auswahl): Schreiben Sie den Hilfetext einer Statusleiste und leeren Sie ihn dann. Im Dropdown des Chevrons liefert ein eingeklapptes Menü unter dem Zeiger nur seinen Schlüssel (tools): die Hilfe dieses Menüs
ue_auto_height (long al_height)Die Leiste meldet die Höhe, die sie braucht — verschieben Sie, was darunter liegt
ue_ready ( )Die Komponente ist geladen; alles zuvor Gesendete wurde nachgeholt
ue_runtime_missing ( )Die WebView2-Laufzeit fehlt: die Komponente bleibt leer
ue_bg_color (long al_color)Die Komponente hat ihre Themenhintergrundfarbe berechnet; das Userobject hat sie bereits übernommen (backcolor)

Standardmäßig eine Zeile. Die Titel, die nicht passen, wandern in den Chevron am Ende der Leiste (ib_wrap = false, der Standard): Die Höhe bleibt die einer Zeile und ue_auto_height wird einmal ausgelöst. Mit ib_wrap = true bricht die Leiste um: Sie scrollt nie, ihre Höhe folgt den Zeilen und ue_auto_height sagt Ihnen bei jeder Breitenänderung, um wie viel. Das Öffnen des Chevrons löst ue_menu_opening für jedes angezeigte Menü aus (und beim Schließen ue_menu_closed für jedes): eine Anwendung, die ihre Listen beim Öffnen füllt, füllt sie alle.


Über die Tastatur #

TasteWirkung
Alt · F10Gibt der Leiste die Tastatur und unterstreicht die Buchstaben der Menüs, wie in jeder Windows-Anwendung; ein zweiter Druck gibt sie zurück; Alt wirkt beim Loslassen, allein: Alt+Umschalt (Wechsel des Tastaturlayouts) oder Alt+Tab schalten ihn nicht ein
»Der Chevron der Titel, die nicht passen: Die Pfeiltasten halten darauf wie auf einem Titel, Eingabe oder Unten öffnet die Liste der verborgenen Menüs, und Alt + der Buchstabe eines verborgenen Menüs öffnet dieses Menü vom Chevron aus
Alt + BuchstabeÖffnet das Menü dieses Buchstabens (&Datei) von jedem Steuerelement des Fensters aus — einem Feld, einem DataWindow. Ein von Ihrer Anwendung registriertes Alt+Buchstabe-Kürzel hat Vorrang. Zwei Menüs auf demselben Buchstaben: der Balken wandert von einem zum anderen, Eingabe öffnet. Ein Buchstabe mit Akzent oder aus einer nicht lateinischen Schrift wird wie auf der Tastatur getippt (&Überblick: Alt + die Taste des Ü). Per Tastatur geöffnet, hat das Menü seinen ersten Eintrag hervorgehoben: Eingabe wählt ihn
PfeiltastenDurchlaufen die Menüs und ihre Einträge und überspringen ausgegraute Menüs; rechts öffnet einen Untereintrag, links geht zurück. Bei Schreibrichtung von rechts nach links (RTL) dreht sich alles um: auf der Leiste, im Dropdown (am rechten Rand seines Titels ausgerichtet) und in den Kaskaden, die sich nach links öffnen — links öffnet, rechts geht zurück
EingabeIn einem Dropdown: wählt den hervorgehobenen Eintrag (ue_item_selected). Auf einem Titel der Leiste öffnen Eingabe, Leertaste oder Pfeil nach unten das Menü. Die Leertaste wählt keinen Eintrag — auch die Regel von Windows
EscSchließt das offene Menü oder verlässt den Menümodus (nach Alt oder F10) und gibt den Fokus an das Steuerelement zurück, das ihn hatte. Esc bleibt bei der Leiste: es drückt nicht die Abbrechen-Schaltfläche des Fensters

Eine Menüleiste behält nie den Fokus. Ein Klick auf einen Titel, dann eine Auswahl mit der Maus: die Tastatur kehrt bevor ue_item_selected ausgelöst wird zu dem Steuerelement zurück, in dem getippt wurde. Bearbeiten > Einfügen fügt also in das bearbeitete Feld ein, und GetFocus() nennt es im Ereignis. Ein Klick, der nichts öffnet — auf einen ausgegrauten Titel oder auf den leeren Teil der Leiste —, lässt die Tastatur ebenfalls beim Steuerelement, in dem getippt wurde.


Beispiele #

Eine vollständige Menüleiste #

// Das Zeichnen waehrend des Aufbaus anhalten
uo_menus.of_set_redraw(/*on*/ false)

// Das Menue Datei, mit einem Symbol auf Oeffnen und einem Strich vor Beenden
uo_menus.of_add_menu(/*key*/ "file", /*text*/ "&Datei")
uo_menus.of_add_item(/*keys*/ "file/open", /*text*/ "&Oeffnen...", /*image*/ "mono:img\packimages.dll:svg/samples/folder-open", /*checked*/ false)
uo_menus.of_add_separator(/*keys*/ "file")
uo_menus.of_add_item(/*keys*/ "file/quit", /*text*/ "&Beenden")

// Ein Untermenue: Exportieren, dann seine beiden Formate
uo_menus.of_add_item(/*keys*/ "file/export", /*text*/ "&Exportieren")
uo_menus.of_add_item(/*keys*/ "file/export/csv", /*text*/ "CSV")
uo_menus.of_add_item(/*keys*/ "file/export/pdf", /*text*/ "PDF")

// Das Menue Ansicht: eine Option, die sich abhaken laesst
uo_menus.of_add_menu(/*key*/ "view", /*text*/ "&Ansicht")
uo_menus.of_add_item(/*keys*/ "view/grid", /*text*/ "&Raster", /*image*/ "", /*checked*/ true)

// Ein einziges Neuzeichnen, mit allem
uo_menus.of_set_redraw(/*on*/ true)

Abhaken, entfernen, ausgrauen #

// Der Benutzer hat die Rasteranzeige umgeschaltet
uo_menus.of_item(/*keys*/ "view/grid").ib_checked = not uo_menus.of_item(/*keys*/ "view/grid").ib_checked
// Ein Eintrag, der keinen Sinn mehr hat, wird ausgegraut, nicht entfernt:
// der Benutzer muss sehen koennen, dass es ihn gibt
uo_menus.of_item(/*keys*/ "file/save").ib_enabled = false

Optionseinträge und ein Zoom-Kürzel #

// Zwei OPTIONS-Eintraege: einen abzuhaken hakt den anderen ab, ein runder Punkt ersetzt das Haekchen
uo_menus.of_add_item(/*keys*/ "view/small", /*text*/ "&Kleine Symbole")
uo_menus.of_add_item(/*keys*/ "view/large", /*text*/ "&Grosse Symbole")
uo_menus.of_item(/*keys*/ "view/small").is_group = "size"
uo_menus.of_item(/*keys*/ "view/large").is_group = "size"
uo_menus.of_item(/*keys*/ "view/large").ib_checked = true

// Zoom: Ctrl++ wird angezeigt UND ist aktiv, wo auch immer der Fokus liegt
uo_menus.of_add_item(/*keys*/ "view/zoomin", /*text*/ "&Vergroessern")
uo_menus.of_item(/*keys*/ "view/zoomin").is_shortcut = "Ctrl++"

Die Leiste neu aufbauen #

// Arbeitsbereich wechseln: leeren und neu aufbauen
// of_set_redraw vermeidet ein Neuzeichnen bei jeder Zeile
uo_menus.of_set_redraw(/*on*/ false)
uo_menus.of_clear()
uo_menus.of_add_menu(/*key*/ "tools", /*text*/ "&Extras")
uo_menus.of_set_redraw(/*on*/ true)

Eine schmale Leiste, Hilfe am Ende, ein Hilfetext in der Statusleiste #

// Hilfe am Ende der Leiste ; was nicht passt, kommt in den Chevron
uo_menus.of_add_menu(/*key*/ "help", /*text*/ "&Hilfe")
uo_menus.of_add_item(/*keys*/ "help/about", /*text*/ "Info")
uo_menus.of_menu(/*key*/ "help").is_align = u_pbt_menubar.ALIGN_END

// Abschnittstitel in View
uo_menus.of_add_header(/*keys*/ "view", /*text*/ "Bereiche")
uo_menus.of_add_item(/*keys*/ "view/tree", /*text*/ "Baum")
uo_menus.of_add_item(/*keys*/ "view/output", /*text*/ "Ausgabe")

// Ein Hilfetext in der Statusleiste fuer den Eintrag unter dem Zeiger
uo_menus.ib_track_hover = true

// ue_item_hover (string as_keys) von uo_menus : leer, wenn das Dropdown schliesst
choose case as_keys
	case "file/save"
		st_status.Text = "Speichert das Dokument"
	case else
		st_status.Text = ""
end choose

Eine Liste zuletzt geöffneter Dateien, beim Öffnen gefüllt #

// Local variables
long ll_i

// Recent an SEINEM Platz in File, einmal angelegt : seine Eintraege entstehen bei jedem Oeffnen
uo_menus.of_insert_item(/*keys*/ "file/recent", /*text*/ "&Zuletzt", /*index*/ 3)

// ue_menu_opening (string as_key) von uo_menus : das Dropdown wartet darauf. File : nur die Eintraege
// von Recent, das seinen Platz behaelt. Edit : Einfuegen folgt der Zwischenablage von JETZT -
// fuer einen Klick wie fuer Strg+V.
choose case as_key
	case "file"
		uo_menus.of_clear_items(/*keys*/ "file/recent")
		for ll_i = 1 to UpperBound(is_recent_files)
			uo_menus.of_add_item(/*keys*/ "file/recent/doc" + String(ll_i), /*text*/ is_recent_files[ll_i])
		next
	case "edit"
		uo_menus.of_item(/*keys*/ "edit/paste").ib_enabled = (Clipboard() <> "")
end choose

// ue_menu_closed (string as_key) von uo_menus : ohne Auswahl geschlossen - rueckgaengig machen,
// was ue_menu_opening vorbereitet hatte
st_status.Text = ""

Das PowerBuilder-Menü eines Fensters übernehmen #

// Local variables
menu lm_item

// Das Menue des Fensters wird zur Leiste : Titel, Eintraege, Tastenkuerzel, Zustaende.
// im_frame ist eine Instanzvariable (m_frame), solange die Leiste sie braucht.
im_frame = create m_frame
uo_menus.of_load_menu(/*menu*/ im_frame)

// Das Menue bleibt massgeblich : ein Element ausgrauen, die Leiste liest es beim naechsten Oeffnen
im_frame.m_edit.m_paste.Enabled = false

// ue_item_hover (string as_keys) von uo_menus : das MicroHelp des Menueelements
lm_item = uo_menus.of_loaded_item(/*keys*/ as_keys)
if IsValid(lm_item) then st_status.Text = lm_item.MicroHelp

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
is_accessible_name · is_accessible_descriptionName und Beschreibung, die ein Bildschirmleser sagt3.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.


← Komponentenreferenz · Inhalt des Leitfadens