ribbon — u_pbt_ribbon #
← Riferimento dei componenti · Sommario della guida
Barra multifunzione in stile Office: schede, gruppi, dodici tipi di controlli avanzati, menu applicativo, barra di accesso rapido, schede contestuali con banner e keytip.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Ribbon: l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_ribbon |
| Classi degli item | n_pbt_ribbon_tab (scheda), n_pbt_ribbon_group (gruppo), n_pbt_ribbon_item (controllo), n_pbt_ribbon_menu_item (voce di menu), n_pbt_ribbon_ctx_group (gruppo di schede contestuali), n_pbt_ribbon_app_menu_item (voce del menu applicativo) |
| Serve per | Sostituire una barra dei menu e le relative barre degli strumenti con un'interfaccia di comando moderna, leggibile e gerarchizzata |
| Altezza | Intrinseca: la barra multifunzione si allinea sempre al proprio contenuto, nulla da attivare — vedere Altezza automatica |
| Limite in modalità demo | 2 schede al massimo — vedere La modalità demo |
La regola d'oro: tutto passa dal percorso #
La barra multifunzione è una gerarchia a quattro livelli: scheda → gruppo → controllo → voce di menu. Non c'è alcun identificatore globale da gestire: ogni oggetto si raggiunge attraverso il percorso che vi conduce e ogni aggiunta avviene sul componente, all'indirizzo del genitore.
// Leggere o pilotare un controllo : sempre il percorso completo
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste").ib_enabled = false
Due conseguenze pratiche e comode: due gruppi diversi possono usare lo stesso identificatore di controllo senza intralciarsi e gli event Le consegnano il percorso completo — sa sempre da dove proviene il clic.
Avvio rapido #
// event open della finestra
// Una scheda
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Home")
// Un gruppo: un pulsante grande e due piccoli
uo_ribbon.of_add_group(/*keys*/ "home/clipboard", /*title*/ "Appunti")
uo_ribbon.of_add_big_button(/*keys*/ "home/clipboard/paste", /*label*/ "Incolla", /*image*/ "mono:img\paste.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/cut", /*label*/ "Taglia", /*image*/ "mono:img\cut.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/copy", /*label*/ "Copia", /*image*/ "mono:img\copy.svg")
// Mostrare la scheda
uo_ribbon.of_select_tab(/*key*/ "home")
// event ue_clicked di uo_ribbon : (string as_keys)
choose case as_keys
case "home/clipboard/paste" ; of_paste()
case "home/clipboard/cut" ; of_cut()
case "home/clipboard/copy" ; of_copy()
end choose
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_app_button | string | "" | Etichetta del pulsante applicativo, in alto a sinistra, che apre il menu applicativo. Rinominarlo conserva il suo menu; una stringa vuota rimuove il pulsante, con il suo menu. Le voci del menu applicativo richiedono prima il pulsante |
ib_minimized | boolean | false | true riduce la barra multifunzione alle sole intestazioni delle schede; un clic su una scheda la espande temporaneamente. Impostato dal codice, attiva ue_minimized come il gesto dell'utente — nulla quando la barra è già in quello stato; ue_size_changed comunica la nuova altezza |
ib_veto_gallery | boolean | false | Chiedere prima che una piastrella di galleria venga scelta — dall'utente o da of_select_gallery_item (attiva ue_gallery_selection_changing, che può rifiutare; un of_select_gallery_item rifiutato restituisce -4). Inattivo per impostazione predefinita, come ogni evento annullabile: ogni domanda costa un andata e ritorno verso PowerBuilder (~35 ms). Lo metta a true quando la sua applicazione risponde |
is_theme_style | string | "" | Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio |
is_theme_mode | string | "" | Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio |
il_theme_accent | long | -1 | Colore d'accento di questo componente (-1 = accento dell'applicazione, o quello del tema) |
is_tooltip | string | "" | Tooltip semplice mostrato al passaggio del mouse sul componente |
is_super_tooltip_title | string | "" | Titolo del tooltip avanzato (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo del tooltip avanzato (markup avanzato accettato) |
is_super_tooltip_image | string | "" | Immagine del tooltip avanzato |
Costante — ACCENT_LIGHT (-1): da passare come colore di una scheda o di un gruppo contestuale affinché segua il colore d'accento del tema, schiarito, anziché un colore fisso.
Proprietà di una scheda — n_pbt_ribbon_tab #
Ottenute tramite of_tab("tab"), si modificano a caldo.
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
ib_visible | boolean | true | false nasconde la scheda senza eliminarla — è il meccanismo stesso delle schede contestuali |
is_title | string | "" | Titolo della scheda. Posto da of_add_tab; scriverlo qui lo cambia, leggerlo dice cosa mostra |
is_keytip | string | "" | Tasto di accesso rapido mostrato dopo aver premuto Alt ("H" per Home). Una lettera o più ("FP", come in Office), digitate una dopo l'altra; Backspace riprende l'ultima. Solo lettere A-Z e cifre: qualsiasi altro carattere è rifiutato — non cambia nulla, e of_get_last_error della barra dice perché |
il_accent | long | -1 | Colore d'accento di questa scheda (-1 = quello del tema) |
il_back_color | long | -1 | Sfondo di questa scheda, a riposo |
il_text_color | long | -1 | Colore del testo di questa scheda |
il_back_color_hover | long | -1 | Sfondo di questa scheda sotto il puntatore |
il_text_color_hover | long | -1 | Colore del testo di questa scheda sotto il puntatore |
is_tooltip | string | "" | Tooltip semplice, mostrato quando il puntatore si ferma sulla scheda |
is_super_tooltip_title | string | "" | Titolo del suo tooltip avanzato (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo del suo tooltip avanzato (testo formattato accettato) |
is_super_tooltip_image | string | "" | Immagine del suo tooltip avanzato |
Proprietà di un gruppo — n_pbt_ribbon_group #
Ottenute tramite of_group("tab/group").
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
ib_visible | boolean | true | false nasconde il gruppo e tutti i suoi controlli |
is_title | string | "" | Dicitura sotto il gruppo. Posta da of_add_group; scriverla qui la cambia |
ib_launcher | boolean | false | Mostra la piccola freccia in basso a destra nel gruppo — l'avvio della finestra di dialogo (attiva ue_launcher). La freccia vive nella barra del titolo del gruppo, e un gruppo che la barra multifunzione ha dovuto ridurre per mancanza di spazio la mantiene nello stesso posto — viaggia inoltre nel pannello aperto dal gruppo ridotto. |
il_accent | long | -1 | Colore d'accento di questo gruppo (-1 = quello del tema) |
il_back_color | long | -1 | Sfondo di questo gruppo, a riposo |
il_text_color | long | -1 | Colore del testo di questo gruppo |
il_back_color_hover | long | -1 | Sfondo di questo gruppo sotto il puntatore |
il_text_color_hover | long | -1 | Colore del testo di questo gruppo sotto il puntatore |
is_tooltip | string | "" | Tooltip semplice, mostrato quando il puntatore si ferma sulla didascalia del gruppo (e sul suo pulsante quando il gruppo è ridotto) |
is_super_tooltip_title | string | "" | Titolo del suo tooltip avanzato (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo del suo tooltip avanzato (testo formattato accettato) |
is_super_tooltip_image | string | "" | Immagine del suo tooltip avanzato |
Costanti di modalità del selettore di colore: COLORMODE_PALETTE (tavolozza di campioni, modalità predefinita) e COLORMODE_OPEN (tavolozza completa con conferma).
Proprietà di un controllo — n_pbt_ribbon_item #
Ottenute tramite of_item("tab/group/control"). Si applicano a tutti i tipi di controllo; le proprietà prive di senso per un dato tipo vengono semplicemente ignorate.
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_label | string | "" | Etichetta del controllo. Accetta il testo formattato con tag — nella barra come nel pannello di un gruppo ridotto; fate passare un testo dell'utente da of_escape_markup |
is_image | string | "" | Immagine del controllo (pulsante, pulsante grande, pulsante diviso, pulsante a discesa, casella di controllo, selettore di colore, pulsante della barra di accesso rapido), con gli stessi prefissi dell'aggiunta (mono:, tint:). "" la rimuove. Riletta in tempo reale |
ib_enabled | boolean | true | false disattiva il controllo e ne blocca l'attivazione |
ib_checked | boolean | false | Stato premuto di un interruttore o selezionato di una casella di controllo |
is_group | string | "" | Solo interruttore: gli interruttori di uno stesso gruppo della barra che condividono un nome sono esclusivi, come i pulsanti di allineamento di un editor — premerne uno rilascia gli altri (ue_toggled per quello che si accende, nulla per quelli rilasciati), premere quello già premuto lo lascia premuto. ib_checked = true dal codice rilascia anche gli altri, in silenzio. Una stringa vuota (predefinito) lascia il gruppo |
ib_visible | boolean | true | false nasconde il controllo; i vicini si compattano |
is_text | string | "" | Testo digitato o selezionato in una casella combinata |
id_value | double | 0 | Valore numerico di un selettore numerico |
id_min | double | 0 | Solo selettore numerico: limite inferiore dell'intervallo, modificabile in qualsiasi momento. Il valore viene subito riportato nel nuovo intervallo, in silenzio (nessun ue_value_changed, come id_value scritto dal codice). Su qualsiasi altro controllo non ha effetto e si rilegge 0 — un minimo sopra il massimo porta con sé il massimo (vince il limite scritto, come in un NumericUpDown): i due limiti si impostano in qualsiasi ordine |
id_max | double | 0 | Solo selettore numerico: limite superiore dell'intervallo, modificabile in qualsiasi momento; il valore viene riportato nell'intervallo in silenzio, come per id_min. Su qualsiasi altro controllo non ha effetto e si rilegge 0 — un massimo sotto il minimo porta con sé il minimo (vince il limite scritto) |
id_step | double | 0 | Solo selettore numerico: passo delle frecce e dei tasti Su / Giù, modificabile in qualsiasi momento. Un passo di 0 o meno viene rifiutato: non cambia nulla, e of_get_last_error della barra dice perché. Su qualsiasi altro controllo non ha effetto e si rilegge 0 |
is_mask | string | "" | Solo selettore numerico: la sua maschera di inserimento, una maschera numerica nella sintassi di PowerBuilder (EditMask, formato DataWindow): # una cifra facoltativa, 0 una cifra obbligatoria, , il raggruppamento, . il separatore decimale, % il numero mostrato moltiplicato per 100, letterali ($, un testo tra virgolette, \x) e sezioni positivo;negativo ("$#,##0;($#,##0)"). La virgola e il punto indicano i separatori della lingua di visualizzazione. Durante la digitazione il raggruppamento compare man mano che arrivano le cifre, i decimali sono limitati alla maschera, le lettere sono rifiutate, il cursore mantiene il suo posto tra le cifre e un numero incollato è letto nella lingua di visualizzazione; lasciando il campo la maschera completa (12 diventa 12,00). Il valore mantiene il numero come lo scrive il codice ("1234.5"), senza raggruppamento né simbolo. Un intervallo che parte da 0 o più rifiuta il segno meno; le frecce mantengono la maschera; id_value e ue_value_changed mantengono il numero nudo; la maschera segue il selettore nel pannello di un gruppo compresso. Vuoto (predefinito): il campo si digita secondo il suo is_format privato dei letterali ($#,##0.00 si digita #,##0.00, #,##0 "px" si digita #,##0; un % resta, è una scala), altrimenti il numero così com'è. Su qualsiasi altro controllo non ha effetto e si rilegge vuoto |
is_format | string | "" | Solo selettore numerico: il suo formato di visualizzazione, come il numero si mostra quando il campo non ha la tastiera — stessa sintassi di is_mask, con i suoi letterali: 0 "pt" mostra 11 pt, 0% un tasso. Quando il campo prende la tastiera il suo testo diventa quello di is_mask (11), il cursore mantiene il suo posto tra le cifre; lasciandolo torna il testo di visualizzazione. Il passaggio non cambia mai il valore e non solleva nulla: id_value e ue_value_changed mantengono il numero nudo; il formato segue il selettore nel pannello di un gruppo compresso. Vuoto (predefinito): il selettore mostra il suo is_mask. Su qualsiasi altro controllo non ha effetto e si rilegge vuoto |
il_color | long | -1 | Colore corrente di un selettore di colore |
ii_visible_items | integer | 3 | Solo raccolta: numero di riquadri che la striscia compressa mostra in una volta. Gli altri restano raggiungibili tramite le frecce, oppure nella griglia espansa |
is_keytip | string | "" | Tasto di accesso rapido del controllo, mostrato dopo Alt e la lettera della scheda. Una lettera o più ("FP", come in Office), digitate una dopo l'altra; Backspace riprende l'ultima. Solo lettere A-Z e cifre: qualsiasi altro carattere è rifiutato — non cambia nulla, e of_get_last_error della barra dice perché. Un pulsante della barra di accesso rapido riceve la sua lettera insieme alle schede, al primo livello. Un controllo di un gruppo ridotto conserva il suo tasto: apre il pannello del gruppo |
is_tooltip | string | "" | Tooltip semplice mostrato al passaggio del mouse sull'item |
is_super_tooltip_title | string | "" | Titolo del tooltip avanzato dell'item (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo del tooltip avanzato dell'item (markup avanzato accettato) |
is_super_tooltip_image | string | "" | Immagine del tooltip avanzato dell'item |
il_accent | long | -1 | Colore d'accento di questo controllo (-1 = quello del tema) |
il_back_color | long | -1 | Sfondo di questo controllo, a riposo |
il_text_color | long | -1 | Colore del testo di questo controllo |
il_back_color_hover | long | -1 | Sfondo di questo controllo sotto il puntatore |
il_text_color_hover | long | -1 | Colore del testo di questo controllo sotto il puntatore |
Proprietà di una voce di menu — n_pbt_ribbon_menu_item #
Ottenute tramite of_menu_item("tab/group/control/entry").
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_image | string | "" | Immagine della voce di menu. Una stringa vuota la toglie |
of_is_separator ( ) → boolean | — | — | La voce è una linea di separazione? Sola lettura: cosa una voce è è stato deciso all'aggiunta |
of_is_header ( ) → boolean | — | — | La voce è un titolo non cliccabile? Sola lettura, stessa ragione |
of_is_checkable ( ) → boolean | — | — | La voce porta un segno di spunta? Sola lettura; ib_checked dice se è messo |
ib_enabled | boolean | true | false disattiva la voce |
ib_visible | boolean | true | false toglie la voce dal menu alla sua prossima apertura — cascata compresa — senza rimuoverla |
ib_checked | boolean | false | Segno di spunta di una voce creata con of_add_menu_check |
is_group | string | "" | Rende la voce una voce radio: le voci di un gruppo sotto lo stesso genitore si escludono — sceglierne una (o ib_checked = true dal codice) la spunta e toglie la spunta alle altre, e un pallino rotondo sostituisce il segno di spunta. ue_menu_selected riporta ab_checked = true. Una stringa vuota (predefinito) la rende di nuovo una voce ordinaria |
il_accent | long | -1 | Colore d'accento di questa voce nel menu (-1 = quello del tema) |
il_back_color | long | -1 | Sfondo di questa voce nel menu, a riposo |
il_text_color | long | -1 | Colore del testo di questa voce nel menu |
il_back_color_hover | long | -1 | Sfondo di questa voce nel menu sotto il puntatore |
il_text_color_hover | long | -1 | Colore del testo di questa voce nel menu sotto il puntatore |
is_tooltip | string | "" | Conservato e riletto, ma una voce di menu non mostra alcun tooltip: il menu nativo non ne ha |
is_super_tooltip_title | string | "" | Titolo del suo tooltip avanzato — conservato, non mostrato (vedi is_tooltip) |
is_super_tooltip_text | string | "" | Testo del suo tooltip avanzato — conservato, non mostrato |
is_super_tooltip_image | string | "" | Immagine del suo tooltip avanzato — conservata, non mostrata |
Proprietà di una voce del menu applicativo — n_pbt_ribbon_app_menu_item #
Ottenute tramite of_app_menu_item("recent/a.txt"). Si modificano al volo: il menu le recepisce alla sua prossima apertura.
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_label | string | "" | Testo della voce |
is_image | string | "" | Immagine della voce. Una stringa vuota la rimuove |
ib_enabled | boolean | true | false disattiva la voce: mostrata, mai scelta — Salva quando non c'è nulla da salvare |
ib_checked | boolean | false | Segno di spunta davanti alla voce |
ib_visible | boolean | true | false toglie la voce dal menu alla sua prossima apertura — sottomenu compreso — senza eliminarla |
of_is_separator ( ) → boolean | — | — | La voce è una linea di separazione? Sola lettura |
of_keys_at (long al_index) → string | — | — | L'indirizzo della voce alla posizione al_index (da 1) sotto questa — o al primo livello per of_app_menu_item("") —, "" oltre la fine: l'indirizzo che of_app_menu_item e of_remove_app_menu_item ricevono |
il_accent | long | -1 | Colore d'accento di questa voce nel menu (-1 = quello del tema) |
il_back_color | long | -1 | Sfondo di questa voce nel menu, a riposo |
il_text_color | long | -1 | Colore del testo di questa voce nel menu |
il_back_color_hover | long | -1 | Sfondo di questa voce nel menu sotto il puntatore |
il_text_color_hover | long | -1 | Colore del testo di questa voce nel menu sotto il puntatore |
is_tooltip | string | "" | Conservato e riletto, ma una voce di menu non mostra alcun tooltip: il menu nativo non ne ha |
is_super_tooltip_title | string | "" | Titolo del suo tooltip avanzato — conservato, non mostrato (vedi is_tooltip) |
is_super_tooltip_text | string | "" | Testo del suo tooltip avanzato — conservato, non mostrato |
is_super_tooltip_image | string | "" | Immagine del suo tooltip avanzato — conservata, non mostrata |
I dodici tipi di controlli #
Si aggiungono tutti all'indirizzo di un gruppo — "home/clipboard" — e restituiscono 0 (-5 per un argomento non valido, -2 se il componente non è creato); un menu o un elenco si riempie poi all'indirizzo del controllo.
| Metodo del componente | Controllo ottenuto | Event |
|---|---|---|
of_add_big_button (string as_keys, string as_label, string as_image) → long | Pulsante grande a tutta altezza, icona sopra l'etichetta. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_clicked |
of_add_big_split (string as_keys, string as_label, string as_image) → long | Pulsante grande diviso: la parte superiore agisce, la freccia apre il menu. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_clicked · ue_menu_selected |
of_add_big_dropdown (string as_keys, string as_label, string as_image) → long | Pulsante grande con menu a discesa. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_menu_selected |
of_add_button (string as_keys, string as_label, string as_image) → long | Pulsante piccolo (impilato in colonne da tre). Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_clicked |
of_add_toggle (string as_keys, string as_label, string as_image) → long | Piccolo interruttore che rimane premuto. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_toggled |
of_add_dropdown (string as_keys, string as_label, string as_image) → long | Pulsante piccolo con menu a discesa. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_menu_selected |
of_add_checkbox (string as_keys, string as_label) → long | Casella di controllo. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_toggled |
of_add_separator (string as_keys) → long | Separatore verticale tra due blocchi di controlli. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | — |
of_add_combo (string as_keys, integer ai_width_px, boolean ab_editable) → long | Casella combinata, modificabile o meno. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_combo_changed |
of_add_spinner (string as_keys, integer ai_width_px, double ad_min, double ad_max, double ad_step, double ad_value) → long | Selettore numerico con frecce. Un valore fuori intervallo vi viene riportato. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato, un passo di 0 o meno, un minimo sopra il massimo), -2 se il componente non è creato | ue_value_changed |
of_add_colorpicker (string as_keys, string as_label, string as_image, long al_color) → long | Pulsante di colore diviso: il clic riapplica, la freccia apre la tavolozza di campioni. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_clicked · ue_color_changed |
of_add_gallery (string as_keys, integer ai_width_px, integer ai_tile_w, integer ai_tile_h) → long | Striscia scorrevole di piastrelle illustrate. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato | ue_gallery_selection_changed |
of_add_colorpicker accetta un quinto argomento as_mode: COLORMODE_PALETTE (tavolozza di campioni) o COLORMODE_OPEN (tavolozza completa con i pulsanti OK e Annulla).
Metodi #
Costruire la barra multifunzione #
| Metodo | Ruolo |
|---|---|
of_add_tab (string as_key, string as_title) | Aggiunge una scheda e restituisce 0 (-5 per un argomento non valido, -2 se il componente non è creato): i gruppi si aggiungono poi al suo indirizzo |
of_insert_tab (string as_key, string as_title, integer ai_index) | Aggiunge una scheda nella posizione che sceglie lei (1 = in testa) invece che in fondo, e restituisce 0 (-5 per un argomento non valido, -2 se il componente non è creato) come of_add_tab. Un id già assegnato viene rifiutato |
of_tab (string as_key) | Handle di una scheda esistente (creata al primo accesso) |
of_add_group (string as_keys, string as_title) | Aggiunge un gruppo intitolato a una scheda — "home/clipboard" — e restituisce 0 (-5 per un argomento non valido, -2 se il componente non è creato) |
of_group (string as_keys) | Handle di un gruppo esistente, tramite il suo indirizzo |
of_item (string as_keys) | Handle di un controllo esistente, tramite il suo indirizzo — "home/clipboard/paste" |
of_select_tab (string as_key) | Attiva una scheda, come un clic su di essa: segue ue_selection_changed (subito dopo il suo script, dalla coda degli eventi; nulla quando la scheda è già attiva), e of_selected_key la rilegge subito. A differenza di un clic, non espande una barra ridotta. Restituisce 0 una volta applicato, -5 per una scheda sconosciuta o nascosta, -2 se il componente non è creato |
of_selected_key ( ) | Chiave della scheda attiva, "" se nessuna. Letta in diretta dal componente: già da ue_selection_changed, o subito dopo of_select_tab, indica la nuova scheda |
of_remove_group (string as_keys) | Rimuove un gruppo e tutti i suoi controlli, tramite il suo indirizzo; gli handle di ciò che se ne va sono liberati. Restituisce 0 una volta applicato, -5 quando nessun gruppo vive a quell'indirizzo, -2 se il componente non è creato |
of_remove_item (string as_keys) | Rimuove un controllo tramite il suo indirizzo (scheda/gruppo/controllo), oppure un pulsante della barra di accesso rapido tramite la sola chiave; il suo handle è liberato. Restituisce 0 una volta applicato, -5 quando nulla del genere vive a quell'indirizzo, -2 se il componente non è creato |
of_remove_tab (string as_key) | Rimuove una scheda e tutto il suo contenuto; gli handle di ciò che se ne va sono liberati. Restituisce 0 una volta applicato, -5 quando nessuna scheda porta quella chiave, -2 se il componente non è creato |
of_clear ( ) | Svuota completamente la barra multifunzione: schede, gruppi, controlli, barra di accesso rapido, menu applicativo. Restituisce 0 una volta applicato, -2 se il componente non è creato |
Riempire i menu e gli elenchi #
Tutti questi metodi si richiamano sul componente, con l'indirizzo del controllo (scheda/gruppo/controllo) — la voce, la scelta o il riquadro come quarto livello.
| Metodo | Ruolo |
|---|---|
of_add_menu_item (string as_keys, string as_label, string as_image) | Voce del menu di un pulsante a discesa o diviso: scheda/gruppo/controllo/voce, un livello in più per ogni cascata. Restituisce 0 una volta applicato, -5 per un indirizzo errato, un genitore che non è né un menu a discesa né una voce, o una chiave già presa in quel menu, -2 se il componente non è creato |
of_add_menu_check (string as_keys, string as_label) · (string as_keys, string as_label, string as_image) | Voce selezionabile: il clic ne inverte lo stato e lo riporta in ue_menu_selected. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_add_menu_header (string as_keys, string as_label) | Riga di titolo non cliccabile, per suddividere un menu lungo. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_add_menu_separator (string as_keys) | Riga di separazione in un menu: as_keys indica il controllo per il suo menu, oppure una voce per la cascata sotto di essa. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato |
of_remove_menu_item (string as_keys) | Rimuove una voce di un menu, con la sua cascata (scheda/gruppo/controllo/voce, più in profondità per una voce in cascata); i suoi handle sono liberati. Restituisce 0 una volta applicato, -5 quando nessuna voce vive a quell'indirizzo, -2 se il componente non è creato |
of_clear_menu (string as_keys) | Svuota il menu di un pulsante a discesa o diviso (scheda/gruppo/controllo): un elenco «File recenti» si ricostruisce voce per voce, senza ricreare il controllo. Restituisce 0 una volta applicato, -5 quando l'indirizzo non è né un menu a discesa né un pulsante diviso, -2 se il componente non è creato |
of_menu_item (string as_keys) | Handle di una voce di menu, per disattivarla o selezionarla a caldo |
of_add_combo_item (string as_keys, string as_label) | Aggiunge una scelta all'elenco di una casella combinata; una scelta ha come chiave la sua etichetta. Restituisce 0 una volta applicato, -5 quando l'indirizzo non è una casella combinata, o per un'etichetta già nell'elenco, vuota, o che contiene / o una barra verticale, -2 se il componente non è creato |
of_remove_combo_item (string as_keys) | Rimuove una scelta di una casella combinata: scheda/gruppo/elenco/etichetta. Restituisce 0 una volta applicato, -5 quando l'elenco non ha quella scelta, -2 se il componente non è creato |
of_clear_combo (string as_keys) | Svuota l'elenco di una casella combinata (scheda/gruppo/elenco); il suo testo resta. Restituisce 0 una volta applicato, -5 quando l'indirizzo non è una casella combinata, -2 se il componente non è creato |
of_add_gallery_item (string as_keys, string as_image, string as_label) | Aggiunge una tessera a una raccolta (scheda/gruppo/raccolta/tessera); la sua etichetta è anche il suo nome per un lettore di schermo. Restituisce 0 una volta applicato, -5 per un indirizzo errato, un terzo livello che non è una raccolta, o una tessera già presa, -2 se il componente non è creato |
of_remove_gallery_item (string as_keys) | Rimuove una tessera di una raccolta (scheda/gruppo/raccolta/tessera). Quando la tessera selezionata se ne va, non resta nulla di selezionato. Restituisce 0 una volta applicato, -5 quando quella tessera non esiste, -2 se il componente non è creato |
of_select_gallery_item (string as_keys) | Seleziona una tessera della raccolta da programma, tramite il suo indirizzo a quattro livelli, come una scelta: con ib_veto_gallery attivo, viene posto prima ue_gallery_selection_changing; poi segue ue_gallery_selection_changed. Tessera già selezionata: nulla viene chiesto né sollevato. Restituisce 0 una volta applicato (o se già selezionata), -4 se il suo ue_gallery_selection_changing ha rifiutato (la tessera resta), -5 per un'altra profondità o una tessera mai aggiunta da of_add_gallery_item, -2 se il componente non è creato |
of_open (string as_keys) | Apre da programma il menu, l'elenco o la tavolozza del controllo a quell'indirizzo (scheda/gruppo/controllo); l'indirizzo di un gruppo (scheda/gruppo) ne apre il pannello quando una finestra troppo stretta lo ha ridotto. Restituisce 0 una volta applicato, -5 per un indirizzo che non nomina né un controllo né un gruppo (un pulsante della barra di accesso rapido non ha un menu da aprire), -2 se il componente non è creato |
Menu applicativo e barra di accesso rapido #
| Metodo | Ruolo |
|---|---|
of_add_app_menu_item (string as_keys, string as_label, string as_image) | Voce del menu applicativo (quello che apre il pulsante is_app_button), tramite il suo indirizzo: recent alla radice, recent/a.txt nel sottomenu di recent. Restituisce 0 una volta applicato, -5 per una chiave non valida (vuota, / o barra verticale in un livello, che inizia con __), una chiave già presa, una voce genitore sconosciuta, o senza pulsante applicativo, -2 se il componente non è creato |
of_add_app_menu_separator (string as_keys) | Linea di separazione nel menu applicativo. as_keys è il suo indirizzo, come quello di una voce: s1 alla radice, saveas/s1 nel sottomenu di saveas; un indirizzo vuoto riceve una chiave propria. Restituisce 0 una volta applicato, -5 per una chiave già presa, una voce genitore sconosciuta, o senza pulsante applicativo, -2 se il componente non è creato |
of_remove_app_menu_item (string as_keys) | Rimuove una voce (o linea di separazione) del menu applicativo tramite il suo indirizzo, con il suo sottomenu; i suoi handle sono liberati. Restituisce 0 una volta applicato, -5 quando quella voce non esiste, -2 se il componente non è creato |
of_app_menu_item (string as_keys) | Handle di una voce del menu applicativo (save, recent/a.txt), per disattivarla, spuntarla, nasconderla o rinominarla al volo — vedere sotto. of_app_menu_item("") rappresenta il menu stesso: of_count e of_keys_at ne percorrono il primo livello |
of_add_qat (string as_key, string as_image, string as_tooltip) | Pulsante della barra di accesso rapido, sopra le schede; il suo tooltip è anche il suo nome per un lettore di schermo. Restituisce 0 una volta applicato, -5 per una chiave non valida (vuota, / o barra verticale in un livello, che inizia con __) o una chiave già nella barra, -2 se il componente non è creato |
of_qat_item (string as_key) | Handle di un pulsante di accesso rapido, per disattivarlo o nasconderlo a caldo |
Schede contestuali #
| Metodo | Ruolo |
|---|---|
of_add_contextual_tab (string as_key, string as_title, long al_color) | Scheda contestuale isolata: creata nascosta, contrassegnata da un filetto colorato. Passate ACCENT_LIGHT per seguire l'accento del tema. Restituisce 0 una volta applicato, -5 per una chiave non valida (vuota, / o barra verticale in un livello, che inizia con __) o una chiave già presa, -2 se il componente non è creato |
of_add_contextual_group (string as_key, string as_title) · (string as_key, string as_title, long al_color) | Gruppo di schede contestuali: una fascia colorata con titolo corona le sue schede. Restituisce 0 una volta applicato, -5 per una chiave non valida (vuota, / o barra verticale in un livello, che inizia con __) o una chiave già presa (il suo colore cambia tramite of_ctx_group(chiave).il_color), -2 se il componente non è creato |
of_ctx_group (string as_key) | Recupera l'handle di un gruppo contestuale già creato, tramite la sua chiave — è su di esso che si impostano le sue proprietà |
of_remove_contextual_group (string as_key) | Rimuove un gruppo di schede contestuali e le schede che corona — gli appartengono; i loro handle sono liberati. Restituisce 0 una volta applicato, -5 quando of_add_contextual_group non ha mai creato quel gruppo, -2 se il componente non è creato |
of_add_contextual_tab (string as_key, string as_title, string as_group_key) | Aggiunge una scheda sotto un gruppo contestuale: creata nascosta, coronata dalla fascia colorata del gruppo. Restituisce 0 una volta applicato, -5 per una chiave non valida o già presa, o un gruppo mai creato da of_add_contextual_group, -2 se il componente non è creato |
il_color (proprietà) | Su un handle di gruppo contestuale: ricolora il banner a caldo (ACCENT_LIGHT per tornare al colore d'accento) |
is_title (proprietà) | Su un handle di gruppo contestuale: rinomina il banner a caldo (un cambio di lingua); il suo colore resta. Il suo tooltip (is_tooltip, is_super_tooltip_*) appare quando il puntatore si ferma sul banner, e un clic sul banner porta in primo piano la sua prima scheda |
Comuni #
| Metodo | Ruolo |
|---|---|
of_reset ( ) | Svuota la barra multifunzione e la riporta allo stato iniziale, proprietà comprese. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_set_redraw (boolean) | Raggruppa una raffica di modifiche in un unico rendering. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_preload_icons (string as_icons[]) | Preriscalda un lotto di icone all'avvio: una scheda aperta più tardi mostra le proprie istantaneamente. Restituisce 0 una volta applicato, -2 se il componente non è creato |
of_save_as_png (string) · of_save_as_jpg (string) | Esporta il rendering come immagine. Restituisce 0 una volta scritta l'immagine, -4 se la scrittura fallisce, -2 se il componente non è creato |
Event #
Tutti gli event dei controlli portano con sé il percorso completo: non ha mai bisogno di un identificatore univoco in tutta l'applicazione.
| Event | Attivato quando |
|---|---|
ue_clicked (string as_keys) | L'utente clicca un pulsante, un pulsante grande, la parte principale di un pulsante diviso o un pulsante della barra di accesso rapido — nella barra, nel pannello di un gruppo ridotto, o tramite il suo tasto di accesso rapido. as_keys è l'indirizzo scheda/gruppo/controllo, o la sola chiave di un pulsante di accesso rapido |
ue_toggled (string as_keys, boolean ab_checked) | L'utente commuta un pulsante interruttore o una casella di controllo (nella barra o nel pannello di un gruppo ridotto); ab_checked porta il nuovo stato. Scrivere ib_checked dal codice non attiva nulla. Un interruttore di un gruppo radio (is_group) solleva un solo event, per quello che si accende; quelli rilasciati non sollevano nulla |
ue_menu_selected (string as_keys, boolean ab_checked) | L'utente sceglie una voce del menu di un pulsante a discesa o diviso. as_keys è il suo indirizzo completo: scheda, gruppo, controllo portatore, poi la voce — un livello in più per ogni cascata. Una voce spuntabile commuta prima, e ab_checked porta il suo nuovo stato. Una voce disattivata o nascosta non si sceglie. Una voce radio (is_group) si spunta e toglie la spunta alle altre del suo gruppo: ab_checked vale allora true |
ue_combo_changed (string as_keys, string as_text) | L'utente conferma il testo di una casella combinata: una scelta nel suo elenco, Invio nel campo, o l'uscita dal campo dopo una digitazione. Esc abbandona la digitazione senza attivare nulla; scrivere is_text dal codice non attiva nulla neppure. Un testo scritto dal codice mentre il campo ha il focus appare subito — a meno che l'utente stia digitando: vince la sua digitazione; lasciare il campo senza aver digitato non solleva nulla |
ue_value_changed (string as_keys, double ad_value) | L'utente cambia il valore di un contatore: le sue frecce, Su / Giù nel campo, Invio o l'uscita dal campo dopo una digitazione (Esc la abbandona). ad_value è il nuovo valore, contenuto nell'intervallo del contatore. Scrivere id_value dal codice non attiva nulla. Un valore scritto dal codice mentre il campo ha il focus appare subito — a meno che l'utente stia digitando: vince la sua digitazione; lasciare il campo senza aver digitato non solleva nulla |
ue_color_changed (string as_keys, long al_color) | L'utente sceglie un colore (tavolozza o selettore), oppure clicca la parte principale di un selettore di colore per riapplicarne il colore corrente; al_color è il colore PowerBuilder. Scrivere il_color dal codice non attiva nulla |
ue_gallery_selection_changed (string as_from_keys, string as_keys) | Una piastrella di galleria è stata scelta — dall'utente o da of_select_gallery_item (anche un ordine del suo codice lo solleva). Stessi argomenti di ue_gallery_selection_changing: la domanda e il suo esito si leggono allo stesso modo, e as_from_keys è la piastrella lasciata |
ue_gallery_selection_changing (string as_from_keys, string as_keys) → boolean | Annullabile, posto prima che la piastrella venga scelta. Sollevato solo quando ib_veto_gallery = true. as_from_keys è la piastrella corrente. Posto anche per of_select_gallery_item. Restituisca false per conservarla (uno stile che il documento non può ancora assumere): of_select_gallery_item restituisce allora -4 |
ue_launcher (string as_keys) | L'utente clicca la freccia di avvio di un gruppo (anche dal pannello di un gruppo ridotto): as_keys è l'indirizzo del gruppo scheda/gruppo — aprite la vostra finestra delle opzioni |
ue_selection_changed (string as_keys) | Un'altra scheda passa in primo piano: un clic, la rotellina sopra la barra, un tasto di accesso rapido, oppure of_select_tab (anche un ordine del suo codice lo solleva). as_keys è la chiave della scheda — vuota quando non ne resta nessuna, dopo che la scheda attiva è stata nascosta o rimossa |
ue_app_button ( ) | Si fa clic sul pulsante applicativo |
ue_app_menu_selected (string as_keys) | L'utente sceglie una voce del menu applicativo: as_keys è il suo indirizzo (saveas/as_pdf). Una voce disattivata o nascosta non si sceglie |
ue_item_rclicked (string as_keys, long al_x, long al_y) | L'utente fa clic destro su un item: as_keys è l'indirizzo del controllo (scheda/gruppo/controllo), del gruppo (scheda/gruppo) o della scheda, o la sola chiave di un pulsante della barra di accesso rapido — come li fornisce ue_clicked; al_x, al_y: il punto del clic in pixel dello schermo (tasto Menu o Maiusc+F10: l'angolo in basso a sinistra dell'item), dove un contextmenu della libreria si apre così com'è. Un solo event per clic destro: ue_rclicked non viene sollevato con esso. Un controllo disattivato non solleva nulla. Aprite lì il vostro menu: Aggiungi alla barra di accesso rapido, un aiuto sul comando |
ue_rclicked ( ) | L'utente fa clic destro sulla barra fuori da ogni item: l'estremità vuota della riga delle schede, una fascia senza nulla |
ue_minimized (boolean ab_minimized) | La barra si riduce o si espande: il chevron alla fine della riga delle schede, un doppio clic su una scheda, oppure ib_minimized impostato dal suo codice (anche un ordine lo attiva); ue_size_changed comunica la nuova altezza in ogni caso |
ue_size_changed (long al_height, boolean ab_minimized) | L'altezza della barra multifunzione è cambiata da sola: ridotta, espansa, una scheda contestuale mostrata, una finestra più stretta che perde una riga. A differenza di ue_auto_height — che parla solo quando il componente si ridimensiona da sé — questo si attiva sia che l'altezza automatica sia attiva o no: è pura informazione, per ricollocare ciò che sta sotto |
ue_keytips (boolean ab_on, integer ai_level) | I keytip compaiono (true) o scompaiono (false). ai_level indica a che punto è la navigazione: 1 = le schede sono lettrate, 2 = lo sono i comandi della scheda corrente, 0 = nessun keytip |
ue_auto_height (long al_height) | La barra multifunzione comunica la propria altezza ideale e vi si è appena adattata — sempre attivo: l'altezza di una barra multifunzione è intrinseca |
ue_ready ( ) | Il componente ha terminato il caricamento; tutto ciò che è stato inviato prima è stato riprodotto |
ue_runtime_missing ( ) | Il runtime WebView2 è assente: il componente resta vuoto |
ue_bg_color (long al_color) | Il componente ha calcolato il colore di sfondo del proprio tema; l'userobject lo ha già adottato (backcolor) |
Esempi #
Una barra multifunzione completa, dal menu applicativo ai gruppi #
// event open : si raggruppa tutta la costruzione in un unico rendering
// Sospendere il disegno e dare un nome al pulsante dell'applicazione
uo_ribbon.of_set_redraw(/*on*/ false)
uo_ribbon.is_app_button = "File"
// Menu applicativo, con una cascata sotto "Salva con nome"
uo_ribbon.of_add_app_menu_item(/*keys*/ "new", /*label*/ "Nuovo", /*image*/ "mono:img\new.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "open", /*label*/ "Apri...", /*image*/ "mono:img\open.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as", /*label*/ "Salva con nome", /*image*/ "mono:img\saveas.svg")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as/as_pdf", /*label*/ "Documento PDF", /*image*/ "")
uo_ribbon.of_add_app_menu_item(/*keys*/ "save_as/as_csv", /*label*/ "File CSV", /*image*/ "")
uo_ribbon.of_add_app_menu_separator(/*keys*/ "sep1")
uo_ribbon.of_add_app_menu_item(/*keys*/ "quit", /*label*/ "Esci", /*image*/ "mono:img\exit.svg")
// Barra di accesso rapido, sopra le schede
uo_ribbon.of_add_qat(/*key*/ "qat_save", /*image*/ "mono:img\save.svg", /*tooltip*/ "Salva")
uo_ribbon.of_add_qat(/*key*/ "qat_undo", /*image*/ "mono:img\undo.svg", /*tooltip*/ "Annulla")
// Scheda Home
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Home")
uo_ribbon.of_tab(/*key*/ "home").is_keytip = "H"
// Un gruppo: un pulsante diviso con il suo menu, poi due pulsanti piccoli
uo_ribbon.of_add_group(/*keys*/ "home/clipboard", /*title*/ "Appunti")
uo_ribbon.of_add_big_split(/*keys*/ "home/clipboard/paste", /*label*/ "Incolla", /*image*/ "mono:img\paste.svg")
uo_ribbon.of_add_menu_item(/*keys*/ "home/clipboard/paste/paste_text", /*label*/ "Incolla senza formattazione", /*image*/ "")
uo_ribbon.of_add_menu_item(/*keys*/ "home/clipboard/paste/paste_link", /*label*/ "Incolla come collegamento", /*image*/ "")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/cut", /*label*/ "Taglia", /*image*/ "mono:img\cut.svg")
uo_ribbon.of_add_button(/*keys*/ "home/clipboard/copy", /*label*/ "Copia", /*image*/ "mono:img\copy.svg")
uo_ribbon.of_group(/*keys*/ "home/clipboard").ib_launcher = true // freccia delle opzioni in basso a destra
// Disegnare tutto in una volta, poi mostrare la scheda
uo_ribbon.of_set_redraw(/*on*/ true)
uo_ribbon.of_select_tab(/*key*/ "home")
Un unico smistamento dei clic #
// event ue_clicked di uo_ribbon : (string as_keys)
// L'indirizzo completo arriva con l'event : basta un solo smistamento.
// Due gruppi possono riusare la stessa chiave : l'indirizzo li distingue.
choose case as_keys
case "home/clipboard/cut" ; of_cut()
case "home/clipboard/copy" ; of_copy()
case "home/clipboard/paste" ; of_paste()
case "home/font/bold" ; of_toggle_bold()
end choose
Pilotare lo stato dei controlli in base ai diritti #
// Sempre attraverso il percorso : scheda > gruppo > controllo
uo_ribbon.of_item(/*keys*/ "home/clipboard/paste").ib_enabled = of_clipboard_has_data()
uo_ribbon.of_item(/*keys*/ "home/tools/brush").ib_checked = true
uo_ribbon.of_tab(/*key*/ "admin").ib_visible = gb_administrator
// Disattivare una voce DENTRO un menu a discesa (livello 4)
uo_ribbon.of_menu_item(/*keys*/ "home/clipboard/paste/paste_link").ib_enabled = false
Interruttori esclusivi e voci radio #
// I tre interruttori di allineamento del gruppo Paragrafo si escludono
uo_ribbon.of_add_group(/*keys*/ "home/para", /*title*/ "Paragrafo")
uo_ribbon.of_add_toggle(/*keys*/ "home/para/left", /*label*/ "Sinistra", /*image*/ "mono:img\align-left.svg")
uo_ribbon.of_add_toggle(/*keys*/ "home/para/center", /*label*/ "Centro", /*image*/ "mono:img\align-center.svg")
uo_ribbon.of_add_toggle(/*keys*/ "home/para/right", /*label*/ "Destra", /*image*/ "mono:img\align-right.svg")
uo_ribbon.of_item(/*keys*/ "home/para/left").is_group = "align"
uo_ribbon.of_item(/*keys*/ "home/para/center").is_group = "align"
uo_ribbon.of_item(/*keys*/ "home/para/right").is_group = "align"
// Il testo parte allineato a sinistra : gli altri si rilasciano da soli, in silenzio
uo_ribbon.of_item(/*keys*/ "home/para/left").ib_checked = true
// Due voci radio nel menu del pulsante Incolla : una alla volta
uo_ribbon.of_menu_item(/*keys*/ "home/clipboard/paste/paste_text").is_group = "paste_mode"
uo_ribbon.of_menu_item(/*keys*/ "home/clipboard/paste/paste_link").is_group = "paste_mode"
Un vostro menu con un clic destro #
// event ue_item_rclicked di uo_ribbon : (string as_keys, long al_x, long al_y)
// Local variables
m_ribbon_context lm_menu
// Il comando cliccato e conservato per i Clicked del menu (una variabile di istanza)
is_rclicked_keys = as_keys
// Il vostro menu, al puntatore : Aggiungi alla barra di accesso rapido, Aiuto
lm_menu = create m_ribbon_context
lm_menu.m_main.PopMenu(parent.PointerX(), parent.PointerY())
destroy lm_menu
Schede contestuali con banner #
Il principio di Office: schede che compaiono solo quando la selezione le giustifica, sovrastate da un banner intitolato e colorato.
// event open : si prepara il gruppo contestuale, nascosto per impostazione predefinita
// Senza colore, il banner segue il colore d'accento del tema ; RGB(...) per imporlo
uo_ribbon.of_add_contextual_group(/*key*/ "img", /*title*/ "Strumenti immagine", &
/*color*/ RGB(/*red*/ 224, /*green*/ 32, /*blue*/ 96))
uo_ribbon.of_add_contextual_tab(/*key*/ "format", /*title*/ "Formato", /*group_key*/ "img")
uo_ribbon.of_add_group(/*keys*/ "format/adjust", /*title*/ "Regola")
uo_ribbon.of_add_big_button(/*keys*/ "format/adjust/crop", /*label*/ "Ritaglia", /*image*/ "mono:img\crop.svg")
uo_ribbon.of_add_button(/*keys*/ "format/adjust/rotate", /*label*/ "Ruota", /*image*/ "mono:img\rotate.svg")
// Alla selezione di un'immagine : si rivela la scheda e la si attiva
uo_ribbon.of_tab(/*key*/ "format").ib_visible = true
uo_ribbon.of_select_tab(/*key*/ "format")
// Alla deselezione : la si nasconde, il banner sparisce con lei
uo_ribbon.of_tab(/*key*/ "format").ib_visible = false
Casella combinata, selettore numerico, selettore di colore e raccolta #
// Un nuovo gruppo nella scheda
uo_ribbon.of_add_group(/*keys*/ "home/font", /*title*/ "Carattere")
// Casella combinata modificabile : la si riempie tramite il suo handle
uo_ribbon.of_add_combo(/*keys*/ "home/font/font_name", /*width_px*/ 140, /*editable*/ true)
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Segoe UI")
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Arial")
uo_ribbon.of_add_combo_item(/*keys*/ "home/font/font_name", /*label*/ "Calibri")
uo_ribbon.of_item(/*keys*/ "home/font/font_name").is_text = "Segoe UI"
// Selettore numerico : minimo, massimo, passo, valore iniziale
uo_ribbon.of_add_spinner(/*keys*/ "home/font/size", /*width_px*/ 70, /*min*/ 6, /*max*/ 96, &
/*step*/ 1, /*value*/ 11)
// Selettore di colore in modalita tavolozza completa (con OK / Annulla)
uo_ribbon.of_add_colorpicker(/*keys*/ "home/font/color", /*label*/ "Colore", &
/*image*/ "mono:img\font-color.svg", &
/*color*/ RGB(/*red*/ 0, /*green*/ 0, /*blue*/ 0), &
/*mode*/ u_pbt_ribbon.COLORMODE_OPEN)
// Raccolta di stili : riquadri illustrati scorrevoli
uo_ribbon.of_add_gallery(/*keys*/ "home/font/styles", /*width_px*/ 220, &
/*tile_w*/ 64, /*tile_h*/ 48)
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_normal", /*image*/ "img\style-normal.png", /*label*/ "Normale")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_title", /*image*/ "img\style-titre.png", /*label*/ "Titolo")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_note", /*image*/ "img\style-note.png", /*label*/ "Nota")
uo_ribbon.of_add_gallery_item(/*keys*/ "home/font/styles/st_code", /*image*/ "img\style-code.png", /*label*/ "Codice")
// La striscia compressa mostra 4 riquadri alla volta ; gli altri restano
// raggiungibili tramite le frecce, oppure nella griglia espansa.
uo_ribbon.of_item(/*keys*/ "home/font/styles").ii_visible_items = 4
// Lo stile selezionato all'inizio
uo_ribbon.of_select_gallery_item(/*keys*/ "home/font/styles/st_normal")
// event ue_value_changed di uo_ribbon : (string as_keys, double ad_value)
// Local variables
n_pbt_utils lnv_utils // autoinstantiate : niente da creare, niente da distruggere
// L'ultimo livello dell'indirizzo indica il selettore che si e mosso
if lnv_utils.of_leaf(/*keys*/ as_keys) = "size" then of_apply_size(ad_value)
L'intervallo e il passo di un selettore numerico si cambiano in seguito tramite id_min, id_max e id_step del suo handle: il valore viene subito riportato nel nuovo intervallo, senza attivare ue_value_changed. La sua immagine, come quella di ogni controllo, si cambia tramite is_image.
// La dimensione massima dipende dal carattere scelto : 96, poi 400 a passi di 2
uo_ribbon.of_item(/*keys*/ "home/font/size").id_max = 400
uo_ribbon.of_item(/*keys*/ "home/font/size").id_step = 2
// event ue_color_changed di uo_ribbon : (string as_keys, long al_color)
// Local variables
n_pbt_utils lnv_utils // autoinstantiate : niente da creare, niente da distruggere
// L'ultimo livello dell'indirizzo indica il selettore di colore cambiato
if lnv_utils.of_leaf(/*keys*/ as_keys) = "color" then of_apply_color(al_color)
Rifiutare la scelta di un riquadro di raccolta #
// La domanda e posta solo su richiesta: questa riga la attiva, e
// ue_gallery_selection_changing decide allora di ogni piastrella.
uo_ribbon.ib_veto_gallery = true
// event ue_gallery_selection_changing di uo_ribbon :
// (string as_from_keys, string as_keys)
// Local variables
n_pbt_utils lnv_utils // autoinstantiate : niente da creare, niente da distruggere
// Restituire FALSE conserva il riquadro corrente (as_from_keys).
if lnv_utils.of_leaf(/*keys*/ as_keys) = "st_code" and not of_document_supports_code() then
MessageBox("Stile", "Questo documento non può assumere lo stile Codice.")
return false
end if
return true
L'avvio della finestra di dialogo #
// La piccola freccia in basso a destra nel gruppo
uo_ribbon.of_group(/*keys*/ "home/font").ib_launcher = true
// event ue_launcher di uo_ribbon : (string as_keys)
// Local variables
n_pbt_utils lnv_utils // autoinstantiate : niente da creare, niente da distruggere
// Il percorso identifica il gruppo : si apre la finestra delle opzioni corrispondente.
choose case lnv_utils.of_leaf(/*keys*/ as_keys)
case "font" ; open(w_font_options)
case "clipboard" ; open(w_paste_options)
end choose
Keytip: guidare la barra multifunzione da tastiera #
// Alt mostra le lettere ; Alt poi H poi C attiva "copy"
uo_ribbon.of_tab(/*key*/ "home").is_keytip = "H"
uo_ribbon.of_item(/*keys*/ "home/clipboard/copy").is_keytip = "C"
uo_ribbon.of_item(/*keys*/ "home/clipboard/cut").is_keytip = "X"
Una pressione di Alt ovunque si trovi il focus nella finestra passa la mano alla barra multifunzione: prende il focus da tastiera e mostra le proprie lettere. Non c'è nulla da collegare: basta che sia dichiarato almeno un keytip. Esc, un secondo Alt o la scelta di un comando restituiscono il focus al controllo che l'utente aveva abbandonato. Un tasto può avere più lettere ("FP", come in Office): l'utente le digita una dopo l'altra, i badge che non iniziano più con quanto digitato si fanno da parte, e Backspace li riporta. Un controllo di un gruppo ridotto conserva il suo tasto: apre il pannello del gruppo. Esc risale di un livello, come in Office: dai comandi di una scheda alle schede, poi fuori. I pulsanti della barra di accesso rapido ricevono la loro lettera insieme alle schede (of_qat_item(chiave).is_keytip).
ue_keytips la avvisa a ogni cambiamento di stato e le comunica il livello corrente:
// event ue_keytips di uo_ribbon : (boolean ab_on, integer ai_level)
// La tastiera pilota la barra multifunzione: cancellare il suggerimento della
// barra di stato, che parla del mouse, e ripristinarlo quando le lettere spariscono.
if ab_on then
uo_statusbar.of_item(/*keys*/ "main").is_text = "Digiti una lettera (livello " + String(ai_level) + ")"
else
uo_statusbar.of_item(/*keys*/ "main").is_text = ""
end if
Tooltip avanzati su un controllo #
// Local variables
n_pbt_ribbon_item lnv_item
// Il super tooltip del pulsante Incolla: un titolo, un testo, un'immagine
lnv_item = uo_ribbon.of_item(/*keys*/ "home/clipboard/paste")
lnv_item.is_super_tooltip_title = "Incolla (Ctrl+V)"
lnv_item.is_super_tooltip_text = "Inserisce il contenuto degli appunti." &
+ "[br][br][size-=15]Usi la freccia per incollare senza formattazione.[/size-=15]"
lnv_item.is_super_tooltip_image = "img\paste.png"
Queste quattro proprietà sono esattamente le stesse di qualsiasi altro item della libreria. Per un tooltip su una sola riga basta is_tooltip.
Altezza automatica #
La barra multifunzione si dimensiona da sola: non c'è nulla da attivare. La avvisa a ogni cambiamento di altezza (compressione, scheda contestuale, cambio di tema) affinché Lei possa riposizionare ciò che si trova al di sotto.
// event ue_auto_height di uo_ribbon : (long al_height)
// La barra multifunzione si e gia ridimensionata : si riposiziona cio che sta sotto.
uo_content.y = uo_ribbon.y + uo_ribbon.height
uo_content.height = this.height - uo_content.y
Ridurre la barra multifunzione per guadagnare spazio #
// Start with the ribbon folded: only the tab headers show
uo_ribbon.ib_minimized = true
// event ue_minimized di uo_ribbon : (boolean ab_minimized)
// Si memorizza la preferenza dell'utente per la prossima apertura.
of_save_preference("ribbon_collapsed", ab_minimized)
Ripartire da una barra multifunzione vuota #
// of_reset svuota schede, gruppi, controlli, barra di accesso rapido e menu
uo_ribbon.of_reset()
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Home")
Da un menu PowerBuilder esistente #
Un'applicazione PowerBuilder ha già descritto i suoi comandi una volta: nel suo menu. Etichette, scorciatoie, immagini, separatori, sottomenu, suggerimenti — c'è tutto. n_pbt_menu2ribbon rilegge quel menu tramite RTTI e scrive il PowerScript che costruisce la barra multifunzione corrispondente.
// Una sola volta, a mano : il generatore SCRIVE del codice, non viene eseguito
// in produzione. Incollate il risultato nell'open della vostra finestra.
// Local variables
n_pbt_menu2ribbon lnv_gen
string ls_code
// Generare il codice dal menu
lnv_gen = create n_pbt_menu2ribbon
ls_code = lnv_gen.of_generate(/*menu*/ m_principal, /*ribbon_var*/ "uo_ribbon")
destroy lnv_gen
// Copiarlo, pronto da incollare
ClipBoard(ls_code)
La conversione è deterministica: nessuna IA, nessuna chiamata di rete, niente che esca dalla postazione. Ogni chiave generata è il ClassName della voce di menu (m_fichier, m_ouvrir): l'indirizzo che la barra multifunzione riporta (m_fichier/g1/m_ouvrir) riconduce quindi alla voce, e il router scritto alla fine del codice ne scatena il Clicked da ue_clicked, ue_toggled e ue_menu_selected - il vostro codice esistente viene eseguito tale e quale. I sottomenu sono ripresi a qualsiasi profondità, una voce nascosta viene esclusa, una disattivata resta disattivata, una spuntata diventa un interruttore o una voce spuntabile che parte spuntata.
Il codice prodotto è un punto di partenza da rileggere, non un risultato finito: un menu è un elenco, una barra multifunzione è un'impaginazione. Raggruppate, scegliete i pulsanti grandi, togliete ciò che non merita di stare sempre in vista. L'esempio 9 della pagina barra multifunzione dell'applicazione dimostrativa mostra un risultato completo.
Buone pratiche #
- Racchiuda tutta la costruzione tra
of_set_redraw(false)eof_set_redraw(true): una barra multifunzione completa viene così disegnata in una sola volta, senza sfarfallio. - Ogni aggiunta restituisce un codice:
0, oppure-5per un indirizzo errato, un padre della natura sbagliata o una chiave già presa. Lo verifichi dove un errore di costruzione le importa; per pilotare un controllo in seguito,of_item(indirizzo)restituisce il suo handle. - Richiami
of_preload_iconsall'avvio: senza di esso, la prima visualizzazione di una scheda mai aperta mostra un breve ritardo prima delle sue icone. - Un identificatore deve essere univoco solo all'interno del proprio gruppo. Ne approfitti per dare ai controlli nomi semplici (
copy,paste) anziché ricorrere ai prefissi. - Riservi le schede contestuali ai comandi che non hanno alcun senso fuori contesto: una scheda permanente disattivata è più riposante di una scheda che compare e scompare.
- La domanda prima di una piastrella è inattiva per impostazione predefinita: la attivi con
ib_veto_gallery = truesolo seue_gallery_selection_changingdeve poter rifiutare, perché ogni domanda costa un andata e ritorno verso PowerBuilder. - Un solo avvio di finestra di dialogo per gruppo, e soltanto se il gruppo ha davvero opzioni avanzate da offrire.
- Per ricostruire un'intera barra multifunzione, preferisca
of_clear()(oof_reset()) a una serie diof_remove_tab: un solo comando, e tutti gli handle distribuiti vengono liberati in una volta. - Per una barra dei comandi più leggera, senza schede né gruppi, veda toolbar; per una navigazione laterale, listbar.
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.
| Membri | Ruolo | Descritto in |
|---|---|---|
of_count · of_keys_at · of_has | Percorrere ciò che il componente contiene | 3.2 Gli item |
of_reset | Riportare il componente a zero | 3.6 Riportare un componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Scorciatoie da tastiera del componente | 3.5 Le scorciatoie da tastiera |
of_is_created · of_is_ready · of_get_last_error | Se è nato, se è pronto, cosa è fallito | 3.7 Diagnostica |
of_save_as_png · of_save_as_jpg | Esportare il rendering in immagine | 3.8 Esportare il rendering come immagine |
of_set_redraw | Raggruppare le modifiche in un solo ridisegno | 3.10 Buone pratiche |
of_preload_icons | Icone mostrate senza ritardo | Visualizzazione istantanea: of_icon |
of_set_translation | Tradurre una dicitura del componente | 5.2 Adattare un'etichetta: of_set_translation |
of_focus_webview | Dare il focus al componente | 6.4 Tastiera e focus |
of_print · of_print_to_pdf | Stampare, o scrivere un PDF | 6.9 Stampare |
of_set_property · of_get_property · of_component_name | Pilotare una proprietà per nome | 3.1 Il motore delle proprietà |
is_accessible_name · is_accessible_description | Il nome e la descrizione che dice un lettore di schermo | 3.4 Proprietà ed event opzionali |
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.