PBToolboxAI v4 ← Site

dockcontainer — u_pbt_dockcontainer #

← Riferimento dei componenti · Sommario della guida

Pannelli ancorabili in stile Visual Studio: ancoraggio tramite trascinamento, impilamento in schede, separatori ridimensionabili, finestre mobili, nascondi automaticamente — e salvataggio/ripristino della disposizione.

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


In breve #

Userobjectu_pbt_dockcontainer
Classe degli itemn_pbt_dock_panel (un pannello)
Serve perDare a una finestra PowerBuilder l'ergonomia di un IDE moderno: l'utente organizza da sé i propri pannelli e ritrova la disposizione alla sessione successiva

Come in tab, ogni pannello ospita un vero controllo PowerBuilder (dragobject): userobject, DataWindow o un altro componente PBToolboxAI. Vedere Ospitare veri controlli PowerBuilder.


Avvio rapido #

// event open della finestra : i controlli dei pannelli sono gia posati su di essa
uo_dock.of_add_panel(/*key*/ "document", /*position*/ "", /*relative_to*/ "", /*size*/ 0, /*title*/ "Documento", /*content*/ uo_editor)

// L'esploratore, agganciato all'inizio del documento, largo 260 pixel
uo_dock.of_add_panel(/*key*/ "explorer", /*position*/ uo_dock.POSITION_START, /*relative_to*/ "document", /*size*/ 260, /*title*/ "Esplora risorse", /*content*/ uo_tree)

// Le proprieta, agganciate alla fine del documento, larghe 300 pixel
uo_dock.of_add_panel(/*key*/ "properties", /*position*/ uo_dock.POSITION_END, /*relative_to*/ "document", /*size*/ 300, /*title*/ "Proprieta", /*content*/ uo_props)

// L'area centrale : dall'ancoraggio non e chiudibile, ne mobile, ne nascondibile
uo_dock.is_main = "document"

Proprietà #

ProprietàTipoPredefinitoRuolo
is_mainstring""Chiave del pannello principale: l'area di documento centrale, che non può essere né nascosta né staccata e su cui nessun pannello viene impilato. Impostata prima dell'aggiunta di quel pannello, viene conservata e applicata dal suo of_add_panel; "" rimuove il pannello principale
ib_veto_closebooleanfalseOpt-in: chiedere prima che un pannello si chiuda — la croce della sua intestazione, Chiudi / Chiudi gli altri nel menu, la croce di un pannello scorrevole e of_close_panel (solleva ue_panel_closing, che può rifiutare; un ordine rifiutato restituisce -4). Disattivato per impostazione predefinita, come ogni evento annullabile della libreria: impostate true per tenere aperto un pannello che contiene lavoro non salvato
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

Posizioni di ancoraggio #

Le costanti del componente alimentano as_position in of_add_panel e of_move_panel:

CostanteValoreEffetto
POSITION_START"start"Il nuovo pannello si ancora sul lato di inizio lettura del pannello di riferimento (a sinistra con scrittura da sinistra a destra)
POSITION_END"end"… sul lato di fine lettura
POSITION_TOP"top"… al di sopra
POSITION_BOTTOM"bottom"… al di sotto
POSITION_STACK"stack"Il pannello viene impilato come scheda sul pannello di riferimento. Valore adottato se as_position è vuoto

Proprietà di un pannello — n_pbt_dock_panel #

Ottenute tramite of_panel(chiave).

ProprietàTipoPredefinitoRuolo
is_titlestring""Titolo visualizzato sulla scheda del pannello; vuoto (nessun titolo dato), la scheda mostra la chiave e il pannello principale non ha intestazione — dargli un titolo in seguito la fa apparire. Accetta il testo formattato con tag
is_short_titlestring""Forma breve del titolo, per i punti in cui lo spazio manca: la barra di bordo di un pannello appuntato (sempre — è una striscia sottile) e la scheda di una pila, ma solo quando il titolo completo non ci sta più, cosa che viene misurata e non indovinata. L'intestazione del pannello conserva il titolo completo. "" = nessuna forma breve
ib_visiblebooleantrueMostra o nasconde questo pannello. Il pannello principale non si nasconde; nascondere un pannello mobile ne chiude la finestra, e tornerà ancorato al suo posto
ib_pinnedbooleantruetrue = bloccato in posizione; false = l'intero gruppo del pannello (schede comprese) si ripiega a linguette sul bordo. Una linguetta apre il suo pannello al passaggio del mouse (dopo 400 ms) o subito al clic; aperto al passaggio, si richiude quando il mouse lo lascia e il focus non vi si trova, aperto al clic resta fino a un clic altrove. il pulsante puntina dell'intestazione solleva ue_panel_pinned per ogni pannello del gruppo, e così impostare ib_pinned dal codice (un ordine lo solleva come il gesto)
ib_closablebooleantrueL'utente può chiudere questo pannello (croce dell'intestazione, croce del pannello scorrevole, Chiudi / Chiudi gli altri nel menu)? Impostata all'aggiunta da of_add_panel(…, ab_closable), modificabile in qualsiasi momento: la croce e le voci del menu seguono subito. of_close_panel rifiuta (-5) un pannello non chiudibile
is_header_colorstring""Colore dell'intestazione di questo pannello. Vuoto = decide il tema; HEADER_COLOR_ACCENT segue l'accento del tema (e continua a seguirlo dopo un cambio di tema, cosa che un codice fisso non farebbe); altrimenti un #rrggbb. Il colore di testo leggibile viene calcolato
is_border_colorstring""Colore del bordo di questo pannello, stessa grammatica. Contorna la cornice e l'intestazione, che hanno ciascuna il proprio: colorarne una sola lascia una giunzione visibile. Segue il pannello nel suo riquadro a scomparsa
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_back_colorlong-1Sfondo della scheda di QUESTO pannello in una pila, e della sua linguetta sul bordo una volta sbloccato (-1 = quello del componente, che segue il tema). L'intestazione di un pannello da solo prende is_header_color
il_text_colorlong-1Colore del testo della scheda e della linguetta di QUESTO pannello (-1 = quello del componente)
il_back_color_hoverlong-1Sfondo della scheda e della linguetta di QUESTO pannello al passaggio (-1 = quello del componente)
il_text_color_hoverlong-1Colore del testo della scheda e della linguetta di QUESTO pannello al passaggio (-1 = quello del componente)
il_accentlong-1Accento di QUESTO pannello (-1 = accento del componente); l'intestazione lo segue quando is_header_color vale HEADER_COLOR_ACCENT

Metodi #

MetodoRuolo
of_add_panel (string as_key, string as_position, string as_relative_to, integer ai_size, string as_title, dragobject ado_content)Aggiunge un pannello chiudibile e ospita il controllo. as_relative_to = chiave del pannello contro cui si ancora (vuoto = la radice); ai_size = dimensione iniziale in pixel (0 = automatica). Restituisce 0 una volta applicato, -5 per una chiave vuota, già presa o contenente / o una barra verticale, un controllo già ospitato, un as_relative_to sconosciuto o un impilamento (POSITION_STACK) sul pannello principale, o una posizione sconosciuta — nulla viene toccato, -6 in modalità demo quando il dock porta già i suoi tre pannelli (il controllo resta al suo posto, visibile), -2 se il componente non è creato
of_add_panel (…, boolean ab_closable)Idem, con ab_closable = false per un pannello senza pulsante di chiusura. Restituisce 0 una volta applicato, -5 per una chiave vuota, già presa o contenente / o una barra verticale, un controllo già ospitato, un as_relative_to sconosciuto o un impilamento (POSITION_STACK) sul pannello principale, o una posizione sconosciuta — nulla viene toccato, -6 in modalità demo quando il dock porta già i suoi tre pannelli (il controllo resta al suo posto, visibile), -2 se il componente non è creato
of_select_panel (string as_key)Rende visibile un pannello: in primo piano nella sua pila, il suo pannello a scomparsa aperto quando il gruppo è ripiegato, la sua finestra portata davanti quando è mobile. Quando un pannello ancorato passa in primo piano nella sua pila, segue ue_panel_selected, come per un clic sulla sua scheda. Restituisce 0 una volta applicato, -5 per una chiave sconosciuta o un pannello NASCOSTO (mostrarlo è compito di ib_visible), -2 se il componente non è creato
of_move_panel (string as_key, string as_target, string as_position)Riorganizza dal codice, esattamente come se l'utente avesse trascinato la scheda. Restituisce 0 una volta applicato, -5 per una chiave sconosciuta, una destinazione (as_target) sconosciuta una posizione sconosciuta, un impilamento sul pannello principale o un impilamento DEL pannello principale, -2 se il componente non è creato
of_move_panel (string as_key, string as_target, string as_position, integer ai_index)Lo stesso, indicando il rango del pannello nella pila della destinazione (1 = primo, 0 o meno = ultimo). Solo una pila è un elenco ordinato: l'indice viene ignorato per POSITION_START / END / TOP / BOTTOM. Restituisce 0 una volta applicato, -5 per una chiave sconosciuta, una destinazione (as_target) sconosciuta una posizione sconosciuta, un impilamento sul pannello principale o un impilamento DEL pannello principale, -2 se il componente non è creato
of_float_panel (string as_key)Stacca il pannello in una vera finestra mobile spostabile e ridimensionabile; un pannello già staccato in precedenza ritrova il posto della sua finestra. Chiudendola il pannello si riancora (ue_panel_docked). Non il pannello principale (is_main): è la zona documento attorno a cui si dispongono gli altri, costruisce la propria intestazione e non può essere né staccato, né nascosto, né chiuso. Segue ue_panel_floated, come per il pulsante dell'intestazione, il doppio clic sull'intestazione o sulla scheda, o Stacca nel menu del clic destro. Restituisce 0 una volta applicato, -5 per una chiave sconosciuta, il pannello principale o un pannello NASCOSTO, -2 se il componente non è creato
of_close_panel (string as_key)Chiude il pannello come la sua croce: viene nascosto (ib_visible = true lo mostra di nuovo) e segue ue_panel_closed. Con ib_veto_close = true, viene posto prima ue_panel_closing. Restituisce 0 una volta applicato, -4 quando il vostro ue_panel_closing ha rifiutato (il pannello resta), -5 per una chiave sconosciuta, il pannello principale, un pannello nascosto o non chiudibile (ib_closable = false), -2 se il componente non è creato
of_notify_panel (string as_key)Segnala contenuti nuovi: se il pannello non è visibile, la sua scheda mostra un contatore di elementi non visti, azzerato alla selezione. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato
of_clear_notify (string as_key)Azzera quel contatore senza mostrare il pannello. Selezionare la scheda era l unico altro modo, il che è sbagliato quando il Suo codice sa che il contenuto stesso è sparito. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato
of_remove_panel (string as_key)Rimuove il pannello e restituisce il controllo alla sua finestra d'origine, al suo posto, alla sua dimensione e con la visibilità che aveva prima di of_add_panel. Restituisce 0 una volta applicato, -5 per un argomento non valido (chiave vuota, indirizzo errato), -2 se il componente non è creato
of_get_layout ( )Restituisce la disposizione corrente (albero delle suddivisioni, rapporti, schede, visibilità, pannelli mobili e posto della loro finestra) sotto forma di stringa, da memorizzare in un file, in una base dati o nel registro
of_set_layout (string as_json)Ripristina una disposizione ottenuta con of_get_layout. I pannelli devono essere stati ricreati prima della chiamata; quelli assenti dalla disposizione — o tutti, se non ne conosce nessuno — raggiungono un gruppo accanto agli altri, mai il pannello principale. I pannelli mobili ritrovano la loro finestra al suo posto, riportata su uno schermo se il loro non c'è più; una disposizione che non nomina alcun pannello principale mantiene quello corrente. Restituisce 0 una volta applicato, -5 per un testo che non è una disposizione (non JSON, o senza tree): il dock resta allora com'è, -2 se il componente non è creato
of_panel (string as_key)Handle n_pbt_dock_panel del pannello (creato al primo accesso)
of_refresh_panel (string as_key)Aggiorna il rendering di un pannello costruito fuori schermo, senza sfarfallio. Restituisce 0, -5 se la chiave non designa alcun pannello, -2 se il componente non è creato
of_relayout ( )Ricalcola e ripubblica tutte le aree affinché i controlli ospitati vengano riposizionati. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_reset ( )Svuota il contenitore: ogni controllo ospitato viene restituito alla sua finestra d'origine, gli handle dei pannelli vengono liberati, la disposizione memorizzata viene cancellata. 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

Event #

EventAttivato quando
ue_panel_selected (string as_key)Un pannello ancorato passa in primo piano nel suo gruppo: clic sulla sua scheda o intestazione, frecce della barra di schede, oppure of_select_panel (anche un ordine del suo codice lo solleva)
ue_panel_closed (string as_key)Un pannello viene chiuso: la croce della sua intestazione, Chiudi o Chiudi gli altri nel menu del clic destro sull'intestazione o sulla scheda, la croce di un pannello scorrevole, oppure of_close_panel (anche un ordine del suo codice lo solleva). Il pannello viene nascosto (ib_visible = true lo mostra di nuovo); con ib_veto_close = true, solo dopo che ue_panel_closing lo ha permesso
ue_panel_closing (string as_key) → booleanAnnullabile, posto prima che un pannello si chiuda — la croce della sua intestazione, Chiudi o Chiudi gli altri nel menu (una domanda per pannello), la croce di un pannello scorrevole, oppure of_close_panel —, e solo quando ib_veto_close = true (disattivato per impostazione predefinita). Restituite false per tenere aperto il pannello (lavoro non salvato): ue_panel_closed non segue, e of_close_panel restituisce -4
ue_panel_pinned (string as_key, boolean ab_pinned)Un pannello viene bloccato (true) o sbloccato in nascondi automaticamente (false): pulsante puntina dell'intestazione, pulsante di ancoraggio del pannello a scomparsa, oppure ib_pinned impostato dal suo codice (anche un ordine lo solleva)
ue_panel_floated (string as_key)Un pannello viene staccato in finestra mobile: pulsante dell'intestazione, doppio clic sull'intestazione o sulla scheda, Stacca nel menu del clic destro, oppure of_float_panel (anche un ordine del suo codice lo solleva). Una disposizione ripristinata (of_set_layout) non solleva nulla
ue_panel_docked (string as_key)L'UTENTE riancora un pannello mobile: chiude la sua finestra, o fa doppio clic sulla sua barra del titolo — il pannello ritrova il suo posto
ue_layout_changed (string as_json)La disposizione è cambiata (trascinamento, ridimensionamento, ancoraggio, una finestra mobile spostata o ridimensionata, ma anche un pannello chiuso, nascosto, selezionato, rinominato, o un altro pannello principale). Il parametro porta la nuova disposizione, pronta per essere salvata
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)

Con il mouse #

Oltre al trascinamento delle schede e degli splitter, tre gesti agiscono su un pannello — mai sul pannello principale:

GestoEffetto
Doppio clic sull'intestazione di un gruppo o su una schedaStacca il pannello (per l'intestazione: il pannello attivo del gruppo) in una finestra mobile — ue_panel_floated
Doppio clic sulla barra del titolo di una finestra mobileRiancora il pannello al suo posto, come la croce della finestra — ue_panel_docked
Clic destro sull'intestazione o su una schedaMenu Stacca / Chiudi / Chiudi gli altri (gli altri pannelli chiudibili dello stesso gruppo). Una voce che non può fare nulla è disattivata; con ib_veto_close = true, ogni chiusura pone ue_panel_closing — una domanda per pannello

Da tastiera #

Il contenuto di un pannello è un vero controllo PowerBuilder: lì la tastiera appartiene al suo codice, come in qualunque finestra. Ciò di cui si occupa il componente è la propria cornice — intestazioni, schede, splitter:

TastoEffetto
Frecce su una schedaPassano al pannello precedente / successivo del gruppo e lo selezionano. Una barra di schede è un solo arresto di tabulazione
Inizio / Fine su una schedaPrimo / ultimo pannello del gruppo
Frecce su uno splitterSpostano la separazione del 2 %, solo lungo l'asse dello splitter
Pag su / Pag giù su uno splitterLo stesso, a passi del 10 %
EscRichiude il pannello scorrevole aperto da un pulsante di bordo

Uno splitter è un separator focalizzabile che annuncia la propria posizione; i pulsanti dell'intestazione (staccare, nascondere, chiudere) portano un nome, e il pannello attivo di un gruppo è contrassegnato con aria-selected. Uno spostamento da tastiera risale in ue_layout_changed esattamente come un trascinamento con il mouse.


Esempi #

Una finestra in stile IDE #

// event open : ogni contenuto e un vero controllo PB posato sulla finestra
uo_dock.of_add_panel(/*key*/ "document", /*position*/ "", /*relative_to*/ "", /*size*/ 0, /*title*/ "Documento", /*content*/ uo_editor)
uo_dock.of_add_panel(/*key*/ "explorer", /*position*/ uo_dock.POSITION_START, /*relative_to*/ "document", /*size*/ 260, /*title*/ "Esplora risorse", /*content*/ uo_tree)
uo_dock.of_add_panel(/*key*/ "properties", /*position*/ uo_dock.POSITION_END, /*relative_to*/ "document", /*size*/ 300, /*title*/ "Proprieta", /*content*/ uo_props)
uo_dock.of_add_panel(/*key*/ "output", /*position*/ uo_dock.POSITION_BOTTOM, /*relative_to*/ "document", /*size*/ 200, /*title*/ "Output", /*content*/ uo_console)

// Un secondo pannello impilato come scheda su "properties"
uo_dock.of_add_panel(/*key*/ "help", /*position*/ uo_dock.POSITION_STACK, /*relative_to*/ "properties", /*size*/ 0, /*title*/ "Guida", /*content*/ uo_help)

// Il documento e l'area centrale
uo_dock.is_main = "document"

Memorizzare e ripristinare la disposizione dell'utente #

// event close della finestra : salvare cio che l'utente ha organizzato
string ls_layout
ls_layout = uo_dock.of_get_layout()
of_save_setting(/*name*/ "main_dock", /*value*/ ls_layout)
// event open : RICREARE prima i pannelli, ripristinare poi
string ls_layout

// Prima i pannelli : le chiamate of_add_panel qui sopra
of_create_panels()

// Poi la disposizione salvata all'ultima chiusura, se esiste
ls_layout = of_read_setting(/*name*/ "main_dock")
if ls_layout <> "" then uo_dock.of_set_layout(/*json*/ ls_layout)

L'ordine è tassativo: of_set_layout non crea alcun pannello, si limita a ricollocare quelli già esistenti.

Seguire le modifiche in continuo #

// event ue_layout_changed di uo_dock : (string as_json)
// Salvataggio immediato, senza attendere la chiusura della finestra.
of_save_setting(/*name*/ "main_dock", /*value*/ as_json)

Pilotare un pannello tramite il suo handle #

// Local variables
n_pbt_dock_panel lnv_panel

// Il pannello delle proprieta : un titolo che conta le modifiche, compresso sul suo bordo
lnv_panel = uo_dock.of_panel(/*key*/ "properties")
lnv_panel.is_title  = "Proprietà (3 modificate)"
lnv_panel.ib_pinned = false        // si ripiega a linguetta sul bordo
// Nascondere un pannello riservato agli amministratori
uo_dock.of_panel(/*key*/ "audit").ib_visible = gb_administrator

Attirare l'attenzione su un pannello in secondo piano #

// Un'elaborazione in background ha scritto nella console : segnalare senza rubare il focus
uo_dock.of_notify_panel(/*key*/ "output")

Riorganizzare dal codice #

// Spostare un pannello come se l'utente avesse trascinato la sua scheda
uo_dock.of_move_panel(/*key*/ "output", /*target*/ "document", /*position*/ "bottom")

// Impilarlo come scheda su un altro pannello
uo_dock.of_move_panel(/*key*/ "help", /*target*/ "properties", /*position*/ "stack")

Staccare un pannello su un secondo schermo #

// Finestra mobile nativa : l'utente puo posarla su un altro schermo
uo_dock.of_float_panel(/*key*/ "properties")
// event ue_panel_docked di uo_dock : (string as_key)
// L'utente ha richiuso la finestra mobile : il pannello e tornato.
of_log(/*msg*/ "Pannello riancorato : " + as_key)

Chiudere correttamente un pannello #

// event ue_panel_closed di uo_dock : (string as_key)
// Rimuovere anche il pannello dal contenitore per liberare il controllo ospitato.
uo_dock.of_remove_panel(/*key*/ as_key)

Rifiutare la chiusura di un pannello con lavoro non salvato #

// event open della finestra : chiedere prima che un pannello si chiuda (disattivato per impostazione predefinita)
uo_dock.ib_veto_close = true

// ue_panel_closing event of uo_dock : (string as_key) returns boolean
// L'editor contiene ancora modifiche non salvate : il suo pannello resta aperto.
if as_key = "editor" then
    if ib_editor_modified then return false
end if
return true

// Il vostro codice pone la stessa domanda : -4 quando viene rifiutata
if uo_dock.of_close_panel(/*key*/ "editor") = -4 then
    st_status.Text = "Salvate il documento prima di chiudere l'editor."
end if

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à

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