PBToolboxAI v5 ← Site

propertygrid — u_pbt_propertygrid #

← Riferimento dei componenti · Sommario della guida

propertygrid è la finestra delle proprietà di un IDE, per i vostri dati: valori con nome, ordinati in categorie che si comprimono, ognuno con l'editor del suo tipo — testo, numero, casella di controllo, elenco di scelte, colore, data, password. Due viste (per categoria, alfabetica), una casella di ricerca, un riquadro di guida che descrive la proprietà selezionata e un pulsante … che apre una vostra finestra di dialogo. L'utente modifica, ue_value_changed ve lo dice.

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


In breve #

Userobjectu_pbt_propertygrid
Classi di itemn_pbt_propertygrid_category (categoria) → n_pbt_propertygrid_property (proprietà)
Serve aSostituire una schermata di impostazioni messa insieme con campi e caselle con un ispettore a tema, tipizzato e ricercabile: le impostazioni di un documento, di un report, di una scheda, di un oggetto dell'applicazione
ValoriSempre testo, uno per uno (of_property(indirizzo).is_value); tutti insieme e tipizzati con of_values
Opzioni opt-inib_veto_changes

Avvio rapido #

// The settings of a report : one value at the top, then a category
uo_grid.of_add_property(/*keys*/ "title", /*label*/ "Title", /*type*/ u_pbt_propertygrid.TYPE_STRING, /*value*/ "Monthly sales")
uo_grid.of_add_category(/*key*/ "page", /*title*/ "Page")
uo_grid.of_add_property(/*keys*/ "page/landscape", /*label*/ "Landscape", /*type*/ u_pbt_propertygrid.TYPE_BOOLEAN, /*value*/ "true")
uo_grid.of_add_property(/*keys*/ "page/margin", /*label*/ "Margin (mm)", /*type*/ u_pbt_propertygrid.TYPE_NUMBER, /*value*/ "12.5")

// The help pane describes the selected property
uo_grid.of_property(/*keys*/ "page/margin").is_description = "Around the printed area, in [b]millimetres[/b]."
// event ue_value_changed of uo_grid : (string as_keys, string as_value)
// The value is already written ; the address says which one
choose case as_keys
    case "title"
        of_set_report_title(as_value)
    case "page/landscape"
        of_set_landscape(as_value = "true")
end choose

Un indirizzo per proprietà #

Una proprietà si designa con il suo indirizzo: la sola chiave al primo livello ("title"), la categoria poi la proprietà unite da / sotto una categoria ("page/margin"). Una proprietà espandibile (TYPE_GROUP) contiene a sua volta delle proprietà, aggiunte al suo indirizzo: "appearance/font/size" nel gruppo font della categoria appearance, "margin/left" in un gruppo in cima — e un gruppo può contenerne un altro. Ciò che contiene una proprietà è quindi una categoria (un solo livello) o un gruppo. Una categoria si designa con la sola chiave. Al primo livello, una chiave nomina una cosa sola: una categoria e una proprietà in cima non possono condividerla. Gli eventi portano lo stesso indirizzo, quello che avete scritto.

// A category by its key, a property by its address
uo_grid.of_category(/*key*/ "page").ib_collapsed = true
uo_grid.of_property(/*keys*/ "page/margin").is_value = "15"

// A property held by a group : the address goes through the group
uo_grid.of_property(/*keys*/ "appearance/font/size").is_value = "11"

I tipi di valore #

Il tipo si sceglie una volta, in of_add_property, e dà l'editor della riga. Il valore invece è sempre testo — dato, letto, consegnato dagli eventi — scritto allo stesso modo qualunque sia la lingua della postazione.

CostanteEditorIl valore, come testo
TYPE_STRINGCasella di testoIl testo così com'è
TYPE_NUMBERCasella di testo che accetta solo un numero, letto nella lingua di visualizzazione: il suo separatore decimale o un punto, il suo raggruppamento delle migliaia quando è ben formato (1,000 vale mille in inglese, 1.500 millecinquecento in tedesco, 1 234,5 in francese); un'immissione ambigua (1,5 in inglese, 1 2) o che non è un numero è rifiutata: il testo digitato resta, incorniciato di rosso, e il riquadro di guida dice perché (Esc vi rinuncia). is_min, is_max e id_step limitano l'immissione e regolano Su / GiùCon il punto: "12.5"; "" = vuoto. Conservato cifra per cifra ("1.50" resta "1.50"); un testo che non è un numero è rifiutato
TYPE_BOOLEANCasella di controllo"true" · "false"
TYPE_ENUMElenco di scelte con i colori del tema; le sue opzioni si aggiungono una per una (of_add_option), il loro testo semplice, senza tagIl valore dell'opzione scelta, mai il suo testo
TYPE_COLORCampione del colore e selettore di colore; la cella mostra r, g, b. Oltre 16777215, un colore di sistema di PowerBuilder (67108864 Button Face, 553648127 Transparent, 1073741824 Window Background…) appare con il suo nome, con un campione neutro, e il selettore si apre senza colore correnteIl long RGB scritto come testo: String(RGB(255, 0, 0)) = "255"
TYPE_DATECalendario; la cella mostra la data nel formato della lingua di visualizzazione"yyyy-mm-dd" : String(Today(), "yyyy-mm-dd")
TYPE_PASSWORDCasella di testo mascherataIl testo in chiaro, mai mostrato né trovato dalla ricerca (anche {x:raw} di un riepilogo resta mascherato)
TYPE_GROUPNessuno: una proprietà espandibile (un carattere, un margine), con una freccia all'inizio della sua etichetta; contiene le proprietà aggiunte al suo indirizzo e si espande con ib_expanded, la sua freccia, un doppio clic sulla sua etichetta o la tastiera. Chiusa quando viene aggiuntaNessuno da dare ("", ogni altro è rifiutato); letto, il suo riepilogo: quello che scrive is_summary, altrimenti i valori mostrati di ciò che contiene, nascosti saltati, uniti da ; ("Segoe UI; 9; True"); scritto, ignorato

Un valore che il suo tipo non può contenere è rifiutato — da of_add_property (-5) come da is_value o is_default (il vecchio resta) — e of_get_last_error dice perché: un numero che non lo è, un booleano diverso da true / false / 1 / 0, una data che non è un vero yyyy-mm-dd, un colore che non è un intero a partire da -1, un TYPE_STRING o un TYPE_PASSWORD su più righe (il campo della griglia contiene una riga). "" (nessun valore) è sempre accettato. Un valore di elenco che nessuna opzione offre è accettato, e mostrato così com'è: un elenco può essere caricato dopo il suo valore. Il colore -1 — quello che dà il tema, la convenzione di tutta la libreria — appare «(predefinito)»; un colore di sistema e i true / false di un riepilogo si scrivono nella lingua di visualizzazione.


Proprietà #

ProprietàTipoPredefinitoRuolo
is_sortstring"categorized"La vista: SORT_CATEGORIZED (le proprietà in cima, poi ogni categoria sotto un'intestazione che si comprime) o SORT_ALPHABETICAL (un solo elenco ordinato per etichetta così come appare, senza tag, e senza intestazioni; un gruppo tiene sotto di sé ciò che contiene). Anche i due pulsanti della barra degli strumenti la cambiano: riletta in diretta. Passare all'alfabetica mentre è selezionata un'intestazione svuota la selezione
ib_toolbarbooleantrueLa barra degli strumenti: le due viste e la casella di ricerca. false la nasconde; is_sort e is_filter restano pilotabili dal codice
ib_helpbooleantrueIl riquadro di guida, in basso: l'etichetta e la descrizione (is_description) della proprietà selezionata, il titolo di una categoria selezionata
ii_label_widthinteger40Quota della larghezza data alle etichette, in percentuale, da 15 a 85. L'utente trascina la linea tra etichette e valori: riletta in diretta
is_filterstring""La ricerca: restano solo le proprietà la cui etichetta, chiave o valore mostrato contiene questo testo, senza distinzione di maiuscole; durante una ricerca, ogni categoria e ogni gruppo che contengono una corrispondenza appaiono aperti, senza perdere il loro stato. L'etichetta si legge così come appare, senza i suoi tag; né il titolo di una categoria né l'indirizzo completo vengono cercati. Durante una ricerca, comprimere o espandere da parte dell'utente non fa nulla; da parte del vostro codice (ib_collapsed, ib_expanded, of_expand_all, of_collapse_all) è registrato, solleva il suo evento e si vede appena la ricerca si svuota; una riga selezionata che la ricerca nasconde lascia la selezione (ue_selection_changed con un indirizzo vuoto). Anche la casella di ricerca la scrive (Esc la svuota): riletta in diretta. "" mostra tutto
ib_veto_changesbooleanfalseOpt-in: chiedere prima di scrivere un valore dell'utente (solleva ue_value_changing, che può rifiutare: la cella mostra di nuovo il vecchio valore). Un valore scritto dal vostro codice non chiede mai
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)
is_tooltipstring""Tooltip semplice mostrato al passaggio del mouse sul componente
is_super_tooltip_titlestring""Titolo del tooltip avanzato (prevale su is_tooltip)
is_super_tooltip_textstring""Testo del tooltip avanzato (markup avanzato accettato)
is_super_tooltip_imagestring""Immagine del tooltip avanzato

Proprietà di una categoria — n_pbt_propertygrid_category #

ProprietàTipoPredefinitoRuolo
is_titlestring""Titolo dell'intestazione. Accetta il testo formattato con tag. Vuoto, l'intestazione mostra la chiave
ib_collapsedbooleanfalsetrue comprime la categoria: la sua intestazione resta, le sue proprietà si nascondono (una selezione che vi si trovava risale all'intestazione). Segue ue_category_toggled, come per un clic sull'intestazione. Durante una ricerca, ogni categoria appare aperta: un clic sull'intestazione non fa nulla, e true impostato dal codice è registrato (segue l'evento, la lettura lo restituisce) e si vede appena la ricerca si svuota. Riletta in diretta
ib_visiblebooleantruefalse toglie la categoria, e tutto ciò che contiene, dalla griglia; mantiene la sua chiave e i suoi valori, che of_values restituisce sempre
is_tooltipstring""Tooltip semplice mostrato al passaggio del mouse sull'item
is_super_tooltip_titlestring""Titolo del tooltip avanzato dell'item (prevale su is_tooltip)
is_super_tooltip_textstring""Testo del tooltip avanzato dell'item (markup avanzato accettato)
is_super_tooltip_imagestring""Immagine del tooltip avanzato dell'item
il_accentlong-1Accento dell'intestazione della categoria: la sua selezione lo prende (-1 = quello del componente). Per colorarla tutta, il_back_color / il_text_color
il_back_colorlong-1Sfondo dell'intestazione della categoria, in RGB(r,g,b) (-1 = quello che dà il tema)
il_text_colorlong-1Colore del testo dell'intestazione della categoria (-1 = quello che dà il tema)
il_back_color_hoverlong-1Sfondo dell'intestazione della categoria sotto il puntatore (-1 = quello che dà il tema)
il_text_color_hoverlong-1Colore del testo dell'intestazione della categoria sotto il puntatore (-1 = quello che dà il tema)

Proprietà di una proprietà — n_pbt_propertygrid_property #

ProprietàTipoPredefinitoRuolo
is_valuestringquello di of_add_propertyIl valore, come testo (vedere I tipi di valore); per un elenco, il valore dell'opzione. Scriverlo non solleva nulla, come SetItem; leggerlo dà il valore corrente, chiunque l'abbia scritto. Un valore che il suo tipo non può contenere (un TYPE_NUMBER che riceve un testo che non è un numero) è rifiutato: il vecchio valore resta, e of_get_last_error della griglia dice perché. Su un gruppo (TYPE_GROUP), la lettura dà il suo riepilogo (vedere is_summary), e la scrittura è ignorata
is_labelstringquello di of_add_propertyIl nome mostrato nella colonna di sinistra; accetta il testo formattato con tag. Vuoto, la riga mostra la chiave, così com'è (mai letta come tag). La vista alfabetica lo ordina, e la ricerca lo legge, così come appare: senza i suoi tag
is_descriptionstring""Il testo del riquadro di guida mentre la proprietà è selezionata; accetta il testo formattato con tag
ib_readonlybooleanfalseMostrata, non modificabile: il valore appare in grigio e nessun editor si apre, né con un clic, né con la tastiera, né con un doppio clic. Un gruppo in sola lettura rende in sola lettura tutto ciò che contiene. Il pulsante … (ib_ellipsis) resta attivo: leggete ib_readonly in ue_ellipsis_clicked per aprire la vostra finestra in sola lettura
ib_visiblebooleantruefalse toglie la riga dalla griglia; la proprietà mantiene il suo indirizzo e il suo valore (of_values lo restituisce sempre). Nascondere un gruppo nasconde ciò che contiene; nascondere la proprietà selezionata svuota la selezione
ib_ellipsisbooleanfalseUn pulsante … a fine riga: un clic — o Ctrl+Invio sulla riga selezionata — seleziona la riga e solleva ue_ellipsis_clicked, anche su una proprietà in sola lettura, per una vostra finestra di dialogo (un file, un carattere, un elenco preso dal database)
ib_expandedbooleanfalsePer una proprietà espandibile (TYPE_GROUP): true mostra ciò che contiene, rientrato sotto di essa; false lo nasconde (una selezione che vi si trovava risale al gruppo). Segue ue_property_toggled, come per un clic sulla sua freccia. Durante una ricerca, un gruppo che contiene una corrispondenza appare aperto: la sua freccia non fa nulla, e un valore impostato dal codice è registrato (segue l'evento) e si vede appena la ricerca si svuota. Riletta in diretta; senza effetto sugli altri tipi
is_summarystring""Per una proprietà espandibile (TYPE_GROUP): come si scrive il suo riepilogo, un modello. {size} è il valore mostrato della sua sotto-proprietà size, {size:raw} il suo valore così come è conservato (una password resta mascherata), {?bold}…{/bold} un pezzo tenuto solo quando bold è attivo (un booleano vero, un valore né vuoto, né false, né 0), {!bold}…{/bold} solo quando non lo è, {{ }} parentesi graffe letterali; una chiave sconosciuta non dà nulla. "{name}, {size} pt{?bold}, bold{/bold}" mostra Segoe UI, 10 pt, bold. Vuoto (predefinito): i valori mostrati, nascosti saltati, uniti da ; . Il riepilogo è testo semplice; segue ogni modifica di ciò che il gruppo contiene; is_value del gruppo lo restituisce
is_maskstring""Per un TYPE_NUMBER: 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. 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'è; senza effetto sugli altri tipi
is_formatstring""Per un TYPE_NUMBER: il suo formato di visualizzazione, come la cella mostra il numero quando il suo campo non ha la tastiera — stessa sintassi di is_mask, con i suoi letterali: #,##0 "px" mostra 575 px, $#,##0.00 un prezzo, 0.0% un tasso (0,125 mostra 12,5%). Anche il riepilogo di un gruppo e la ricerca lo leggono. Quando il campo prende la tastiera il suo testo diventa quello di is_mask (575), 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: ue_value_changed riporta solo ciò che l'utente ha digitato, il numero nudo. Vuoto (predefinito): la cella mostra il suo is_mask; senza effetto sugli altri tipi
is_defaultstring""Il valore predefinito, come testo al pari di is_value. Finché il valore ne differisce, è scritto in grassetto e il riquadro di guida mostra il predefinito; l'utente lo ripristina con Canc sulla riga selezionata o con il pulsante Ripristina (↺) della barra degli strumenti, mostrato solo se almeno una proprietà ha un predefinito — un gesto dell'utente: ue_value_changing se il veto è attivo, poi ue_value_changed. Un valore che il suo tipo non può contenere è rifiutato. Scrivere "" toglie il predefinito: niente più grassetto, nessun predefinito nel riquadro di guida, "" riletto. Senza predefinito, Canc svuota il valore (un booleano resta com'è)
is_errorstring""Un errore della vostra applicazione ("Questo nome esiste già"): il valore è incorniciato di rosso, il riquadro di guida lo dice a parole, così come una descrizione comando, e un lettore di schermo lo annuncia. Scompare quando l'utente modifica la proprietà, o quando scrivete "". Posto in ue_value_changing prima di rifiutare, spiega il rifiuto. Letto, l'errore che la proprietà mostra: il vostro, altrimenti quello della griglia quando un numero digitato è rifiutato (non è un numero, fuori da is_min / is_max) — il testo digitato resta allora sullo schermo per essere corretto, Esc vi rinuncia
is_minstring""Per un TYPE_NUMBER: il valore più piccolo che l'utente può dare, come numero scritto dal codice ("0", "12.5"); "" = nessun limite. Un numero digitato al di sotto è rifiutato, resta sullo schermo e il riquadro di guida dice perché; Giù si ferma lì. Il vostro codice può sempre scrivere qualsiasi valore. Un testo che non è un numero è rifiutato (of_get_last_error), come un limite che incrocia l'altro (is_min sopra is_max). Ignorata dagli altri tipi
is_maxstring""Per un TYPE_NUMBER: il valore più grande che l'utente può dare; "" = nessun limite. Stesse regole di is_min; Su si ferma lì
id_stepdouble1Per un TYPE_NUMBER: ciò che Su e Giù aggiungono o tolgono mentre il suo campo ha la tastiera, entro is_min / is_max. Ogni passo è un valore dell'utente (ue_value_changed, chiesto prima se il veto è attivo). 0 o meno vale 1. Ignorato dagli altri tipi
of_is_dirty ( ) → boolean——TRUE quando il valore differisce dal suo riferimento (vedere of_is_dirty della griglia)
of_type ( ) → string——Il tipo dato a of_add_property (una costante TYPE_*). Sola lettura: un tipo si sceglie una volta
is_tooltipstring""Tooltip semplice mostrato al passaggio del mouse sull'item
is_super_tooltip_titlestring""Titolo del tooltip avanzato dell'item (prevale su is_tooltip)
is_super_tooltip_textstring""Testo del tooltip avanzato dell'item (markup avanzato accettato)
is_super_tooltip_imagestring""Immagine del tooltip avanzato dell'item
il_accentlong-1Accento della riga della proprietà: la sua selezione e la cornice del suo editor lo prendono (-1 = quello del componente). Per colorarla tutta, il_back_color / il_text_color
il_back_colorlong-1Sfondo della riga della proprietà, in RGB(r,g,b) (-1 = quello che dà il tema)
il_text_colorlong-1Colore del testo della riga della proprietà (-1 = quello che dà il tema)
il_back_color_hoverlong-1Sfondo dell'etichetta della proprietà quando il puntatore è sulla sua riga (-1 = quello che dà il tema)
il_text_color_hoverlong-1Colore dell'etichetta della proprietà quando il puntatore è sulla sua riga (-1 = quello che dà il tema)

Metodi #

Sul componente #

MetodoRuolo
of_add_category (string as_key, string as_title) → longAggiunge una categoria in fondo: un'intestazione che si comprime, sotto la quale si aggiungono poi le proprietà "chiave/nome". Un titolo vuoto mostra la chiave. Restituisce 0 una volta aggiunta, -5 per una chiave vuota, che contiene / o `, o già presa da una categoria o da una proprietà in cima, -2` se il componente non è creato
of_add_property (string as_keys, string as_label, string as_type, string as_value) → longAggiunge una proprietà al suo indirizzo, in fondo a ciò che la contiene: la sua categoria, il suo gruppo ("appearance/font/size", "margin/left") o le proprietà in cima. as_type è una costante TYPE_*, as_value il suo valore come testo ("" per un TYPE_GROUP, che non ne ha). Restituisce 0 una volta aggiunta, -5 per un indirizzo già preso, un genitore che non è né una categoria né un gruppo (o non ancora aggiunto), un livello vuoto ("layout/", "a//b"), una chiave che contiene `, un tipo sconosciuto, un valore TYPE_NUMBER che non è un numero come lo scrive il codice (un punto per i decimali, segno ed esponente facoltativi, "" ammesso), un booleano, una data o un colore che non lo sono, un testo o una password su più righe (of_get_last_error dice perché) o un valore dato a un TYPE_GROUP, -2` se il componente non è creato
of_add_option (string as_keys, string as_value, string as_text) → longAggiunge una opzione, in fondo, all'elenco di una proprietà TYPE_ENUM: as_value è ciò che la proprietà contiene (e ciò che dà ue_value_changed), as_text ciò che l'elenco mostra, come testo semplice senza tag ("" mostra il valore). Restituisce 0 una volta aggiunta, -5 per un indirizzo che non è una proprietà elenco, un valore che questa proprietà offre già, o un valore che contiene ` o / (of_keys_at designa un'opzione con l'indirizzo della proprietà seguito dal suo valore: un livello), -2` se il componente non è creato
of_remove_option (string as_keys, string as_value) → longToglie una opzione dall'elenco di una proprietà TYPE_ENUM, tramite il suo valore. Il valore che la proprietà contiene resta com'è, anche se era quell'opzione. Restituisce 0 una volta tolta, -5 per un indirizzo che non è una proprietà elenco, o un valore che il suo elenco non offre, -2 se il componente non è creato
of_clear_options (string as_keys) → longToglie tutte le opzioni di una proprietà TYPE_ENUM, per caricare un altro elenco senza perdere la proprietà, il suo handle, la sua selezione né i suoi indicatori. Il valore che contiene resta com'è: scrivete il nuovo in is_value. Restituisce 0 una volta svuotato, -5 per un indirizzo che non è una proprietà elenco, -2 se il componente non è creato
of_category (string as_key) → n_pbt_propertygrid_categoryHandle di una categoria, tramite la sua chiave (creato al primo accesso): il suo titolo, il suo stato compresso, la sua visibilità e i suoi colori si impostano tramite esso
of_property (string as_keys) → n_pbt_propertygrid_propertyHandle di una proprietà, tramite il suo indirizzo (creato al primo accesso): il suo valore, la sua etichetta, la sua descrizione, i suoi indicatori e i suoi colori si impostano e si leggono tramite esso. Un indirizzo che questa griglia non ha aggiunto (un errore di battitura) dà un handle che non viene conservato: scriverci non fa nulla, e of_get_last_error dice perché
of_remove_property (string as_keys) → longToglie una proprietà, e con essa il suo handle; un gruppo se ne va con tutto ciò che contiene. Se era selezionata, ue_selection_changed annuncia che non c'è più selezione. Restituisce 0 una volta tolta, -5 per un indirizzo che questa griglia non ha mai aggiunto, -2 se il componente non è creato
of_remove_category (string as_key) → longToglie una categoria e tutte le sue proprietà, con i loro handle. Se la selezione vi si trovava, ue_selection_changed annuncia che non ce n'è più. Restituisce 0 una volta tolta, -5 per una chiave che questa griglia non ha mai aggiunto come categoria, -2 se il componente non è creato
of_clear ( ) → longSvuota la griglia: categorie, proprietà, opzioni e handle. La vista, la barra degli strumenti, il riquadro di guida e la ricerca restano come sono (è of_reset che rimette ogni proprietà del componente). Se una riga era selezionata, segue ue_selection_changed con un indirizzo vuoto. Restituisce 0 una volta svuotata, -2 se il componente non è creato
of_select_property (string as_keys) → longSeleziona una riga, come un clic: una proprietà ("page/margin") o l'intestazione di una categoria ("page"). Ciò che contiene la proprietà si apre prima: la sua categoria compressa, i suoi gruppi chiusi (ue_category_toggled, ue_property_toggled) — solo se la riga sarà allora mostrata: una chiamata rifiutata non apre nulla. Segue ue_selection_changed, come per un clic. Restituisce 0 una volta selezionata (o se lo era già), -5 per un indirizzo che questa griglia non ha mai aggiunto o una riga non mostrata (nascosta, fuori dalla ricerca, oltre il limite della demo, un'intestazione nella vista alfabetica), -2 se il componente non è creato
of_clear_selection ( ) → longNon lascia nessuna riga selezionata; segue ue_selection_changed con un indirizzo vuoto. Niente di già selezionato: non viene sollevato nulla. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_selected_key ( ) → stringIndirizzo della riga selezionata, letto in diretta, chiunque l'abbia impostata: "page/margin", "page" per un'intestazione, "" se nessuna. Esattamente ciò che ue_selection_changed vi consegna
of_expand_all ( ) → longEspande tutte le categorie e apre tutti i gruppi; segue ue_category_toggled per ogni categoria che era compressa, ue_property_toggled per ogni gruppo che era chiuso. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_collapse_all ( ) → longComprime tutte le categorie e chiude tutti i gruppi; seguono ue_category_toggled e ue_property_toggled per ognuno che cambia. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_dirty_keys (ref string as_keys[]) → longRiempie as_keys[] con gli indirizzi delle proprietà che differiscono dal loro riferimento, nell'ordine della vista per categoria, e restituisce il loro numero (0 = niente da salvare); ciò che l'utente sta ancora digitando è prima convalidato
of_is_dirty ( ) → booleanTRUE quando almeno una proprietà differisce dal suo riferimento: il valore con cui è stata aggiunta, o ciò che ne hanno fatto of_load o of_reset_update — che l'abbia cambiata l'utente o il vostro codice. Lo stesso nome che sul form. Da non confondere con is_default, il valore mostrato in grassetto: questo dice cosa c'è da salvare. Ciò che l'utente sta ancora digitando è prima convalidato, come per of_values
of_load (string as_json) → longCarica dei valori in una volta: un oggetto JSON per indirizzo, la forma che restituisce of_values — le proprietà in cima, un oggetto per categoria e per gruppo ({"name":"Orders","layout":{"width":800}}) — o chiavi "layout/width". I valori sono scritti in silenzio (nessun ue_value_changed) e diventano il riferimento di of_is_dirty; gli errori mostrati scompaiono. Una proprietà che l'oggetto non nomina mantiene il suo valore, un numero è letto cifra per cifra. Un valore che la griglia non può prendere (nessuna proprietà a quell'indirizzo, un valore che il suo tipo non può contenere) è saltato: il resto è scritto, e of_get_last_error nomina gli indirizzi saltati. Ciò che l'utente stava digitando è abbandonato. Restituisce 0 una volta applicato (anche con valori saltati), -5 per un testo che non è un oggetto JSON, -2 se il componente non è creato
of_reset_update ( ) → longI valori presenti diventano il riferimento: of_is_dirty risponde di nuovo FALSE. Da chiamare una volta salvate le vostre impostazioni, come ResetUpdate di un DataWindow. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_revert ( ) → longRimette ogni proprietà al suo valore di riferimento, in silenzio (nessun evento, come un valore scritto dal codice), e toglie gli errori mostrati; ciò che l'utente stava digitando è abbandonato (dopo non viene sollevato nulla): il pulsante Annulla della vostra finestra di impostazioni. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_clear_errors ( ) → longToglie tutti gli errori della vostra applicazione (is_error di ogni proprietà). Un numero digitato che la griglia ha rifiutato resta: l'utente deve correggerlo. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_focus_property (string as_keys) → longMette la tastiera su una proprietà, come un clic sul suo valore: ciò che la contiene si apre prima (ue_category_toggled, ue_property_toggled), è selezionata (ue_selection_changed) e il suo editor prende la tastiera; un gruppo o una proprietà in sola lettura: la griglia. Restituisce 0, -5 per un indirizzo che questa griglia non ha mai aggiunto o una riga che non può essere mostrata (nascosta, fuori dalla ricerca, oltre il limite della demo), -2 se il componente non è creato
of_invalid_keys (ref string as_keys[]) → longRiempie as_keys[] con gli indirizzi delle proprietà in errore, nell'ordine della vista per categoria, e restituisce il loro numero (0 = la griglia è valida); ciò che l'utente sta ancora digitando è prima convalidato
of_is_valid ( ) → booleanTRUE quando nessuna proprietà mostrata porta un errore: né il vostro (is_error), né quello della griglia (un numero digitato rifiutato: non è un numero, fuori da is_min / is_max). Ciò che l'utente sta ancora digitando è prima convalidato: un testo rifiutato conta. Lo stesso nome che sul form
of_validate ( ) → longMette la tastiera sulla prima proprietà in errore — la sua categoria e i suoi gruppi si aprono, è selezionata e il suo editor prende la tastiera: ciò che chiama il vostro pulsante OK prima di salvare. Ciò che l'utente sta ancora digitando è prima convalidato. Restituisce il numero di proprietà in errore (0 = la griglia è valida, nulla si muove), -2 se il componente non è creato
of_values ( ) → stringTutti i valori insieme, letti in diretta — ciò che l'utente sta ancora digitando è prima convalidato, come da AcceptText (ue_value_changing se il veto è attivo, poi ue_value_changed) —, in un oggetto JSON: le proprietà in cima, poi ogni categoria come oggetto a sé, ogni gruppo come oggetto dentro ciò che lo contiene — nascoste comprese. Tipizzati: un numero è un numero, scritto cifra per cifra (un decimale di 21 cifre resta esatto), un booleano un booleano, un colore il suo long RGB, il resto testo. Si legge con n_pbt_json, tramite lo stesso indirizzo: lnv_json.of_get_number("page/margin"), lnv_json.of_get_number("appearance/font/size")
of_reset ( ) → longSvuota la griglia (of_clear) poi rimette ogni proprietà del componente al suo valore predefinito: vista per categoria, barra degli strumenti e riquadro di guida visibili, etichette al 40 %, ricerca vuota, domanda disattivata. Restituisce 0 una volta applicato, -2 se il componente non è creato

Su una categoria e su una proprietà #

Una categoria contiene proprietà; un gruppo (TYPE_GROUP) contiene le sue sotto-proprietà; una proprietà elenco (TYPE_ENUM) contiene le sue opzioni, designate dal loro valore. I tre metodi le percorrono.

MetodoRuolo
of_count ( ) → longNumero di proprietà della categoria, nascoste comprese; numero di sotto-proprietà di un gruppo; numero di opzioni di una proprietà elenco (0 per gli altri tipi)
of_keys_at (long al_index) → stringIndirizzo della proprietà di rango al_index (a partire da 1) — "page/margin", "appearance/font/size" su un gruppo, riutilizzabile così com'è in of_property; su una proprietà elenco, l'indirizzo seguito dal valore dell'opzione. "" fuori dai limiti
of_has (string as_key) → booleanLa categoria o il gruppo contiene questa proprietà? La proprietà elenco offre questo valore?

Eventi #

EventAttivato quando
ue_value_changed (string as_keys, string as_value)L'utente ha cambiato un valore (un'immissione confermata con Invio o lasciando la cella, una casella spuntata con un clic, Spazio o Invio / F2, una scelta in un elenco, un colore, una data, un doppio clic su un'etichetta). as_keys è l'indirizzo della proprietà, as_value il suo nuovo valore come testo; è già scritto. Un valore scritto dal vostro codice (is_value) non solleva nulla, come SetItem: il vostro codice sa cosa ha scritto. Canc o il pulsante Ripristina (ritorno al predefinito) e Su / Giù in un numero sono gesti dell'utente: lo sollevano anch'essi
ue_value_changing (string as_keys, string as_value) → booleanAnnullabile, posto prima che un valore dell'utente sia scritto, e solo quando ib_veto_changes = true (disattivato per impostazione predefinita). Restituire FALSE rifiuta: la cella mostra di nuovo il vecchio valore, che of_property(as_keys).is_value restituisce ancora durante l'evento. Restituite TRUE per accettare. Ponete of_property(as_keys).is_error prima di rifiutare: l'utente legge perché
ue_selection_changed (string as_from_keys, string as_keys)La selezione si è spostata: un clic, la tastiera, o il vostro codice (of_select_property, of_clear_selection — anche un ordine lo solleva, come SelectItem), o la riga selezionata è sparita: compressa nella sua categoria o nel suo gruppo (as_keys è allora quell'intestazione o quel gruppo), tolta, o non più disegnata — nascosta, nascosta dalla ricerca (anche da una compressione fatta durante essa), oltre il limite della demo (as_keys vale allora ""). Una riga è una proprietà ("page/margin") o l'intestazione di una categoria ("page"); as_from_keys è quella lasciata
ue_category_toggled (string as_key, boolean ab_collapsed)Una categoria si è compressa (ab_collapsed = TRUE) o espansa: un clic sulla sua intestazione, la tastiera, il suo ib_collapsed impostato dal vostro codice, of_expand_all, of_collapse_all, o of_select_property su una proprietà che contiene
ue_property_toggled (string as_keys, boolean ab_expanded)Una proprietà espandibile (TYPE_GROUP) si è aperta (ab_expanded = TRUE) o chiusa: un clic sulla sua freccia, un doppio clic sulla sua etichetta, la tastiera, il suo ib_expanded impostato dal vostro codice, of_expand_all, of_collapse_all, o of_select_property su ciò che contiene. as_keys è l'indirizzo del gruppo
ue_ellipsis_clicked (string as_keys)Il pulsante … di una proprietà (ib_ellipsis) è stato cliccato, o è stato premuto Ctrl+Invio sulla sua riga: aprite la vostra finestra di dialogo, poi scrivete il risultato in of_property(as_keys).is_value. Il pulsante resta attivo su una proprietà in sola lettura: of_property(as_keys).ib_readonly dice se aprire la vostra finestra in sola lettura
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)

Tastiera e mouse #

GestoEffetto
Frecce su / giù, Home / Fine, Pag su / Pag giùSpostano la selezione da una riga all'altra; Pag su / Pag giù avanzano dell'altezza dell'elenco
Frecce sinistra / destraSu un'intestazione, comprimono o espandono la categoria; su un gruppo, Destra lo apre e Sinistra lo chiude; Destra su un'intestazione o un gruppo già aperti scende alla loro prima riga; su una proprietà, Sinistra risale a ciò che la contiene, il suo gruppo o la sua intestazione (invertite da destra a sinistra). Durante una ricerca, comprimere o espandere non fa nulla, né da tastiera né col mouse
Invio, F2Entrano nell'editor della proprietà (aprono l'elenco, il selettore di colore o il calendario); un booleano si inverte; su un'intestazione o un gruppo, comprimono o espandono. Senza nulla da fare (nessuna riga, una proprietà in sola lettura), il tasto è lasciato alla finestra: il suo pulsante predefinito
SpazioSpunta o toglie la spunta a un booleano; su un'intestazione o un gruppo, comprime o espande
Invio / Esc in un editorConferma l'immissione / rimette il vecchio valore; la tastiera torna all'elenco. Esc in un campo non modificato è lasciato alla finestra: il suo pulsante Annulla
Ctrl+InvioIl pulsante … della riga selezionata (ue_ellipsis_clicked)
TabL'elenco delle proprietà è un solo arresto di tabulazione, qualunque sia la sua dimensione: tra gli editor, solo quelli della riga selezionata prendono Tab; l'elenco che ha la tastiera senza riga selezionata mostra un contorno
Doppio clic su un'etichettaUn booleano si inverte, un elenco passa alla scelta successiva, un gruppo si apre o si chiude
CancSulla riga selezionata: ripristina il valore predefinito (is_default) o, senza predefinito, svuota il valore — un testo, un numero, una data, un colore, un elenco; un booleano senza predefinito resta. Anche il pulsante Ripristina (↺) della barra degli strumenti ripristina il predefinito. Un gesto dell'utente: ue_value_changed
Backspace, un tasto carattereSulla riga selezionata di un testo, un numero o una password: iniziano l'immissione — Backspace apre l'editor, il testo mantenuto e il cursore alla fine (non svuota più il valore); un tasto carattere apre l'editor con quel carattere, come nella finestra delle proprietà di Visual Studio. Su un elenco, un colore, una data o una casella: nulla
F4, Alt+GiùAprono l'elenco, il selettore di colore o il calendario della riga selezionata, dall'elenco come dal suo pulsante, come un elenco a discesa di Windows
Su / Giù in un numeroAggiungono / tolgono id_step, entro is_min / is_max; ogni passo solleva ue_value_changed
Separatore: Sinistra / Destra, Home / FineLa linea tra etichette e valori prende la tastiera (Tab): Sinistra / Destra la spostano del 5 % (invertite da destra a sinistra), Home / Fine la portano agli estremi (ii_label_width)
Trascinare la linea tra etichette e valoriCambia ii_label_width
Casella di ricerca: Esc / Freccia giù o InvioSvuota la ricerca / passa all'elenco, sulla prima riga se nessuna è selezionata

Esempi #

Le impostazioni di una finestra #

// The whole grid in one paint
uo_grid.of_set_redraw(/*on*/ false)

// At the top, without a category : the name of the window
uo_grid.of_add_property(/*keys*/ "name", /*label*/ "Name", /*type*/ u_pbt_propertygrid.TYPE_STRING, /*value*/ "Customers")

// A value given by the application : shown, not editable
uo_grid.of_add_category(/*key*/ "identity", /*title*/ "Identity")
uo_grid.of_add_property(/*keys*/ "identity/id", /*label*/ "Id", /*type*/ u_pbt_propertygrid.TYPE_STRING, /*value*/ "W-0042")
uo_grid.of_property(/*keys*/ "identity/id").ib_readonly = true
uo_grid.of_add_property(/*keys*/ "identity/created", /*label*/ "Created on", /*type*/ u_pbt_propertygrid.TYPE_DATE, /*value*/ String(Today(), "yyyy-mm-dd"))

// A number, a check box and a list of choices
uo_grid.of_add_category(/*key*/ "layout", /*title*/ "Layout")
uo_grid.of_add_property(/*keys*/ "layout/width", /*label*/ "Width", /*type*/ u_pbt_propertygrid.TYPE_NUMBER, /*value*/ "1200")
uo_grid.of_add_property(/*keys*/ "layout/resizable", /*label*/ "Resizable", /*type*/ u_pbt_propertygrid.TYPE_BOOLEAN, /*value*/ "true")
uo_grid.of_add_property(/*keys*/ "layout/state", /*label*/ "Window state", /*type*/ u_pbt_propertygrid.TYPE_ENUM, /*value*/ "normal")
uo_grid.of_add_option(/*keys*/ "layout/state", /*value*/ "normal", /*text*/ "Normal")
uo_grid.of_add_option(/*keys*/ "layout/state", /*value*/ "maximized", /*text*/ "Maximized")

// A colour, as its RGB long written out
uo_grid.of_add_category(/*key*/ "appearance", /*title*/ "Appearance")
uo_grid.of_add_property(/*keys*/ "appearance/back_color", /*label*/ "Back colour", /*type*/ u_pbt_propertygrid.TYPE_COLOR, /*value*/ String(RGB(/*red*/ 240, /*green*/ 244, /*blue*/ 250)))

// One single paint, then the first value to edit
uo_grid.of_set_redraw(/*on*/ true)
uo_grid.of_select_property(/*keys*/ "layout/width")

Un ispettore che applica ogni modifica #

// event ue_value_changed of uo_grid : (string as_keys, string as_value)
// The address says which setting of the window the user changed
choose case as_keys
    case "name"
        w_customers.title = as_value
    case "layout/width"
        w_customers.width = Long(as_value)
    case "layout/resizable"
        w_customers.resizable = (as_value = "true")
    case "appearance/back_color"
        w_customers.backcolor = Long(as_value)
end choose
// The icon : typed by hand, or chosen through the "..." button
uo_grid.of_add_property(/*keys*/ "appearance/icon", /*label*/ "Icon", /*type*/ u_pbt_propertygrid.TYPE_STRING, /*value*/ "img\customers.png")
uo_grid.of_property(/*keys*/ "appearance/icon").ib_ellipsis = true
// event ue_ellipsis_clicked of uo_grid : (string as_keys)
// Local variables
string ls_path, ls_file
constant unsignedlong OFN_EXPLORER = 2
constant unsignedlong OFN_NOCHANGEDIR = 64

// The application opens its own dialog - in the Explorer style, without moving the current folder of the application - then writes the result (this raises nothing)
if GetFileOpenName("Icon", ls_path, ls_file, "png", "Pictures (*.png),*.png", /*initdir*/ "", OFN_EXPLORER + OFN_NOCHANGEDIR) = 1 then
    uo_grid.of_property(/*keys*/ as_keys).is_value = ls_path
end if

Convalidare prima di scrivere #

// The question is OFF by default : turn it on to be able to refuse a value
uo_grid.ib_veto_changes = true
// event ue_value_changing of uo_grid : (string as_keys, string as_value)
// FALSE refuses : the cell shows the old value again. is_error, set before, tells
// the user why : the help pane shows it until the value is edited again
choose case as_keys
    case "layout/width"
        if Long(as_value) < 200 or Long(as_value) > 4000 then
            uo_grid.of_property(/*keys*/ as_keys).is_error = "Between 200 and 4000 pixels."
            return false
        end if
    case "name"
        if Trim(as_value) = "" then
            uo_grid.of_property(/*keys*/ as_keys).is_error = "A window needs a name."
            return false
        end if
end choose

// Any other value is accepted
return true

Valori predefiniti, modifiche e Annulla #

Due nozioni distinte, come nella finestra delle proprietà di Visual Studio e in un DataWindow: il valore predefinito (is_default) dice cosa si scrive in grassetto e cosa Canc ripristina; il riferimento (of_load, of_reset_update) dice cosa c'è da salvare (of_is_dirty, of_dirty_keys) e cosa Annulla rimette (of_revert).

// The defaults of the window : a value that differs is written in bold
uo_grid.of_property(/*keys*/ "layout/width").is_default = "800"
uo_grid.of_property(/*keys*/ "layout/state").is_default = "normal"

// The width the user may type, and what Up / Down add or take
uo_grid.of_property(/*keys*/ "layout/width").is_min = "200"
uo_grid.of_property(/*keys*/ "layout/width").is_max = "4000"
uo_grid.of_property(/*keys*/ "layout/width").id_step = 50

// The saved settings, read back : they become the reference
uo_grid.of_load(/*json*/ is_saved_settings)
// OK : every value right first - otherwise the keyboard goes to the first error
if uo_grid.of_validate() > 0 then return

// Save only what changed (what the user is still typing counts too), then the screen becomes the reference
if uo_grid.of_is_dirty() then
    is_saved_settings = uo_grid.of_values()
    uo_grid.of_reset_update()
end if
// Cancel : every value back to the settings loaded
uo_grid.of_revert()

Una proprietà espandibile #

Un carattere sta in una riga chiusa, che riassume i suoi valori, e si apre sulle sue tre proprietà. Senza modello il riepilogo è Segoe UI; 9; False; is_summary lo scrive a modo vostro: Segoe UI, 9 pt, poi , bold finché Bold è spuntato.

// A group in the category appearance : the font, closed when it is added
uo_grid.of_add_category(/*key*/ "appearance", /*title*/ "Appearance")
uo_grid.of_add_property(/*keys*/ "appearance/font", /*label*/ "Font", /*type*/ u_pbt_propertygrid.TYPE_GROUP, /*value*/ "")

// What it holds is added at its address
uo_grid.of_add_property(/*keys*/ "appearance/font/name", /*label*/ "Name", /*type*/ u_pbt_propertygrid.TYPE_STRING, /*value*/ "Segoe UI")
uo_grid.of_add_property(/*keys*/ "appearance/font/size", /*label*/ "Size", /*type*/ u_pbt_propertygrid.TYPE_NUMBER, /*value*/ "9")
uo_grid.of_add_property(/*keys*/ "appearance/font/bold", /*label*/ "Bold", /*type*/ u_pbt_propertygrid.TYPE_BOOLEAN, /*value*/ "false")

// Its summary, written your way : "Segoe UI, 9 pt", then ", bold" while Bold is checked
uo_grid.of_property(/*keys*/ "appearance/font").is_summary = "{name}, {size} pt{?bold}, bold{/bold}"

// Open it : its three values show under it
uo_grid.of_property(/*keys*/ "appearance/font").ib_expanded = true
// Local variables
n_pbt_json lnv_json
double ld_size

// The group is an object in the values : the same address reads its size
lnv_json.of_load(/*json*/ uo_grid.of_values())
ld_size = lnv_json.of_get_number(/*path*/ "appearance/font/size")
// event ue_property_toggled of uo_grid : (string as_keys, boolean ab_expanded)
// The group that opened or closed, by its address
if ab_expanded then
    lb_log.AddItem(as_keys + " opened")
else
    lb_log.AddItem(as_keys + " closed")
end if

Leggere tutti i valori insieme #

// Local variables
n_pbt_json lnv_json
string ls_state

// Every value, typed, read along the same addresses as the grid
lnv_json.of_load(/*json*/ uo_grid.of_values())
w_customers.title = lnv_json.of_get_string(/*path*/ "name")
w_customers.width = lnv_json.of_get_number(/*path*/ "layout/width")
w_customers.resizable = lnv_json.of_get_boolean(/*path*/ "layout/resizable")

// One value alone : always text
ls_state = uo_grid.of_property(/*keys*/ "layout/state").is_value

Viste, ricerca e larghezza delle etichette #

// One flat list sorted by label, instead of the categories
uo_grid.is_sort = u_pbt_propertygrid.SORT_ALPHABETICAL

// Keep only what speaks of a colour
uo_grid.is_filter = "colour"

// The labels take half of the width, and the help pane goes away
uo_grid.ii_label_width = 50
uo_grid.ib_help = false

Percorrere una categoria #

// Local variables
n_pbt_propertygrid_category lnv_layout
string ls_keys
long ll_i

// Each property of the category, by its full address
lnv_layout = uo_grid.of_category(/*key*/ "layout")
for ll_i = 1 to lnv_layout.of_count()
    ls_keys = lnv_layout.of_keys_at(/*index*/ ll_i)
    lb_values.AddItem(ls_keys + " = " + uo_grid.of_property(/*keys*/ ls_keys).is_value)
next

Ricaricare un elenco di scelte #

// The states offered depend on the kind of window : the old choices go,
// the property keeps its handle, its flags and its place
uo_grid.of_clear_options(/*keys*/ "layout/state")

// The new choices, then the value to show among them
uo_grid.of_add_option(/*keys*/ "layout/state", /*value*/ "docked", /*text*/ "Docked")
uo_grid.of_add_option(/*keys*/ "layout/state", /*value*/ "floating", /*text*/ "Floating")
uo_grid.of_property(/*keys*/ "layout/state").is_value = "docked"

Buone pratiche #

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

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