tab — u_pbt_tab #
← Riferimento dei componenti · Sommario della guida
Schede moderne che ospitano veri controlli PowerBuilder: banda riposizionabile, icone per scheda, schede chiudibili, riordino con il mouse.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Tab: l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_tab |
| Classe degli item | n_pbt_tab_page (una pagina = una scheda) |
| Serve per | Sostituire un tab PowerBuilder con una banda a tema, conservando le Sue schermate esistenti come pagine |
| Opzioni opt-in | ib_reorderable, ib_veto_selection, ib_veto_close |
L'argomento chiave: una pagina non è un mockup HTML, è un dragobject PowerBuilder — un userobject, una DataWindow, un gruppo di controlli o persino un altro componente PBToolboxAI. Il componente si occupa del posizionamento, del ridimensionamento e della visualizzazione/nascondimento al cambio di scheda. Vedere Ospitare veri controlli PowerBuilder.
Avvio rapido #
// event open della finestra : ogni pagina e un controllo PB gia posto sulla finestra
uo_tabs.of_add_page(/*key*/ "customers", /*title*/ "Clienti", /*page*/ uo_page_customers)
uo_tabs.of_add_page(/*key*/ "invoices", /*title*/ "Fatture", /*page*/ uo_page_invoices, /*closable*/ true)
// Un'icona per scheda, posta sull'handle della pagina
uo_tabs.of_page(/*key*/ "customers").is_icon = "mono:img\customers.svg"
uo_tabs.of_page(/*key*/ "invoices").is_icon = "mono:img\invoice.svg"
// Mostra la prima scheda
uo_tabs.of_select_page(/*key*/ "customers")
// event ue_selection_changed di uo_tabs : (string as_from_key, string as_key)
// Una chiave vuota : nessuna scheda e piu mostrata (tutte nascoste)
if as_key <> "" then of_load_page(as_key)
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_position | string | "top" | Collocazione della banda: top, bottom (banda orizzontale), start, end (banda verticale). Costanti POSITION_TOP, POSITION_BOTTOM, POSITION_START, POSITION_END. START/END sono logiche e seguono il senso di scrittura |
is_overflow_mode | string | "menu" | Ciò che fa una banda troppo piccola per le sue schede. menu (predefinito) mantiene ogni scheda leggibile: quelle che non entrano più escono dalla banda e il pulsante ··· le elenca tutte, con la scheda attiva sempre a schermo. compact le tiene tutte nella banda e le lascia ridurre, fino allo spazio che richiede un testo troncato. Costanti OVERFLOW_MENU, OVERFLOW_COMPACT |
ib_reorderable | boolean | false | Opt-in: l'utente può riordinare le schede trascinandone l'intestazione con il mouse (attiva ue_tab_reordered) |
ib_veto_selection | boolean | false | Chiedere prima che la scheda attiva cambi — un gesto dell'utente (clic, tastiera, scorciatoia, elenco delle schede) e of_select_page: attiva ue_selection_changing, che può rifiutare; un of_select_page rifiutato restituisce -4. Disattivato per impostazione predefinita, come ogni evento annullabile: lo metta a true per poter rifiutare (lavoro non salvato). Ogni domanda di un gesto costa un'andata e ritorno verso PowerBuilder (~35 ms) |
ib_veto_close | boolean | false | Chiedere prima che l'utente chiuda una scheda (croce, clic centrale, menu contestuale, Canc): attiva ue_tab_closing, che può rifiutare. Disattivato per impostazione predefinita: lo metta a true per tenere una pagina con lavoro non salvato |
ib_context_menu | boolean | true | Menu contestuale integrato sull'intestazione di una scheda: Chiudi, Chiudi le altre, Chiudi a destra, Chiudi tutte, disattivati quando non hanno bersaglio. Attivo per impostazione predefinita. Il clic destro seleziona prima la scheda: se l'applicazione rifiuta il cambio, non si apre alcun menu. Con ib_veto_close, ogni chiusura passa da ue_tab_closing, una domanda per pagina: quella che detiene lavoro non salvato rifiuta da sola e resta aperta mentre le sue vicine se ne vanno. A false, il clic destro su una scheda la seleziona e poi solleva ue_tab_rclicked: apra lì il suo menu |
ib_cycle_keys | boolean | true | Ctrl+Tab / Ctrl+Maiusc+Tab e Ctrl+Pag giù / Ctrl+Pag su passano da una scheda all'altra, dalla banda e dall'interno di una pagina ospitata. Attivo per impostazione predefinita. Lo metta a false quando una pagina ha bisogno di questi tasti per sé: un campo multiriga che digita una tabulazione, un Tab nativo di PowerBuilder posto in una pagina |
is_close_mode | string | "always" | Dove compare la croce di una scheda chiudibile: always (predefinito) su ogni scheda chiudibile, active solo sulla scheda attiva, hover sulla scheda attiva e su quella sotto il puntatore. Lo spazio della croce è conservato: una scheda non cambia mai larghezza sotto il puntatore. Il clic centrale e Canc chiudono sempre. Costanti CLOSE_ALWAYS, CLOSE_ACTIVE, CLOSE_HOVER |
ii_strip_width | integer | 0 | Larghezza di una banda verticale (POSITION_START / POSITION_END), in pixel. 0 (predefinito) = la larghezza che chiedono i titoli, ma mai più del 40 % del componente: un titolo lungo termina allora con puntini di sospensione e la pagina ospitata conserva il suo spazio. Una banda orizzontale lo ignora |
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 |
Proprietà di una pagina — n_pbt_tab_page #
Ottenute con of_page(id), si modificano a caldo, senza ricostruire la banda.
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_title | string | "" | Etichetta della scheda. Accetta il testo formattato con tag |
is_icon | string | "" | Icona della scheda (forme accettate: percorso, mono:, tint:, risorsa di DLL). Vuoto = nessuna icona |
ib_enabled | boolean | true | false disattiva la scheda: nessun clic, tasto, scorciatoia né of_select_page la rende attiva, e non ha la croce di chiusura. Disattivare la scheda attiva la lascia attiva e la sua pagina utilizzabile: disattivi la pagina stessa se necessario (il suo codice sa se deve restare modificabile) |
ib_visible | boolean | true | false nasconde la scheda senza eliminare la pagina; nascondere la scheda attiva attiva la sua vicina (quella a destra, altrimenti quella a sinistra); nascondere l'ultima scheda visibile nasconde la pagina e solleva ue_selection_changed con una chiave vuota |
ib_closable | boolean | false | Croce di chiusura su questa scheda. Raramente nota al momento dell'aggiunta: diventa true non appena il documento contenuto viene salvato, false mentre vi gira un'elaborazione. Anche un clic centrale su una scheda chiudibile la chiude, come la sua croce |
is_shortcut | string | "" | Combinazione di tasti che attiva questa scheda: "Ctrl+2", "Alt+F", "F6"… Risponde ovunque si trovi l'utente nella finestra, pagina ospitata compresa — la combinazione è tenuta dalla DLL, non dalla barra delle schede. Selezionare così è un clic: ue_selection_changing viene chiesto se ib_veto_selection è attivo, ue_selection_changed segue; una scheda disattivata o nascosta la ignora. "" la rimuove. Lo scriva una volta aggiunta la pagina: su una chiave che nessuna pagina porta non viene registrato nulla e of_get_last_error() del componente dice perché |
ib_modified | boolean | false | La pagina contiene lavoro non salvato: un punto prende il posto della sua croce (la croce torna sotto il puntatore), o segue il titolo di una scheda che non si chiude; un lettore di schermo sente «Modificata» |
is_badge | string | "" | Un contatore dopo il titolo, nei colori dell'accento: "3", "12", "!"… "" lo rimuove |
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 | Accento di questa pagina: sottolinea la sua scheda finché è quella attiva (dal lato che tocca la pagina) e colora il suo anello di focus da tastiera. -1 le restituisce l'accento del componente |
il_back_color | long | -1 | Sfondo di questa scheda, attiva o no (-1 = quello del componente, che segue il tema) |
il_text_color | long | -1 | Colore del testo di questa scheda (-1 = quello del componente) |
il_back_color_hover | long | -1 | Sfondo di questa scheda sotto il puntatore (-1 = quello del componente) |
il_text_color_hover | long | -1 | Colore del testo di questa scheda sotto il puntatore (-1 = quello del componente) |
Metodi #
| Metodo | Ruolo | |
|---|---|---|
of_add_page (string as_key, string as_title, dragobject ado_page) | Aggiunge una scheda non chiudibile, senza icona, e ospita il controllo. Restituisce 0 una volta applicato, -5 se la chiave è vuota, contiene un / o un ` | , è già presa, o se la pagina manca o è già ospitata (da questa scheda sotto un'altra chiave, o da un altro componente): allora non viene aggiunto nulla, -2` se il componente non è creato |
of_add_page (string as_key, string as_title, dragobject ado_page, boolean ab_closable) | Idem, con crocetta di chiusura se ab_closable. Restituisce 0 una volta applicato, -5 se la chiave è vuota, contiene un / o un ` | , è già presa, o se la pagina manca o è già ospitata (da questa scheda sotto un'altra chiave, o da un altro componente): allora non viene aggiunto nulla, -2` se il componente non è creato |
of_add_page (string as_key, string as_title, dragobject ado_page, boolean ab_closable, string as_icon) | Idem, con l'icona posta nella stessa chiamata (la scheda appare subito completa). Restituisce 0 una volta applicato, -5 se la chiave è vuota, contiene un / o un ` | , è già presa, o se la pagina manca o è già ospitata (da questa scheda sotto un'altra chiave, o da un altro componente): allora non viene aggiunto nulla, -2` se il componente non è creato |
of_add_page (string as_key, string as_title) | Aggiunge una scheda senza il suo controllo: compare subito, e ue_page_needed chiede il controllo la prima volta che la pagina viene mostrata — il CreateOnDemand di un Tab PowerBuilder (vedere of_supply_page). Scheda non chiudibile, senza icona. Restituisce 0 una volta applicato, -5 se la chiave è vuota, contiene un / o un ` | , o è già presa: allora non viene aggiunto nulla, -2` se il componente non è creato |
of_add_page (string as_key, string as_title, boolean ab_closable, string as_icon) | Lo stesso, dicendo se la scheda si chiude e qual è la sua icona. Restituisce 0 una volta applicato, -5 se la chiave è vuota, contiene un / o un ` | , o è già presa: allora non viene aggiunto nulla, -2` se il componente non è creato |
of_insert_page (string as_key, string as_title, dragobject ado_page, integer ai_index) | Aggiunge la pagina e poi la sposta alla posizione ai_index (1 = la prima). Restituisce 0 una volta applicato, -5 per gli stessi rifiuti di of_add_page, -2 se il componente non è creato. Una posizione 0 o inferiore vale la prima, oltre la fine l'ultima. Se la scheda non può essere messa al suo posto, la pagina viene tolta e il codice restituito | |
of_insert_page (string as_key, string as_title, dragobject ado_page, boolean ab_closable, string as_icon, integer ai_index) | Idem, dicendo ciò che dice of_add_page : se la scheda si chiude, e la sua icona. Restituisce 0 una volta applicato, -5 per gli stessi rifiuti di of_add_page, -2 se il componente non è creato. Una posizione 0 o inferiore vale la prima, oltre la fine l'ultima. Se la scheda non può essere messa al suo posto, la pagina viene tolta e il codice restituito | |
of_move_page (string as_key, integer ai_index) | Sposta una scheda esistente alla posizione ai_index (1 = la prima); la pagina ospitata e la selezione vengono conservate. Restituisce 0 una volta applicato, -5 se la chiave non designa alcuna pagina, -2 se il componente non è creato. Una posizione 0 o inferiore vale la prima, oltre la fine l'ultima; una scheda già al suo posto non si muove e non annuncia nulla | |
of_select_page (string as_key) | Attiva una scheda, come un clic su di essa: con ib_veto_selection attivo, viene chiesto prima ue_selection_changing; poi segue ue_selection_changed, come per un clic (subito dopo il suo script, dalla coda degli eventi), e of_selected_key() riletto subito dopo restituisce già la nuova chiave. Scheda già attiva: nulla viene chiesto né sollevato. Restituisce 0 una volta applicato (o se già attiva), -4 se il suo ue_selection_changing ha rifiutato (nulla si muove), -5 se la chiave non designa alcuna pagina o se la pagina non può essere mostrata (nascosta, disattivata, oltre il limite della demo) — anche quando in seguito nessuna pagina è attiva, -2 se il componente non è creato | |
of_remove_page (string as_key) | Rimuove la scheda e restituisce il controllo alla sua finestra di origine, nascosto. Il controllo resta utilizzabile e può essere ospitato altrove. Non solleva ue_tab_closed: l'ha fatto il suo codice. Se era la pagina attiva, la sua vicina diventa attiva. Restituisce 0 una volta applicato, -5 se la chiave non designa alcuna pagina, -2 se il componente non è creato | |
of_selected_key ( ) | Identificatore della scheda attiva, "" se nessuna | |
of_get_layout ( ) | Rilegge la disposizione corrente in JSON: l'ordine delle schede e la visibilità di ciascuna. Da memorizzare (file, database, registro) e da restituire con of_set_layout all'avvio successivo. La stessa coppia porta gli stessi nomi su ogni componente riorganizzabile | |
of_set_layout (string as_layout_json) | Ripristina una disposizione letta con of_get_layout o ricevuta con ue_layout_changed. Ciò che la disposizione non nomina conserva il suo posto in fondo: una disposizione di ieri non deve far sparire ciò che è stato aggiunto da allora. Quando cambia l'ordine o la visibilità, ue_layout_changed viene sollevato una volta; una disposizione che non cambia nulla non viene annunciata. Se nasconde la scheda attiva, la sua vicina diventa attiva e ue_selection_changed lo dice. Restituisce 0 una volta applicato, -5 se il testo è vuoto o non è JSON valido, -2 se il componente non è creato | |
of_supply_page (string as_key, dragobject ado_page) | Dà il suo controllo a una pagina aggiunta senza (of_add_page(key, title)) — in ue_page_needed, o quando il suo codice è pronto. La pagina a schermo lo mostra subito; un'altra lo tiene nascosto finché non viene scelta. Restituisce 0 una volta ospitato, -5 se la chiave non nomina alcuna pagina, se la pagina ha già il suo controllo, o se il controllo manca o è già ospitato, -2 se il componente non è creato | |
of_page (string as_key) | Handle n_pbt_tab_page della pagina (creato al primo accesso). Viene restituito un handle per qualsiasi chiave, anche una che nessuna pagina porta ancora: verifichi con of_has | |
of_refresh_page (string as_key) | Aggiorna il rendering di una pagina costruita fuori schermo, senza sfarfallio. Restituisce 0, -5 se la chiave non designa alcuna pagina, -2 se il componente non è creato | |
of_relayout ( ) | Ripubblica l'area di pagina affinché il controllo ospitato venga riposizionato (utile dopo una visualizzazione differita). 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 la propria icona istantaneamente. Restituisce 0 una volta applicato, -2 se il componente non è creato | |
of_reset ( ) | Svuota la banda: ogni pagina ospitata viene restituita alla sua finestra di origine, poi il componente torna allo stato iniziale. 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_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 |
of_add_pagerestituisce un codice negativo se l'identificatore è vuoto, già utilizzato, oppure se il controllo passato non è valido o è già ospitato.
Quando le schede sono troppe — si riducono per stare nella banda, ma mai sotto una larghezza leggibile: l'icona e la croce di chiusura occupano il loro spazio in aggiunta al titolo, mai al suo posto. Quelle che non entrano più escono dalla banda, e alla sua estremità compare un pulsante ···: apre l'elenco di tutte le schede visibili, con l'attiva spuntata, e la scelta vi passa. La scheda attiva resta sempre a schermo. La banda non scorre — quel pulsante è la via verso le schede fuori dal riquadro. Nulla da programmare, il comportamento è automatico.
Tastiera e mouse — Ctrl+Tab e Ctrl+Pag giù passano alla scheda successiva, Ctrl+Maiusc+Tab e Ctrl+Pag su alla precedente: contano solo le schede che possono diventare attive (quelle nascoste e disattivate vengono saltate), e il percorso ricomincia dall'inizio. Questi tasti rispondono quando la tastiera è nella banda delle schede o in una pagina che essa ospita — un controllo PowerBuilder della pagina come un altro componente posto al suo interno; da un controllo fuori dal tab, restano alla finestra. È un gesto dell'utente: ue_selection_changing viene posto se ib_veto_selection è attivo, poi segue ue_selection_changed. Un clic centrale su una scheda chiudibile la chiude, esattamente come la sua croce: stessa domanda ue_tab_closing se ib_veto_close è attivo, poi ue_tab_closed; su una scheda disattivata o non chiudibile non fa nulla. Nulla da programmare. Maiusc+F10 o il tasto Menu su una scheda apre il suo menu sotto la scheda; Ctrl+Maiusc+freccia sposta la scheda che ha il focus quando ib_reorderable è a true. Se una pagina ha bisogno di Ctrl+Tab per sé, metta ib_cycle_keys a false.
Event #
| Event | Attivato quando |
|---|---|
ue_selection_changed (string as_from_key, string as_key) | La scheda attiva è cambiata, per un gesto (un clic, la tastiera compreso Ctrl+Tab, una scorciatoia, l'elenco delle schede), per of_select_page (anche un ordine del suo codice lo solleva, come SelectTab solleva SelectionChanged) o perché una scheda se ne va (chiusa, rimossa, nascosta). Stessi argomenti di ue_selection_changing: la domanda e il suo esito si leggono allo stesso modo, e as_from_key è la pagina lasciata — anche quando non esiste più. Un as_key vuoto significa che nessuna scheda può più essere mostrata: tutte le pagine sono nascoste. Chiudere la scheda attiva solleva ue_selection_changed(chiusa, vicina) poi ue_tab_closed(chiusa). Una pagina aggiunta senza il suo controllo riceve ue_page_needed prima di questo event |
ue_tab_closed (string as_key) | L'utente ha chiuso una scheda: la sua crocetta, un clic centrale su di essa, il menu contestuale o il tasto Canc. La scheda è già stata rimossa e la pagina restituita alla sua finestra. of_remove_page non lo solleva mai: l'ha fatto il suo codice |
ue_tab_reordered (string as_key, integer ai_index) | L'utente ha depositato un'intestazione in un nuovo posto — con il mouse, o con Ctrl+Maiusc+freccia su una scheda che ha il focus (ib_reorderable). Sollevato solo quando l'ordine è davvero cambiato. ai_index è la nuova posizione, a partire da 1, come of_move_page |
ue_layout_changed (string as_layout_json) | La disposizione da salvare è cambiata: l'utente ha trascinato un'intestazione, o il suo codice ha spostato una scheda (of_move_page, of_insert_page), ne ha nascosta / rimostrata una (ib_visible) o ha applicato una disposizione (of_set_layout) — una volta per ogni vero cambiamento, una volta per una raffica fatta sotto of_set_redraw(false). L'aggiunta, la chiusura o la rimozione di una scheda non lo sollevano: l'ordine delle altre non cambia. Porta la disposizione intera, non solo ciò che si è mosso: conservarla è una sola assegnazione |
ue_selection_changing (string as_from_key, string as_key) → boolean | Annullabile, posto prima che la scheda attiva cambi — un gesto dell'utente o of_select_page —, quando ib_veto_selection è a true (disattivato per impostazione predefinita). Restituisca false per restare sulla pagina: nulla si muove, e of_select_page restituisce -4 |
ue_tab_closing (string as_key) → boolean | Annullabile, posto prima che l'utente chiuda una scheda, quando ib_veto_close è a true (disattivato per impostazione predefinita). Chiamato per fare coppia con ue_tab_closed: closing / closed. Restituisca false per mantenere aperta la scheda (e la sua pagina ospitata) |
ue_tab_rclicked (string as_key, long al_x, long al_y) | Clic destro sull'intestazione di una scheda — o Maiusc+F10 / il tasto Menu su una scheda che ha il focus — quando ib_context_menu è a false: la scheda viene prima selezionata (tramite ue_selection_changing se è armato — una selezione rifiutata non solleva nulla), poi questo event ne dà la chiave e al_x, al_y in pixel dello schermo (il puntatore; da tastiera, l'angolo in basso a sinistra della scheda) — ciò che prende of_show di un contextmenu. Un menu PowerBuilder si apre al puntatore della finestra: PopMenu(PointerX(), PointerY()). Una scheda disattivata non solleva nulla; un solo event per clic destro |
ue_tab_double_clicked (string as_key) | Doppio clic sull'intestazione di una scheda (il DoubleClicked di un Tab PowerBuilder): rinominare la pagina, staccarla, ingrandirla — decide il suo codice. Il primo clic ha già selezionato la scheda. Solo un gesto; una scheda disattivata non solleva nulla |
ue_page_needed (string as_key) | Una pagina aggiunta senza il suo controllo (of_add_page(key, title)) sta per essere mostrata: crei qui il suo controllo (OpenUserObject…) e lo consegni con of_supply_page. Sollevato prima di ue_selection_changed, e prima che of_select_page restituisca il controllo; una volta per visualizzazione, di nuovo alla successiva finché la pagina non ha il suo controllo. Fino ad allora il corpo mostra il tema |
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 #
Un raccoglitore di pagine gestionali #
// event open : gli userobject di pagina sono gia posti sulla finestra
uo_tabs.of_set_redraw(/*on*/ false)
// Una scheda per ogni userobject di pagina
uo_tabs.of_add_page(/*key*/ "identity", /*title*/ "Identita", /*page*/ uo_identity)
uo_tabs.of_add_page(/*key*/ "addresses", /*title*/ "Indirizzi", /*page*/ uo_addresses)
uo_tabs.of_add_page(/*key*/ "accounting", /*title*/ "Contabilita", /*page*/ uo_accounting)
// Un'icona per scheda, impostata sull'handle della pagina
uo_tabs.of_page(/*key*/ "identity").is_icon = "mono:img\user.svg"
uo_tabs.of_page(/*key*/ "addresses").is_icon = "mono:img\map.svg"
uo_tabs.of_page(/*key*/ "accounting").is_icon = "mono:img\euro.svg"
// Un solo rendering per tutto, poi si mostra la prima scheda
uo_tabs.of_set_redraw(/*on*/ true)
uo_tabs.of_select_page(/*key*/ "identity")
Documenti chiudibili, aperti su richiesta #
// Local variables
string ls_key, ls_label
// Aprire un documento in una nuova scheda chiudibile : la sua chiave e il suo titolo
ls_key = "report42"
ls_label = "Rapporto 42"
uo_tabs.of_add_page(/*key*/ ls_key, /*title*/ ls_label, /*page*/ uo_editor, /*closable*/ true, /*icon*/ "mono:img\doc.svg")
uo_tabs.of_select_page(/*key*/ ls_key)
// event ue_tab_closed di uo_tabs : (string as_key)
// La scheda e gia stata rimossa ; resta solo da liberare i Suoi dati gestionali.
of_free_document(as_key)
// La croce solo sulla scheda attiva, un punto su una pagina che contiene
// lavoro non salvato, e un contatore su un'altra
uo_tabs.is_close_mode = uo_tabs.CLOSE_ACTIVE
uo_tabs.of_page(/*key*/ "report42").ib_modified = true
uo_tabs.of_page(/*key*/ "inbox").is_badge = "3"
Pagine create su richiesta #
Una pagina pesante non ha bisogno di esistere prima di essere visitata: la aggiunga senza il suo controllo, e crei il controllo in ue_page_needed, come il CreateOnDemand di un Tab PowerBuilder.
// event open della finestra : le pagine pesanti sono aggiunte SENZA il loro controllo
uo_tabs.of_add_page(/*key*/ "orders", /*title*/ "Ordini")
uo_tabs.of_add_page(/*key*/ "history", /*title*/ "Storico")
// event ue_page_needed di uo_tabs : (string as_key)
// Local variables
u_orders luo_orders
// La pagina e mostrata per la prima volta : creare il suo controllo, poi consegnarlo
if as_key = "orders" then
parent.OpenUserObject(luo_orders)
uo_tabs.of_supply_page(/*key*/ as_key, /*page*/ luo_orders)
end if
Riordino con il mouse #
// The user may drag a tab to a new place
uo_tabs.ib_reorderable = true
// event ue_tab_reordered di uo_tabs : (string as_key, integer ai_index)
// ai_index = nuova posizione, a partire da 1 (come of_move_page) : si memorizza l'ordine scelto.
of_save_order(as_key, ai_index)
Banda verticale #
// Banda di schede sul lato sinistro, utile quando le etichette sono lunghe
uo_tabs.is_position = uo_tabs.POSITION_START
Disattivare o nascondere una scheda in base ai diritti #
// Il percorso passa sempre dall'handle della pagina
uo_tabs.of_page(/*key*/ "accounting").ib_enabled = of_is_allowed("accounting")
uo_tabs.of_page(/*key*/ "audit").ib_visible = gb_expert_mode
Reagire alla selezione #
// event ue_selection_changed di uo_tabs : (string as_from_key, string as_key)
choose case as_key
case "identity" ; uo_identity.of_refresh()
case "addresses" ; uo_addresses.of_refresh()
case "accounting" ; uo_accounting.of_refresh()
end choose
Rifiutare un cambio di scheda o una chiusura #
// Entrambe le domande vanno ATTIVATE: senza queste righe il componente non
// chiede nulla e cambia pagina o chiude subito.
uo_tabs.ib_veto_selection = true
uo_tabs.ib_veto_close = true
// event ue_selection_changing di uo_tabs : (string as_from_key, string as_key)
// Restituire FALSE mantiene l'utente sulla pagina che sta lasciando.
if of_page_modified(as_from_key) then
if MessageBox("Modifiche", "Uscire senza salvare ?", Question!, YesNo!) = 2 then
return false
end if
end if
return true
// event ue_tab_closing di uo_tabs : (string as_key)
// Restituire FALSE mantiene aperti la scheda e la sua pagina ospitata.
return not of_page_modified(as_key)
Ripartire da una banda vuota #
// of_reset restituisce OGNI pagina ospitata alla sua finestra di origine prima di svuotare
uo_tabs.of_reset()
uo_tabs.of_add_page(/*key*/ "home", /*title*/ "Home", /*page*/ uo_home)
Buone pratiche #
- I controlli ospitati devono esistere prima della chiamata: li ponga sulla finestra in fase di progettazione, il componente si occupa di nasconderli e riposizionarli.
- Carichi le pagine una sola volta nell'
open, poi piloti unicamente la selezione: è più rapido che aggiungere e rimuovere pagine di continuo. - Chiami
of_preload_iconsall'avvio se le Sue schede portano icone: in caso contrario, la prima apertura di una scheda nascosta mostra un breve ritardo prima dell'icona. - Entrambe le domande sono opt-in: metta
ib_veto_selection/ib_veto_closeatrueper poter rifiutare un cambio di scheda o una chiusura (un event lasciato vuoto autorizza sempre l'azione). Ogni domanda costa un andata e ritorno verso PowerBuilder. - Un controllo ospitato è una finestra nativa: si disegna al di sopra dello strato web. Nessun effetto visivo del componente può passargli sopra.
- Non dimentichi
of_reset()prima di ricostruire una banda: senza di esso, riutilizzare un identificatore di pagina fallisce e i controlli precedenti restano visualizzati. - Per aree ridimensionabili e sganciabili anziché pagine esclusive, preferisca dockcontainer.
- Da tastiera, la barra delle schede segue il suo asse: Sinistra/Destra (invertite nelle lingue da destra a sinistra), Su/Giù nelle posizioni
start/end, Inizio/Fine, Invio o Spazio per attivare, Canc per chiudere una scheda chiudibile. Le schede disattivate e quelle uscite dalla barra vengono saltate. - Molte pagine pesanti? Le aggiunga senza il loro controllo (
of_add_page(key, title)) e crei ognuna inue_page_needed: la schermata si apre in fretta, ed esistono solo le pagine visitate.
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.