PBToolboxAI v5 ← Site

contextmenu — u_pbt_contextmenu #

← Riferimento dei componenti · Sommario della guida

Il menu contestuale di Windows, con il tema dell'applicazione: un elenco a cascata che si apre al cursore, sotto un controllo o in un punto dello schermo — icone, scorciatoie mostrate, segni di spunta, voci radio, intestazioni di sezione, elenchi lunghi che scorrono e rispondono alla digitazione.

▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Context menu: l'anteprima, il codice che lo produce e questa pagina, affiancati.


In breve #

Userobjectu_pbt_contextmenu
Classe di elementin_pbt_contextmenu_item (of_item(keys))
Serve aOffrire, al clic destro o sotto un pulsante, i comandi che valgono per ciò che si ha sotto mano
PrincipioVoi descrivete le voci con il loro indirizzo; la finestra, la tastiera e le cascate sono nostre
Opzione opt-inib_track_hover

Avvio rapido #

// 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

Aprire il menu #

Il componente in sé è invisibile: non occupa spazio nella finestra. Posatelo dove volete, larghezza e altezza nulle — esiste solo finché il menu è aperto. Quattro modi per aprirlo:

// 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())

Dove chiamare of_show #

ControlloEventoDa sapere
DataWindowrbuttondownRendete prima corrente la riga cliccata (SetRow(row)). La pressione va bene: solo una pressione sceglie una voce, mai il rilascio che la segue
ListView, TreeViewrightclickedL'evento fornisce l'elemento cliccato
Componente PBToolboxAIue_rclickedUn componente con elementi ha anche un evento di clic destro di elemento, che lo nomina con il suo indirizzo
Campo di immissioneun evento utente su pbm_contextmenuArriva al clic destro; return 1 impedisce al campo di aprire anche il proprio menu Windows (Taglia, Copia, Incolla). La tastiera non vi arriva con PowerBuilder 10: vedere la ricetta qui sotto

of_show() si apre dove si trova il cursore, cioè dove l'utente ha cliccato: nessuna unità da convertire. of_show(x, y) attende pixel dello schermo, mai le unità PowerBuilder di un xpos/ypos relativo al controllo. Per un punto dentro un controllo, in unità PowerBuilder, c'è of_show_at(controllo, x, y).

Da tastiera — Maiusc+F10 o il tasto Menu — il mouse è ovunque: aprite il menu sotto il controllo che ha il focus, con of_show_under(controllo, true). Come in Windows, la sua prima voce attiva è allora evidenziata: Invio la sceglie, le frecce partono da lì. Con PowerBuilder 10, pbm_contextmenu riceve solo il clic destro, e Maiusc+F10 non raggiunge un campo di immissione (misurato: né pbm_contextmenu, né pbm_keydown, né pbm_syskeydown). Il tasto che apre il menu su un controllo PowerBuilder è quindi il tasto Menu (KeyApps!), preso in un evento utente su pbm_keydown — pbm_dwnkey per un DataWindow, il cui clic destro passa per il suo evento rbuttondown: pbm_contextmenu non vi arriva per un clic in una cella (misurato). Maiusc+F10 resta ricevuto dai componenti PBToolboxAI stessi (il loro 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

Una sola risposta per apertura: un menu aperto termina con una scelta (ue_item_selected) o senza (ue_dismissed — un clic fuori, Esc, of_close). Un menu che non ha nulla da mostrare non si apre: ue_dismissed arriva subito. Mentre il menu è sullo schermo l'applicazione continua a girare: una voce disattivata, nascosta o rimossa nel frattempo non può più essere scelta (al suo posto ue_dismissed), e of_remove_item, of_clear o of_reset chiudono il menu aperto. ue_dismissed(as_reason) dice perché: REASON_ESCAPE (Esc), REASON_OUTSIDE (un clic fuori), REASON_FOCUS (un'altra finestra ha preso il focus), REASON_USER (in altro modo, un altro menu che subentra), REASON_CODE (of_close, una voce rimossa o il menu svuotato), REASON_REPLACED (un secondo of_show), REASON_EMPTY (nulla da mostrare), REASON_UNAVAILABLE (la voce scelta non era più disponibile).

Un menu alla volta: un secondo of_show sostituisce il menu aperto, che risponde prima ue_dismissed. E of_close chiamato subito dopo of_show chiude il menu prima ancora che sia disegnato — segue anche ue_dismissed.

Da tastiera, le frecce scorrono le voci saltando quelle disattivate, → apre una cascata e ← la richiude, Invio sceglie, Esc risale di un livello poi chiude. La lettera sottolineata — quella dopo & nell'etichetta, && per una e commerciale — sceglie subito la voce; altrimenti, digitare le prime lettere di un'etichetta porta a quella voce, spazi compresi («report 2»). Un elenco lungo (anche cinquecento voci e più) scorre e resta fluido. Letto da destra a sinistra, il menu si allinea a destra e le cascate si aprono verso sinistra.


Cascate, sezioni e segni #

Una voce si designa con il suo indirizzo: la sola chiave al primo livello (copy), le chiavi dei genitori poi la sua, unite da /, in una cascata (export/pdf). Il genitore deve esistere; una chiave non contiene né / né | e non inizia con __. ue_item_selected restituisce lo stesso indirizzo: due cascate possono dare alle voci lo stesso nome.

Un separatore (of_add_separator) e un'intestazione di sezione (of_add_header) si mettono alla fine del menu (indirizzo vuoto) o della cascata di una voce. Nessuno dei due è una voce: mai scelti, mai contati. Un separatore non appare mai in testa, in coda né doppio; un'intestazione le cui voci sono tutte nascoste sparisce con esse.

Un segno di spunta (ib_checked) dice che un'opzione è attiva; una voce radio (is_group) è una scelta fra più: le voci di uno stesso gruppo sotto lo stesso genitore si escludono — spuntarne una, dal codice o per scelta dell'utente, toglie la spunta alle altre, e un pallino tondo sostituisce la spunta. La scorciatoia (is_shortcut) si vede a destra della voce; è solo mostrata: il tasto appartiene al controllo di cui parla il menu (un campo di immissione copia già con Ctrl+C), e un menu contestuale che lo armasse lo toglierebbe a tutti i controlli della finestra.

Una voce spuntata fuori da un gruppo non si commuta da sola quando l'utente la sceglie — come in ogni menu Windows: commutatela in ue_item_selected. Un comando che distrugge si distingue per il suo tono: is_tone = TONE_DANGER scrive il suo testo nel rosso del tema, leggibile in chiaro come in scuro. Perché un'opzione si commuti da sola alla scelta, impostate ib_auto_check = true: la spunta cambia prima di ue_item_selected. Un'opzione è una casella di controllo — annunciata «non selezionata» da un lettore di schermo — appena è stata spuntata una volta, o appena ib_checkable = true.

// 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

Riprendere un menu PowerBuilder #

I vostri menu a comparsa sono già scritti? of_load_menu ne fa il menu del componente: passate l'elemento su cui chiamavate PopMenu. Ogni elemento diventa una voce, cascate comprese, con il suo testo (& compreso), il suo stato (Enabled, Checked, Visible), il suo Shortcut mostrato a destra — come il testo dopo una tabulazione — e la sua immagine della barra degli strumenti quando è un file presente. La sua chiave è il ClassName dell'elemento, a ogni livello. Alla scelta, lo script Clicked dell'elemento viene eseguito per primo, poi ue_item_selected: il codice scritto per PopMenu continua a funzionare. Il menu resta vivo, come con PopMenu: ogni apertura rilegge gli elementi (Text, Enabled, Checked, Visible, Shortcut). Il codice che precedeva PopMenu — m_paste.Enabled = (Clipboard() <> "") — e un Clicked che fa this.Checked = not this.Checked si vedono quindi all'apertura successiva; un elemento disattivato o nascosto mentre il menu è aperto non esegue il suo Clicked (ue_dismissed(REASON_UNAVAILABLE)). Mantenete vivo l'oggetto menu finché il componente lo usa. of_loaded_item restituisce l'elemento di una voce, per leggere ciò che solo il menu sa (la sua MicroHelp) — verificatelo con IsValid, una voce aggiunta a mano non ne ha. Uno script Clicked che legge ParentWindow vi trova una finestra valida — misurato con PowerBuilder 10, anche per un menu creato con create e mai collegato a una finestra — ma è PowerBuilder a sceglierla: nulla garantisce che sia la finestra che porta il menu contestuale. Perché un Clicked raggiunga una finestra precisa, datela al menu in una variabile d'istanza, impostata prima di of_load_menu, o spostate quel codice in 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

Proprietà #

ProprietàTipoPredefinitoRuolo
ib_track_hoverbooleanfalseAttiva ue_item_hover, che dice su quale voce si trovano il puntatore o la tastiera — per la riga di aiuto di una barra di stato. Senza di esso il menu non lo riporta nemmeno: un evento sollevato a ogni movimento è inviato solo all'applicazione che l'ha chiesto — impostatelo prima di of_show: cambiato a menu aperto, vale dall'apertura successiva
is_theme_stylestring""Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio
is_theme_modestring""Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio
il_theme_accentlong-1Colore d'accento di questo componente (-1 = accento dell'applicazione, o quello del tema)

Metodi #

MetodoRuolo
of_add_header (string as_keys, string as_text)Aggiunge un'intestazione di sezione alla fine del menu (indirizzo vuoto) o della cascata di una voce: una riga di titolo sopra le voci che la seguono. Mai scelta né contata. Restituisce 0 una volta aggiunta, -5 quando nessuna voce vive a quell'indirizzo, -2 quando il componente non è creato
of_add_item (string as_keys, string as_text)Aggiunge una voce al suo indirizzo: copy nel menu, export/pdf nella cascata di una voce export esistente, alla profondità necessaria. Un'etichetta vuota mostra la chiave; & indica la lettera che la sceglie da tastiera. Restituisce 0 una volta aggiunta, -5 quando l'indirizzo è rifiutato (genitore non trovato, indirizzo già preso, livello vuoto come export/, chiave con ` o che inizia con __), -2` quando il componente non è creato
of_add_item (string as_keys, string as_text, string as_image, boolean ab_checked)Uguale, con l'icona e la spunta — l'icona per terza, come ovunque nella libreria. Una voce si disattiva tramite il suo handle: of_item(keys).ib_enabled = false. Restituisce 0 una volta aggiunta, -5 quando l'indirizzo è rifiutato, -2 quando il componente non è creato
of_add_separator (string as_keys)Aggiunge un separatore alla fine del menu (indirizzo vuoto) o della cascata di una voce. Restituisce 0 una volta aggiunto, -5 quando nessuna voce vive a quell'indirizzo, -2 quando il componente non è creato
of_clear ( )Svuota il menu e libera gli handle ottenuti con of_item. Un menu aperto si chiude, e ue_dismissed lo dice. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_close ( )Chiude il menu del componente se è sullo schermo, senza scelta: segue ue_dismissed, come per un clic fuori. Niente di aperto, non succede nulla. Restituisce 0 una volta richiesto, -2 quando il componente non è creato
of_insert_item (string as_keys, string as_text, long al_index)Inserisce una voce a un rango del suo elenco anziché alla fine: as_keys è l'indirizzo che avrà, al_index il suo posto tra le voci di quell'elenco, da 1 (0 o meno = la prima, oltre = la fine). Separatori e intestazioni non contano: la voce va subito prima di quella che occupava quel rango. Restituisce 0 una volta aggiunta, -5 quando l'indirizzo è rifiutato (come of_add_item), -2 quando il componente non è creato
of_insert_item (string as_keys, string as_text, string as_image, boolean ab_checked, long al_index)Uguale, con l'icona e la spunta, come le prende of_add_item. Restituisce 0 una volta aggiunta, -5 quando l'indirizzo è rifiutato, -2 quando il componente non è creato
of_is_open ( )true finché un menu del componente è sullo schermo — aperto, e non ancora concluso da una scelta o da una chiusura
of_item (string as_keys)Restituisce l'handle di una voce, tramite il suo indirizzo, per leggerla o cambiarla in seguito (etichetta, stato, icona, scorciatoia, gruppo, colori). Una chiave sola viene risolta nell'indirizzo completo dell'unica voce che la porta: of_item("pdf") e of_item("export/pdf") restituiscono allora lo stesso handle. Ambigua, o portata da nessuna voce, restituisce un handle che non cambia nulla anziché la voce sbagliata
of_load_menu (menu am_menu)Costruisce il menu da un menu PowerBuilder: passate l'elemento su cui chiamavate PopMenu. I suoi elementi diventano le voci, cascate comprese, chiave = ClassName; alla scelta, il Clicked dell'elemento viene eseguito prima di ue_item_selected. Gli elementi sono riletti a ogni apertura. Il menu sostituisce ciò che il componente conteneva. Restituisce 0 una volta caricato, -5 quando il menu non è valido, -2 quando il componente non è creato
of_loaded_item (string as_keys)L'elemento di menu PowerBuilder da cui proviene una voce (of_load_menu), tramite il suo indirizzo — per leggerne la MicroHelp. Un indirizzo che non viene da un menu restituisce un riferimento non valido: verificatelo con IsValid
of_remove_item (string as_keys)Rimuove una voce e la sua cascata; le altre restano. I suoi handle sono liberati; un menu aperto si chiude (ue_dismissed). Restituisce 0 una volta rimossa, -5 quando nessuna voce vive a quell'indirizzo, -2 quando il componente non è creato
of_reset ( )Svuota il menu e riporta ogni proprietà al suo valore predefinito, senza sollevare eventi. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_show ( )Apre il menu al cursore. Chiamatelo dal clic destro del controllo che riceve il gesto. Un menu senza voci visibili non si apre: viene sollevato ue_dismissed. Restituisce 0 una volta richiesto, -2 quando il componente non è creato
of_show (long al_x, long al_y)Uguale, in una posizione dello schermo in pixel. Coordinate negative sono un punto vero: uno schermo posto a sinistra o sopra quello principale. Restituisce 0 una volta richiesto, -2 quando il componente non è creato
of_show_at (dragobject ado_control, long al_x, long al_y)Apre il menu in un punto dentro un controllo, in unità PowerBuilder dal suo angolo in alto a sinistra — il punto che prendeva PopMenu: of_show_at(dw_list, dw_list.PointerX(), dw_list.PointerY()). Il controllo è conservato: of_source lo nomina. Restituisce 0 una volta richiesto, -5 quando il controllo non è valido o una coordinata è nulla, -2 quando il componente non è creato
of_show_under (dragobject ado_control)Apre il menu sotto un controllo: pende dal suo bordo inferiore, allineato al suo bordo d'inizio (il bordo destro in una disposizione da destra a sinistra), e si apre sopra quando lo schermo finisce sotto. Restituisce 0 una volta richiesto, -5 quando il controllo non è valido, -2 quando il componente non è creato — sotto un componente con elementi (una buttonbar, una toolbar), il menu pende sotto il componente intero, non sotto uno dei suoi pulsanti
of_show_under (dragobject ado_control, boolean ab_keyboard)Uguale, dicendo come è stato chiesto il menu: true per la tastiera (Maiusc+F10, tasto Menu) — la prima voce attiva è evidenziata, Invio la sceglie, come in Windows. Restituisce 0 una volta richiesto, -5 quando il controllo non è valido, -2 quando il componente non è creato
of_source ( )Il controllo da cui il menu sullo schermo — o l'ultimo — è stato aperto: quello dato a of_show_under o a of_show_at. Leggetelo in ue_item_selected quando un menu serve più controlli. Un menu aperto al cursore o in un punto dello schermo (of_show) non ne ha: il riferimento non è valido, verificatelo con IsValid

Eventi #

EventoScatta quando
ue_item_selected (string as_keys)L'utente ha scelto una voce, col mouse o da tastiera. as_keys è il suo indirizzo completo (export/pdf). Una voce di un gruppo è spuntata, e le altre del suo gruppo tolte, prima dell'evento
ue_dismissed (string as_reason)Il menu si è chiuso senza scelta: un clic fuori, Esc, of_close, una voce rimossa o il menu svuotato mentre era aperto, un secondo of_show che l'ha sostituito — e anche quando of_show non aveva nulla da mostrare — as_reason dice quale: REASON_ESCAPE, REASON_OUTSIDE, REASON_FOCUS, REASON_USER, REASON_CODE, REASON_REPLACED, REASON_EMPTY, REASON_UNAVAILABLE (una voce disattivata, nascosta o rimossa dall'apertura)
ue_item_hover (string as_keys)Con ib_track_hover = true: la voce su cui è il puntatore, tramite il suo indirizzo — anche una voce disattivata, perché il suo aiuto possa dire perché; da tastiera, le voci su cui si ferma, saltando quelle disattivate. Sollevato una volta per voce, poi con un indirizzo vuoto quando il menu si chiude: svuotate allora la riga di aiuto. of_reset chiude un menu aperto senza sollevarlo: svuotatela voi

Proprietà degli elementi #

ProprietàTipoPredefinitoRuolo
is_textstring""Etichetta della voce. & indica la lettera che la sceglie da tastiera (&& per una e commerciale); vuota, si vede la chiave e l'etichetta si rilegge vuota
ib_enabledbooleantrueA false, la voce è disattivata: mostrata, mai scelta, la sua cascata chiusa
ib_visiblebooleantrueA false, la voce lascia il menu — cascata compresa — senza essere rimossa: conserva chiave e stato, e torna al suo posto. Una cascata le cui voci sono tutte nascoste resta, disattivata
ib_checkedbooleanfalseUna spunta sulla voce — un pallino tondo per una voce di un gruppo. Spuntare una voce di un gruppo toglie la spunta alle altre del gruppo; fuori da un gruppo, la voce non si commuta da sola alla scelta: fatelo in ue_item_selected, o impostate ib_auto_check
ib_checkablebooleanfalseUna casella di controllo: l'opzione è mostrata e annunciata come tale anche non spuntata («non selezionata» per un lettore di schermo). Una voce spuntata una volta lo diventa da sola; impostatela per un'opzione che parte non spuntata. Una voce radio (is_group) non lo è mai
ib_auto_checkbooleanfalseA true, scegliere la voce ne commuta da sola la spunta, prima di ue_item_selected — ib_checked vi dice il nuovo stato. Diventa una casella di controllo; nessun effetto su una voce di un gruppo
is_groupstring""Fa della voce una voce radio del gruppo nominato: le voci di un gruppo sotto lo stesso genitore si escludono. Vuoto: una voce ordinaria
is_imagestring""Icona della voce, cambiata sul posto. Gli stessi percorsi di of_add_item (mono:, tint:, file.dll:NOME); vuota, sparisce
is_shortcutstring""La scorciatoia mostrata a destra della voce (Ctrl+C). Solo mostrata: il tasto appartiene al controllo di cui parla il menu. Mai mostrata su una voce che apre una cascata
is_tonestring""Il tono del comando: il suo testo, a riposo, in un colore del tema chiaro o scuro — TONE_DANGER per quello che distrugge, TONE_WARN, TONE_SUCCESS, TONE_INFO; vuoto o TONE_NEUTRAL = il testo del tema. Puntata, la voce prende i colori di passaggio del tema; un il_text_color della voce prevale. Le costanti sono su u_pbt_contextmenu
il_accentlong-1Accento di questa voce: la sua spunta, e il suo bordo quando è puntata (-1 = quello del tema)
il_back_colorlong-1Sfondo di questa voce a riposo (-1 = quello del tema). Dato da solo, il testo prende un colore leggibile su di esso
il_text_colorlong-1Colore del testo di questa voce (-1 = quello del tema). Un solo colore non si legge sul tema chiaro e su quello scuro: impostate il_back_color con esso, o preferite is_tone, che segue il tema
il_back_color_hoverlong-1Sfondo di questa voce quando è puntata (-1 = quello del tema)
il_text_color_hoverlong-1Colore del testo di questa voce quando è puntata (-1 = quello del tema): impostate il_back_color_hover con esso, il passaggio del tema cambia da un tema all'altro

Una voce non mostra nessun tooltip: il menu nativo non ne ha. L'is_tooltip che l'handle eredita è conservato e si rilegge, ma non è mai mostrato — per un aiuto, ib_track_hover e ue_item_hover.


Esempi #

Un menu secondo ciò che è cliccato #

// 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()

Un pulsante Altro #

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

Un aiuto nella barra di stato #

// 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

Buone pratiche #

Versione dimostrativa #

Senza chiave, ogni elenco del menu — la radice come ogni cascata — mostra le sue prime sei voci visibili; separatori e intestazioni non contano. L'ultima riga, disattivata, dice quante voci non sono mostrate — o, senza tagli, porta la dicitura «PBToolboxAI — DEMO». Il modello conserva tutto: una chiave mostra il menu intero all'apertura successiva.

Il lanciatore non ha superficie: dei membri ereditati qui sotto, of_save_as_png, of_print e of_focus_webview non hanno nulla da catturare, stampare o ricevere. of_register_shortcut resta utile — una scorciatoia della finestra che apre il menu con of_show_under.

Ereditato dalla base comune #

Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.

MembriRuoloDescritto in
of_count · of_keys_at · of_hasPercorrere ciò che il componente contiene3.2 Gli item
of_resetRiportare il componente a zero3.6 Riportare un componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsScorciatoie da tastiera del componente3.5 Le scorciatoie da tastiera
of_is_created · of_is_ready · of_get_last_errorSe è nato, se è pronto, cosa è fallito3.7 Diagnostica
of_save_as_png · of_save_as_jpgEsportare il rendering in immagine3.8 Esportare il rendering come immagine
of_set_redrawRaggruppare le modifiche in un solo ridisegno3.10 Buone pratiche
of_preload_iconsIcone mostrate senza ritardoVisualizzazione istantanea: of_icon
of_set_translationTradurre una dicitura del componente5.2 Adattare un'etichetta: of_set_translation
of_focus_webviewDare il focus al componente6.4 Tastiera e focus
of_print · of_print_to_pdfStampare, o scrivere un PDF6.9 Stampare
of_set_property · of_get_property · of_component_namePilotare una proprietà per nome3.1 Il motore delle proprietà
is_accessible_name · is_accessible_descriptionIl nome e la descrizione che dice un lettore di schermo3.4 Proprietà ed event opzionali

Su questo lanciatore invisibile, of_count e of_keys_at percorrono ciò che avete aggiunto, rami nascosti compresi — non ciò che la ruota disegnerà. L'esportazione come immagine, la stampa, of_focus_webview e of_set_redraw non hanno qui alcun effetto utile: il componente non disegna nulla di suo, la ruota vive nella propria finestra.

Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.


← Riferimento dei componenti · Sommario della guida