PBToolboxAI v5 ← Site

contextmenu — u_pbt_contextmenu #

← Komponentenreferenz · Inhalt des Handbuchs

Das Kontextmenü von Windows, im Design der Anwendung: eine kaskadierende Liste, die sich am Cursor, unter einem Steuerelement oder an einem Bildschirmpunkt öffnet — Symbole, angezeigte Tastenkürzel, Häkchen, Optionseinträge, Abschnittsüberschriften, lange Listen, die scrollen und auf Tippen reagieren.

▶ Live ansehen — Demoanwendung, Kachel Context menu: die Vorschau, der erzeugende Code und diese Seite nebeneinander.


Kurz gefasst #

Userobjectu_pbt_contextmenu
Elementklassen_pbt_contextmenu_item (of_item(keys))
Dient zuBeim Rechtsklick oder unter einer Schaltfläche die Befehle anbieten, die für das gerade Angeklickte gelten
PrinzipSie beschreiben die Einträge über ihre Adresse; Fenster, Tastatur und Kaskaden übernehmen wir
Opt-in-Optionib_track_hover

Schnellstart #

// The menu of a grid : three commands, a separator, a cascade
uo_menu.of_add_item(/*keys*/ "copy", /*text*/ "&Copy")
uo_menu.of_add_item(/*keys*/ "paste", /*text*/ "&Paste")
uo_menu.of_add_item(/*keys*/ "delete", /*text*/ "&Delete")
uo_menu.of_add_separator(/*keys*/ "")
uo_menu.of_add_item(/*keys*/ "export", /*text*/ "&Export")
uo_menu.of_add_item(/*keys*/ "export/pdf", /*text*/ "PDF")
uo_menu.of_add_item(/*keys*/ "export/csv", /*text*/ "CSV")

// It opens from the right-click event of the grid : see Where to call of_show
// event ue_item_selected of uo_menu : (string as_keys)
// as_keys is the ADDRESS of the chosen entry
choose case as_keys
	case "copy"
		of_copy_selection()
	case "export/pdf"
		of_export("pdf")
end choose

Das Menü öffnen #

Die Komponente selbst ist unsichtbar: Sie nimmt im Fenster keinen Platz ein. Legen Sie sie irgendwo ab, Breite und Höhe null — sie existiert nur, solange das Menü offen ist. Vier Arten, es zu öffnen:

// event rbuttondown of a DataWindow : the row under the cursor first
if row > 0 then dw_list.SetRow(/*row*/ row)
uo_menu.of_show()

// event ue_clicked of a "More" button : the menu hangs from it
uo_menu.of_show_under(/*control*/ uo_more)

// event rbuttondown of a DataWindow, another way : the point in the control, in
// PowerBuilder units, as PopMenu took it
uo_menu.of_show_at(/*control*/ dw_list, /*x*/ dw_list.PointerX(), /*y*/ dw_list.PointerY())

Wo of_show aufrufen #

SteuerelementEreignisGut zu wissen
DataWindowrbuttondownMachen Sie zuerst die angeklickte Zeile aktuell (SetRow(row)). Das Drücken genügt: Nur ein Drücken wählt einen Eintrag, nie das folgende Loslassen
ListView, TreeViewrightclickedDas Ereignis liefert das angeklickte Element
PBToolboxAI-Komponenteue_rclickedEine Komponente mit Elementen hat auch ein Rechtsklick-Ereignis je Element, das es über seine Adresse nennt
Eingabefeldein Benutzerereignis auf pbm_contextmenuEs kommt beim Rechtsklick; return 1 verhindert, dass das Feld zusätzlich sein eigenes Windows-Menü öffnet (Ausschneiden, Kopieren, Einfügen). Die Tastatur kommt unter PowerBuilder 10 nicht dort an: siehe das Rezept unten

of_show() öffnet sich dort, wo der Cursor ist, also wo der Benutzer geklickt hat: keine Einheit umzurechnen. of_show(x, y) erwartet Bildschirmpixel, nie die PowerBuilder-Einheiten eines auf das Steuerelement bezogenen xpos/ypos. Für einen Punkt in einem Steuerelement, in PowerBuilder-Einheiten: of_show_at(Steuerelement, x, y).

Über die Tastatur — Umschalt+F10 oder die Menütaste — ist die Maus irgendwo: Öffnen Sie das Menü unter dem Steuerelement mit dem Fokus, mit of_show_under(Steuerelement, true). Wie in Windows ist dann sein erster aktiver Eintrag markiert: Eingabe wählt ihn, die Pfeiltasten gehen von dort aus. Unter PowerBuilder 10 empfängt pbm_contextmenu nur den Rechtsklick, und Umschalt+F10 erreicht ein Eingabefeld nicht (gemessen: weder pbm_contextmenu noch pbm_keydown noch pbm_syskeydown). Die Taste, die das Menü auf einem PowerBuilder-Steuerelement öffnet, ist also die Menütaste (KeyApps!), in einem Benutzerereignis auf pbm_keydown — pbm_dwnkey bei einem DataWindow, dessen Rechtsklick über sein Ereignis rbuttondown läuft: pbm_contextmenu kommt bei einem Klick in eine Zelle dort nicht an (gemessen). Umschalt+F10 empfangen die PBToolboxAI-Komponenten selbst weiterhin (ihr ue_rclicked).

// User event ue_contextmenu of an edit field, mapped on pbm_contextmenu :
// the right-click opens the menu at the cursor
uo_menu.of_show()

// The field does not open its own Windows menu as well
return 1
// User event ue_key of the same field, mapped on pbm_keydown : the Menu key
// opens the menu under the field, its first entry highlighted
if key = KeyApps! then
	uo_menu.of_show_under(/*control*/ this, /*keyboard*/ true)
	return 1
end if

// User event ue_key of a DataWindow, mapped on pbm_dwnkey : the Menu key
if key = KeyApps! then
	uo_menu.of_show_under(/*control*/ this, /*keyboard*/ true)
	return 1
end if

Eine Antwort pro Öffnung: Ein geöffnetes Menü endet mit einer Wahl (ue_item_selected) oder ohne (ue_dismissed — ein Klick daneben, Esc, of_close). Ein Menü, das nichts zu zeigen hat, öffnet sich nicht: ue_dismissed kommt sofort. Solange das Menü auf dem Bildschirm ist, läuft die Anwendung weiter: Ein inzwischen ausgegrauter, ausgeblendeter oder entfernter Eintrag kann nicht mehr gewählt werden (stattdessen ue_dismissed), und of_remove_item, of_clear oder of_reset schließen das offene Menü. ue_dismissed(as_reason) sagt, warum: REASON_ESCAPE (Esc), REASON_OUTSIDE (ein Klick daneben), REASON_FOCUS (ein anderes Fenster hat den Fokus genommen), REASON_USER (auf andere Weise, ein anderes Menü übernimmt), REASON_CODE (of_close, ein entfernter Eintrag oder das geleerte Menü), REASON_REPLACED (ein zweites of_show), REASON_EMPTY (nichts zu zeigen), REASON_UNAVAILABLE (der gewählte Eintrag war nicht mehr verfügbar).

Ein Menü zur Zeit: Ein zweites of_show ersetzt das offene Menü, das zuerst ue_dismissed liefert. Und of_close direkt nach of_show schließt das Menü, noch bevor es gezeichnet ist — auch dann folgt ue_dismissed.

Über die Tastatur durchlaufen die Pfeiltasten die Einträge und überspringen ausgegraute, → öffnet eine Kaskade und ← schließt sie, Eingabe wählt, Esc steigt eine Ebene hinauf und schließt dann. Der unterstrichene Buchstabe — der nach & in der Beschriftung, && für ein kaufmännisches Und — wählt den Eintrag direkt; sonst führt das Tippen der ersten Buchstaben einer Beschriftung zu diesem Eintrag, Leerzeichen inbegriffen („report 2“). Eine lange Liste (auch fünfhundert Einträge und mehr) scrollt und bleibt flüssig. Von rechts nach links gelesen richtet sich das Menü rechts aus und die Kaskaden öffnen sich nach links.


Kaskaden, Abschnitte und Markierungen #

Ein Eintrag wird über seine Adresse benannt: oben sein Schlüssel allein (copy), in einer Kaskade die Schlüssel seiner Eltern und dann der eigene, durch / verbunden (export/pdf). Das Elternelement muss existieren; ein Schlüssel enthält weder / noch | und beginnt nicht mit __. ue_item_selected liefert genau diese Adresse zurück: Zwei Kaskaden dürfen ihre Einträge gleich benennen.

Eine Trennlinie (of_add_separator) und eine Abschnittsüberschrift (of_add_header) kommen ans Ende des Menüs (leere Adresse) oder der Kaskade eines Eintrags. Keine von beiden ist ein Eintrag: nie gewählt, nie gezählt. Eine Trennlinie erscheint nie am Anfang, am Ende oder doppelt; eine Überschrift, deren Einträge alle ausgeblendet sind, verschwindet mit ihnen.

Ein Häkchen (ib_checked) zeigt, dass eine Option aktiv ist; ein Optionseintrag (is_group) ist eine Wahl unter mehreren: Die Einträge einer Gruppe unter demselben Elternelement schließen sich aus — einen anzuhaken, per Code oder durch die Wahl des Benutzers, entfernt den Haken der anderen, und ein runder Punkt ersetzt das Häkchen. Das Tastenkürzel (is_shortcut) steht rechts neben dem Eintrag; es wird nur angezeigt: Die Taste gehört dem Steuerelement, um das es im Menü geht (ein Eingabefeld kopiert bereits mit Strg+C), und ein Kontextmenü, das sie belegte, nähme sie allen Steuerelementen des Fensters weg.

Ein angehakter Eintrag außerhalb einer Gruppe schaltet nicht von selbst um, wenn der Benutzer ihn wählt — wie in jedem Windows-Menü: Schalten Sie ihn in ue_item_selected um. Ein zerstörender Befehl hebt sich durch seinen Ton ab: is_tone = TONE_DANGER schreibt seinen Text im Rot des Designs, hell wie dunkel lesbar. Damit eine Option bei der Wahl von selbst umschaltet, setzen Sie ib_auto_check = true: Das Häkchen wechselt vor ue_item_selected. Eine Option ist ein Kontrollkästchen — von einem Bildschirmleser als „nicht aktiviert“ angesagt —, sobald sie einmal angehakt war oder sobald ib_checkable = true gilt.

// A section of three exclusive entries in the View cascade
uo_menu.of_add_header(/*keys*/ "view", /*text*/ "Layout")
uo_menu.of_add_item(/*keys*/ "view/list", /*text*/ "&List")
uo_menu.of_add_item(/*keys*/ "view/details", /*text*/ "&Details")
uo_menu.of_item(/*keys*/ "view/list").is_group = "layout"
uo_menu.of_item(/*keys*/ "view/details").is_group = "layout"

// Checking one unchecks the other
uo_menu.of_item(/*keys*/ "view/details").ib_checked = true

// The shortcut SHOWN at the right of an entry
uo_menu.of_item(/*keys*/ "copy").is_shortcut = "Ctrl+C"

// A command that destroys : the red of the theme
uo_menu.of_item(/*keys*/ "delete").is_tone = uo_menu.TONE_DANGER

// event ue_item_selected : a check mark outside a group is switched by you
if as_keys = "wrap" then uo_menu.of_item(/*keys*/ as_keys).ib_checked = not uo_menu.of_item(/*keys*/ as_keys).ib_checked

// ... or by the entry itself, before ue_item_selected
uo_menu.of_item(/*keys*/ "grid").ib_auto_check = true

Ein PowerBuilder-Menü übernehmen #

Ihre Popup-Menüs sind schon geschrieben? of_load_menu macht daraus das Menü der Komponente: Übergeben Sie das Element, auf dem Sie PopMenu aufriefen. Jedes Element wird ein Eintrag, Kaskaden inbegriffen, mit seinem Text (& inbegriffen), seinem Zustand (Enabled, Checked, Visible), seinem rechts angezeigten Shortcut — wie der Text nach einem Tabulator — und seinem Symbolleistenbild, wenn es eine vorhandene Datei ist. Sein Schlüssel ist der ClassName des Elements, auf jeder Ebene. Bei einer Wahl läuft zuerst das Clicked-Skript des Elements, dann ue_item_selected: Der für PopMenu geschriebene Code funktioniert weiter. Das Menü bleibt lebendig, wie mit PopMenu: Jedes Öffnen liest die Elemente erneut (Text, Enabled, Checked, Visible, Shortcut). Der Code vor PopMenu — m_paste.Enabled = (Clipboard() <> "") — und ein Clicked, das this.Checked = not this.Checked ausführt, zeigen sich also beim nächsten Öffnen; ein Element, das bei offenem Menü ausgegraut oder ausgeblendet wird, startet sein Clicked nicht (ue_dismissed(REASON_UNAVAILABLE)). Halten Sie das Menüobjekt am Leben, solange die Komponente es nutzt. of_loaded_item liefert das Element eines Eintrags, um zu lesen, was nur das Menü weiß (seine MicroHelp) — prüfen Sie es mit IsValid, ein von Hand hinzugefügter Eintrag hat keines. Ein Clicked-Skript, das ParentWindow liest, findet dort ein gültiges Fenster — gemessen unter PowerBuilder 10, auch für ein mit create erzeugtes und nie an ein Fenster gebundenes Menü —, doch PowerBuilder wählt es aus: Nichts garantiert, dass es das Fenster ist, das das Kontextmenü trägt. Damit ein Clicked ein bestimmtes Fenster erreicht, geben Sie es dem Menü in einer Instanzvariablen, gesetzt vor of_load_menu, oder verlegen Sie diesen Code nach ue_item_selected.

// Instance variable of the window : the menu lives as long as it does
// m_popup im_popup

// open event of the window : the items of m_popup.m_edit become the menu
im_popup = create m_popup
uo_menu.of_load_menu(/*menu*/ im_popup.m_edit)

// event rbuttondown of the DataWindow : the code before PopMenu stays,
// of_show replaces PopMenu - the items are read again as it opens
im_popup.m_edit.m_paste.Enabled = (Clipboard() <> "")
uo_menu.of_show()

// event ue_item_hover of uo_menu (ib_track_hover = true) : the MicroHelp
if IsValid(uo_menu.of_loaded_item(/*keys*/ as_keys)) then st_help.text = uo_menu.of_loaded_item(/*keys*/ as_keys).MicroHelp
// A Clicked that must reach ONE given window : the menu keeps that window
// itself. Instance variable of m_popup : window iw_owner
// Clicked of m_edit.m_copy
iw_owner.TriggerEvent("ue_copy")

// open event of the window, before of_load_menu
im_popup.iw_owner = this

Eigenschaften #

EigenschaftTypStandardRolle
ib_track_hoverbooleanfalseSchaltet ue_item_hover ein, das meldet, auf welchem Eintrag Mauszeiger oder Tastatur stehen — für die Hilfezeile einer Statusleiste. Ohne sie meldet das Menü es nicht einmal: Ein bei jeder Bewegung ausgelöstes Ereignis wird nur einer Anwendung gesendet, die es angefordert hat — setzen Sie sie vor of_show: Bei offenem Menü geändert, gilt sie ab dem nächsten Öffnen
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)

Methoden #

MethodeRolle
of_add_header (string as_keys, string as_text)Fügt am Ende des Menüs (leere Adresse) oder der Kaskade eines Eintrags eine Abschnittsüberschrift hinzu: eine Titelzeile über den folgenden Einträgen. Nie gewählt oder gezählt. Gibt 0 zurück, sobald hinzugefügt, -5, wenn an dieser Adresse kein Eintrag existiert, -2, wenn die Komponente nicht erstellt ist
of_add_item (string as_keys, string as_text)Fügt einen Eintrag an seiner Adresse hinzu: copy im Menü, export/pdf in der Kaskade eines vorhandenen Eintrags export, so tief wie nötig. Eine leere Beschriftung zeigt den Schlüssel; & kennzeichnet den Buchstaben, der ihn über die Tastatur wählt. Gibt 0 zurück, sobald hinzugefügt, -5, wenn die Adresse abgelehnt wird (Elternelement nicht gefunden, Adresse schon vergeben, leere Ebene wie export/, Schlüssel mit ` oder beginnend mit __), -2`, wenn die Komponente nicht erstellt ist
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)Ebenso, mit Symbol und Häkchen — das Symbol an dritter Stelle, wie überall in der Bibliothek. Ein Eintrag wird über seinen Handle ausgegraut: of_item(keys).ib_enabled = false. Gibt 0 zurück, sobald hinzugefügt, -5, wenn die Adresse abgelehnt wird, -2, wenn die Komponente nicht erstellt ist
of_add_separator (string as_keys)Fügt am Ende des Menüs (leere Adresse) oder der Kaskade eines Eintrags eine Trennlinie hinzu. Gibt 0 zurück, sobald hinzugefügt, -5, wenn an dieser Adresse kein Eintrag existiert, -2, wenn die Komponente nicht erstellt ist
of_clear ( )Leert das Menü und gibt die über of_item erhaltenen Handles frei. Ein offenes Menü schließt sich, und ue_dismissed meldet es. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_close ( )Schließt das Menü der Komponente, wenn es auf dem Bildschirm ist, ohne Wahl: ue_dismissed folgt, wie bei einem Klick daneben. Nichts offen, nichts geschieht. Gibt 0 zurück, sobald angefordert, -2, wenn die Komponente nicht erstellt ist
of_insert_item (string as_keys, string as_text, long al_index)Fügt einen Eintrag an einem Rang seiner Liste ein statt an ihrem Ende: as_keys ist die Adresse, die er haben wird, al_index seine Stelle unter den Einträgen dieser Liste, ab 1 (0 oder weniger = der erste, darüber hinaus = das Ende). Trennlinien und Überschriften zählen nicht: Der Eintrag kommt direkt vor den, der diesen Rang innehatte. Gibt 0 zurück, sobald hinzugefügt, -5, wenn die Adresse abgelehnt wird (wie bei of_add_item), -2, wenn die Komponente nicht erstellt ist
of_insert_item (string as_keys, string as_text, string as_image, boolean ab_checked, long al_index)Ebenso, mit Symbol und Häkchen, wie of_add_item sie nimmt. Gibt 0 zurück, sobald hinzugefügt, -5, wenn die Adresse abgelehnt wird, -2, wenn die Komponente nicht erstellt ist
of_is_open ( )true, solange ein Menü der Komponente auf dem Bildschirm ist — geöffnet und noch nicht durch eine Wahl oder ein Schließen beantwortet
of_item (string as_keys)Gibt den Handle eines Eintrags über seine Adresse zurück, um ihn später zu lesen oder zu ändern (Beschriftung, Zustand, Symbol, Tastenkürzel, Gruppe, Farben). Ein einzelner Schlüssel wird in die vollständige Adresse des einzigen Eintrags aufgelöst, der ihn trägt: of_item("pdf") und of_item("export/pdf") geben dann denselben Handle zurück. Mehrdeutig oder von keinem Eintrag getragen, gibt er einen Handle zurück, der nichts ändert, statt des falschen Eintrags
of_load_menu (menu am_menu)Baut das Menü aus einem PowerBuilder-Menü: Übergeben Sie das Element, auf dem Sie PopMenu aufriefen. Seine Elemente werden die Einträge, Kaskaden inbegriffen, Schlüssel = ClassName; bei einer Wahl läuft das Clicked des Elements vor ue_item_selected. Die Elemente werden bei jedem Öffnen neu gelesen. Das Menü ersetzt, was die Komponente enthielt. Gibt 0 zurück, sobald geladen, -5, wenn das Menü ungültig ist, -2, wenn die Komponente nicht erstellt ist
of_loaded_item (string as_keys)Das PowerBuilder-Menüelement, aus dem ein Eintrag stammt (of_load_menu), über seine Adresse — um seine MicroHelp zu lesen. Eine Adresse, die nicht aus einem Menü stammt, liefert einen ungültigen Verweis: Prüfen Sie ihn mit IsValid
of_remove_item (string as_keys)Entfernt einen Eintrag samt Kaskade; die anderen bleiben. Seine Handles werden freigegeben; ein offenes Menü schließt sich (ue_dismissed). Gibt 0 zurück, sobald entfernt, -5, wenn an dieser Adresse kein Eintrag existiert, -2, wenn die Komponente nicht erstellt ist
of_reset ( )Leert das Menü und setzt jede Eigenschaft auf ihren Standardwert zurück, ohne ein Ereignis auszulösen. Gibt 0 zurück, sobald angewendet, -2, wenn die Komponente nicht erstellt ist
of_show ( )Öffnet das Menü am Cursor. Rufen Sie es aus dem Rechtsklick des Steuerelements auf, das die Geste empfängt. Ein Menü ohne sichtbaren Eintrag öffnet sich nicht: ue_dismissed wird ausgelöst. Gibt 0 zurück, sobald angefordert, -2, wenn die Komponente nicht erstellt ist
of_show (long al_x, long al_y)Ebenso, an einer Bildschirmposition in Pixeln. Negative Koordinaten sind ein echter Punkt: ein Bildschirm links oder oberhalb des Hauptbildschirms. Gibt 0 zurück, sobald angefordert, -2, wenn die Komponente nicht erstellt ist
of_show_at (dragobject ado_control, long al_x, long al_y)Öffnet das Menü an einem Punkt in einem Steuerelement, in PowerBuilder-Einheiten ab seiner linken oberen Ecke — der Punkt, den PopMenu nahm: of_show_at(dw_list, dw_list.PointerX(), dw_list.PointerY()). Das Steuerelement wird gemerkt: of_source nennt es. Gibt 0 zurück, sobald angefordert, -5, wenn das Steuerelement ungültig oder eine Koordinate null ist, -2, wenn die Komponente nicht erstellt ist
of_show_under (dragobject ado_control)Öffnet das Menü unter einem Steuerelement: Es hängt an dessen Unterkante, an seiner Anfangskante ausgerichtet (seiner rechten Kante bei Rechts-nach-links-Layout), und öffnet sich darüber, wenn der Bildschirm darunter endet. Gibt 0 zurück, sobald angefordert, -5, wenn das Steuerelement ungültig ist, -2, wenn die Komponente nicht erstellt ist — unter einer Komponente mit Elementen (eine Buttonbar, eine Toolbar) hängt das Menü unter der ganzen Komponente, nicht unter einer ihrer Schaltflächen
of_show_under (dragobject ado_control, boolean ab_keyboard)Ebenso, mit der Angabe, wie das Menü angefordert wurde: true für die Tastatur (Umschalt+F10, Menütaste) — der erste aktive Eintrag ist markiert, Eingabe wählt ihn, wie in Windows. Gibt 0 zurück, sobald angefordert, -5, wenn das Steuerelement ungültig ist, -2, wenn die Komponente nicht erstellt ist
of_source ( )Das Steuerelement, aus dem das Menü auf dem Bildschirm — oder das letzte — geöffnet wurde: das an of_show_under oder of_show_at übergebene. Lesen Sie es in ue_item_selected, wenn ein Menü mehreren Steuerelementen dient. Ein am Cursor oder an einem Bildschirmpunkt (of_show) geöffnetes Menü hat keines: Der Verweis ist ungültig, prüfen Sie ihn mit IsValid

Ereignisse #

EreignisAusgelöst wenn
ue_item_selected (string as_keys)Der Benutzer hat einen Eintrag gewählt, per Maus oder Tastatur. as_keys ist seine vollständige Adresse (export/pdf). Ein Eintrag einer Gruppe wird vor dem Ereignis angehakt und die anderen seiner Gruppe abgehakt
ue_dismissed (string as_reason)Das Menü wurde ohne Wahl geschlossen: ein Klick daneben, Esc, of_close, ein entfernter Eintrag oder das geleerte Menü, während es offen war, ein zweites of_show, das es ersetzt hat — und auch, wenn of_show nichts zu zeigen hatte — as_reason sagt, welches: REASON_ESCAPE, REASON_OUTSIDE, REASON_FOCUS, REASON_USER, REASON_CODE, REASON_REPLACED, REASON_EMPTY, REASON_UNAVAILABLE (ein seit dem Öffnen ausgegrauter, ausgeblendeter oder entfernter Eintrag)
ue_item_hover (string as_keys)Mit ib_track_hover = true: der Eintrag, auf dem der Mauszeiger steht, über seine Adresse — auch ein ausgegrauter, damit seine Hilfe sagen kann, warum; über die Tastatur die Einträge, auf denen sie stehen bleibt, ausgegraute übersprungen. Einmal pro Eintrag ausgelöst, dann mit einer leeren Adresse, wenn das Menü schließt: Leeren Sie dann die Hilfezeile. of_reset schließt ein offenes Menü, ohne es auszulösen: Leeren Sie sie selbst

Elementeigenschaften #

EigenschaftTypStandardRolle
is_textstring""Beschriftung des Eintrags. & kennzeichnet den Buchstaben, der ihn über die Tastatur wählt (&& für ein kaufmännisches Und); leer, wird der Schlüssel angezeigt und die Beschriftung leer zurückgelesen
ib_enabledbooleantrueAuf false gesetzt, ist der Eintrag ausgegraut: angezeigt, nie gewählt, seine Kaskade geschlossen
ib_visiblebooleantrueAuf false gesetzt, verlässt der Eintrag das Menü — samt Kaskade —, ohne entfernt zu werden: Er behält Schlüssel und Zustand und kehrt an seinen Platz zurück. Eine Kaskade, deren Einträge alle ausgeblendet sind, bleibt ausgegraut
ib_checkedbooleanfalseEin Häkchen am Eintrag — ein runder Punkt bei einem Eintrag einer Gruppe. Einen Eintrag einer Gruppe anzuhaken, entfernt den Haken der anderen der Gruppe; außerhalb einer Gruppe schaltet der Eintrag bei der Wahl nicht von selbst um: Tun Sie es in ue_item_selected, oder setzen Sie ib_auto_check
ib_checkablebooleanfalseEin Kontrollkästchen: Die Option wird auch nicht angehakt als solches gezeigt und angesagt („nicht aktiviert“ für einen Bildschirmleser). Ein einmal angehakter Eintrag wird es von selbst; setzen Sie es für eine Option, die nicht angehakt beginnt. Ein Optionseintrag (is_group) ist nie eines
ib_auto_checkbooleanfalseAuf true gesetzt, schaltet die Wahl des Eintrags sein Häkchen von selbst um, vor ue_item_selected — ib_checked nennt dort den neuen Zustand. Er wird ein Kontrollkästchen; ohne Wirkung auf einen Eintrag einer Gruppe
is_groupstring""Macht den Eintrag zu einem Optionseintrag der genannten Gruppe: Die Einträge einer Gruppe unter demselben Elternelement schließen sich aus. Leer: ein gewöhnlicher Eintrag
is_imagestring""Symbol des Eintrags, an Ort und Stelle geändert. Dieselben Pfade wie bei of_add_item (mono:, tint:, datei.dll:NAME); leer, verschwindet es
is_shortcutstring""Das rechts neben dem Eintrag angezeigte Tastenkürzel (Ctrl+C). Nur angezeigt: Die Taste gehört dem Steuerelement, um das es im Menü geht. Nie an einem Eintrag gezeigt, der eine Kaskade öffnet
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_contextmenu
il_accentlong-1Akzent dieses Eintrags: sein Häkchen und sein Rand, wenn er angezeigt wird (-1 = der des Designs)
il_back_colorlong-1Hintergrund dieses Eintrags im Ruhezustand (-1 = der des Designs). Allein gesetzt, nimmt der Text eine darauf lesbare Farbe an
il_text_colorlong-1Textfarbe dieses Eintrags (-1 = die des Designs). Eine einzige Farbe ist nicht auf hellem und dunklem Design lesbar: Setzen Sie il_back_color dazu, oder nehmen Sie lieber is_tone, das dem Design folgt
il_back_color_hoverlong-1Hintergrund dieses Eintrags, solange auf ihn gezeigt wird (-1 = der des Designs)
il_text_color_hoverlong-1Textfarbe dieses Eintrags, solange auf ihn gezeigt wird (-1 = die des Designs): Setzen Sie il_back_color_hover dazu, der Hover des Designs wechselt von Design zu Design

Ein Eintrag zeigt keine QuickInfo: Das native Menü hat keine. Das vom Handle geerbte is_tooltip wird gespeichert und lässt sich zurücklesen, wird aber nie angezeigt — für eine Hilfe ib_track_hover und ue_item_hover.


Beispiele #

Ein Menü für das Angeklickte #

// event ue_rclicked of the list : the menu is rebuilt for the current row
uo_menu.of_clear()
uo_menu.of_add_item(/*keys*/ "open", /*text*/ "&Open")
uo_menu.of_add_item(/*keys*/ "rename", /*text*/ "Re&name")
uo_menu.of_add_separator(/*keys*/ "")
uo_menu.of_add_item(/*keys*/ "delete", /*text*/ "&Delete")

// A row the user may not change : its commands are greyed
uo_menu.of_item(/*keys*/ "rename").ib_enabled = ib_can_edit
uo_menu.of_item(/*keys*/ "delete").ib_enabled = ib_can_edit

// At the cursor
uo_menu.of_show()

Eine Schaltfläche Mehr #

// event ue_clicked of the button : the menu hangs from it
uo_menu.of_show_under(/*control*/ uo_more)

Eine Hilfezeile in der Statusleiste #

// Once, after the menu is built : report the pointed entry
uo_menu.ib_track_hover = true

// event ue_item_hover of uo_menu : (string as_keys), "" when the menu closes
choose case as_keys
	case "delete"
		st_help.text = "Deletes the row, without the clipboard."
	case else
		st_help.text = ""
end choose

Bewährte Praxis #

Demoversion #

Ohne Schlüssel zeigt jede Liste des Menüs — die Wurzel wie jede Kaskade — ihre ersten sechs sichtbaren Einträge; Trennlinien und Überschriften zählen nicht. Die letzte, ausgegraute Zeile sagt, wie viele Einträge nicht angezeigt werden — oder trägt, wenn nichts gekürzt ist, den Vermerk „PBToolboxAI — DEMO“. Das Modell behält alles: Ein Schlüssel zeigt beim nächsten Öffnen das ganze Menü.

Der Starter hat keine Fläche: Von den unten geerbten Mitgliedern haben of_save_as_png, of_print und of_focus_webview nichts aufzunehmen, zu drucken oder zu empfangen. of_register_shortcut bleibt nützlich — ein Fensterkürzel, das das Menü mit of_show_under öffnet.

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

Bei diesem unsichtbaren Starter durchlaufen of_count und of_keys_at, was Sie hinzugefügt haben, ausgeblendete Zweige eingeschlossen — nicht, was das Rad zeichnen wird. Der Bildexport, das Drucken, of_focus_webview und of_set_redraw haben hier keine nützliche Wirkung: Die Komponente zeichnet nichts Eigenes, das Rad lebt in seinem eigenen Fenster.

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