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 #
| Userobject | u_pbt_menubar |
| Item-Klasse | n_pbt_menubar_item (ein Eintrag) · n_pbt_menubar_menu (ein Menü der Leiste) |
| Dient zu | Ihrem Fenster die Menüleiste der Anwendung geben, im selben Thema wie alles andere |
| Prinzip | Sie 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:
| Ebene | Hinzugefügt durch | Schlüssel |
|---|---|---|
| Das Menü der Leiste | of_add_menu | sein Schlüssel, file |
| Der Eintrag eines Menüs | of_add_item | die Adresse menu/eintrag, file/open |
| Der Untereintrag eines Eintrags | of_add_item | die 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_separatorzieht einen Strich am Ende eines Menüs (file) oder der Kaskade eines Eintrags (file/export), und danach gibt es nichts zurückzulesen.
Eigenschaften #
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs) |
is_tooltip | string | "" | Einfacher Tooltip beim Überfahren der Komponente |
is_super_tooltip_title | string | "" | Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Tooltips (Rich-Markup erlaubt) |
is_super_tooltip_image | string | "" | Bild des erweiterten Tooltips |
ib_wrap | boolean | false | false (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_hover | boolean | false | Abonnement 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.
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_text | string | — | Ändert die Beschriftung des Eintrags, im laufenden Betrieb |
ib_enabled | boolean | true | Eintrag aktiv; ein ausgegrauter Eintrag reagiert nicht mehr auf Klicks |
ib_visible | boolean | true | Eintrag 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_shortcut | string | "" | 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_checked | boolean | false | Häkchen vor dem Eintrag — für eine Option, die an- und ausgeht |
is_image | string | "" | 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_group | string | "" | 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_tone | string | "" | 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_accent | long | -1 | Akzent dieses Eintrags: sein Häkchen und sein Rand unter dem Zeiger (-1 = der des Themas) |
il_back_color | long | -1 | Hintergrund dieses Eintrags im Aufklappmenü, in Ruhe |
il_text_color | long | -1 | Textfarbe dieses Eintrags |
il_back_color_hover | long | -1 | Hintergrund dieses Eintrags unter dem Zeiger |
il_text_color_hover | long | -1 | Textfarbe dieses Eintrags unter dem Zeiger |
is_tooltip | string | "" | 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_title | string | "" | Titel seines erweiterten Tooltips — gespeichert, nicht angezeigt (siehe is_tooltip) |
is_super_tooltip_text | string | "" | Text seines erweiterten Tooltips — gespeichert, nicht angezeigt |
is_super_tooltip_image | string | "" | 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.
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_text | string | — | Beschriftung des Menüs, & inklusive (Mnemonik), geändert ohne die Leiste neu aufzubauen |
ib_enabled | boolean | true | Ausgegrautes Menü: es öffnet sich nicht mehr, seine Einträge und ihre Tastenkürzel mit ihm; die Tastatur überspringt es |
ib_visible | boolean | true | Das 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_align | string | "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_accent | long | -1 | Akzent dieses Menüs: ein Strich unter seinem Titel, solange sein Aufklappmenü offen ist (-1 = keiner) |
il_back_color | long | -1 | Hintergrund seines Titels, in Ruhe |
il_text_color | long | -1 | Textfarbe seines Titels, in Ruhe |
il_back_color_hover | long | -1 | Hintergrund seines Titels unter dem Zeiger oder geöffnet |
il_text_color_hover | long | -1 | Textfarbe seines Titels unter dem Zeiger oder geöffnet |
is_tooltip | string | "" | Tooltip, wenn der Zeiger auf seinem Titel ruht |
is_super_tooltip_title | string | "" | Titel des erweiterten Tooltips seines Titels |
is_super_tooltip_text | string | "" | Text dieses erweiterten Tooltips (Rich-Markup erlaubt) |
is_super_tooltip_image | string | "" | Bild dieses erweiterten Tooltips |
Methoden #
| Methode | Rolle |
|---|---|
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) → long | Setzt 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_item | Handle 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_menu | Handle 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) → long | Entfernt 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) → long | Entfernt 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) → long | Fü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) → long | Dasselbe, 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) → long | Leert 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 ( ) → long | Schließ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 ( ) → boolean | TRUE, 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) → long | Baut 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) → menu | Das 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 #
| Event | Ausgelö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 undue_auto_heightwird einmal ausgelöst. Mitib_wrap = truebricht die Leiste um: Sie scrollt nie, ihre Höhe folgt den Zeilen undue_auto_heightsagt Ihnen bei jeder Breitenänderung, um wie viel. Das Öffnen des Chevrons löstue_menu_openingfür jedes angezeigte Menü aus (und beim Schließenue_menu_closedfür jedes): eine Anwendung, die ihre Listen beim Öffnen füllt, füllt sie alle.
Über die Tastatur #
| Taste | Wirkung |
|---|---|
| Alt · F10 | Gibt 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 |
| Pfeiltasten | Durchlaufen 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 |
| Eingabe | In 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 |
| Esc | Schließ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_selectedausgelöst wird zu dem Steuerelement zurück, in dem getippt wurde.Bearbeiten > Einfügenfügt also in das bearbeitete Feld ein, undGetFocus()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 #
- Geben Sie jeder Ebene einen stabilen fachlichen Schlüssel (
file,save):ue_item_selectedliefert die Adressefile/save, nie die Beschriftung — sie ändert sich nicht mit der Sprache. - Grauen Sie aus, statt zu entfernen: ein fehlender Eintrag lässt den Benutzer suchen, ein ausgegrauter sagt ihm, dass es ihn gibt und etwas fehlt.
- Klammern Sie den Aufbau in
of_set_redraw(false)/of_set_redraw(true): eine vollständige Leiste sind schnell dreißig Aufrufe. - Verschieben Sie im Event
ue_auto_height, was unter der Leiste liegt — die Höhe hängt vom Thema und der Schriftgröße ab, sie ist nicht überall gleich. - Die Beschriftungen gehören Ihnen: übersetzen Sie sie vor
of_add_item, oder ändern Sie sie live überof_item(...).is_text/of_menu(...).is_text.of_set_translationübersetzt nur die eigenen Texte einer Komponente, und die Menüleiste hat keine. - Setzen Sie ein
&in jeden Titel (&Datei): Alt + der Buchstabe öffnet das Menü von überall, wie in jeder Windows-Anwendung.
Vom gemeinsamen Sockel geerbt #
Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_count · of_keys_at · of_has | Durchlaufen, was die Komponente enthält | 3.2 Die Items |
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.1 Die Eigenschaften-Engine |
is_accessible_name · is_accessible_description | Name und Beschreibung, die ein Bildschirmleser sagt | 3.4 Optionale Eigenschaften und Events |
Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.