# statictext — `u_pbt_statictext` #

← Riferimento dei componenti · Sommario della guida

> Blocco di testo formattato: tag, allineamenti, collegamenti e azioni cliccabili, aspetto da intestazione, modalità scorrimento (marquee) e area di rilascio dei file.

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

## In breve #

Userobject | `u_pbt_statictext`
Classe degli item | — (componente senza item)
Serve per | Sostituire uno `statictext` di PowerBuilder con un blocco di testo formattato e cliccabile, capace di fungere da intestazione, da banner scorrevole o da area di rilascio
Opzioni opt-in | `ib_auto_height`, `ib_track_mouse`, `ib_allow_drop`, `ib_selectable`, `ib_hover_effect`

## Avvio rapido #

    // event open della finestra
    uo_texte.is_text = "Benvenuto in [b][accent]PBToolboxAI[/accent][/b][br]" &
                       + "Consulti la [hyperlink=https://pbtoolboxai.net]documentazione[/hyperlink]."
    uo_texte.is_align = uo_texte.ALIGN_CENTER
    uo_texte.is_valign = uo_texte.VALIGN_CENTER

Il testo accetta il testo formattato con tag: è questo il componente che ne trae il massimo vantaggio, poiché è l'unico a rendere le aree `[hyperlink=…]` e `[action=…]` realmente cliccabili.

## Costanti #

Costante | Valore | Per
--- | --- | ---
`ALIGN_START` · `ALIGN_CENTER` · `ALIGN_END` · `ALIGN_JUSTIFY` | `"start"` `"center"` `"end"` `"justify"` | `is_align`
`VALIGN_TOP` · `VALIGN_CENTER` · `VALIGN_BOTTOM` | `"top"` `"center"` `"bottom"` | `is_valign`

`start` ed `end` sono logici: seguono il senso di scrittura (Lingua e RTL). I valori fisici `left` e `right` restano accettati come alias.

## Proprietà #

### Testo e formattazione #

Proprietà | Tipo | Predefinito | Ruolo
--- | --- | --- | ---
`is_text` | string | `""` | Il testo visualizzato, con il testo formattato con tag: `[b]`, `[i]`, `[u]`, colori, `[picture=…]`, `[hyperlink=…]`, `[action=…]`
`is_align` | string | `"start"` | Allineamento orizzontale: `ALIGN_START`, `ALIGN_CENTER`, `ALIGN_END`, `ALIGN_JUSTIFY`
`is_valign` | string | `"top"` | Allineamento verticale all'interno del controllo: `VALIGN_TOP`, `VALIGN_CENTER`, `VALIGN_BOTTOM`
`ib_wrap` | boolean | `true` | A capo automatico. `false` forza una riga unica
`ib_ellipsis` | boolean | `false` | Con `ib_wrap = false`, tronca l'eccedenza con dei puntini di sospensione invece di tagliarla di netto
`ib_ellipsis_tooltip` | boolean | `false` | Opt-in: quando il testo non entra nel riquadro, mostrarlo per intero in un suggerimento (marcatura compresa). Non sostituisce mai un suggerimento impostato da lei con `is_tooltip` o `is_super_tooltip_*`: vince il suo
`is_font_family` | string | `""` | Carattere predefinito del blocco (vuoto = carattere del tema)
`ii_font_size` | integer | `0` | Dimensione predefinita in punti (`0` = dimensione del tema)
`il_text_color` | long | `-1` | Colore del testo `RGB()` (`-1` = colore del tema). I tag `[color]` restano prioritari sulla propria porzione
`ii_line_spacing` | integer | `0` | Interlinea in percentuale (`150` = 1,5 righe; `0` = predefinito)
`ib_enabled` | boolean | `true` | Blocco attivo o disattivato (collegamenti e azioni inerti quando è disattivato)
`ib_selectable` | boolean | `false` | Opt-in: consente all'utente di selezionare e copiare il testo (disattivato per impostazione predefinita, come un'etichetta)

### Aspetto del blocco (look da « intestazione ») #

Proprietà | Tipo | Predefinito | Ruolo
--- | --- | --- | ---
`il_back_color` | long | `-1` | Sfondo del blocco `RGB()` (`-1` = sfondo del tema)
`il_border_color` | long | `-1` | Colore del bordo (`-1` = nessun bordo)
`ii_border_width` | integer | `0` | Spessore del bordo in pixel (`0` = nessun bordo)
`ii_corner_radius` | integer | `0` | Raggio di arrotondamento degli angoli, in pixel
`ii_padding` | integer | `0` | Margine interno in pixel (`0` = valore del tema)
`ib_hover_effect` | boolean | `false` | Opt-in: leggero scurimento al passaggio del mouse, per un'etichetta-pulsante

### Modalità scorrimento (marquee) #

Proprietà | Tipo | Predefinito | Ruolo
--- | --- | --- | ---
`ib_marquee` | boolean | `false` | Trasforma il blocco in un banner scorrevole orizzontalmente
`ii_marquee_speed` | integer | `60` | Velocità di scorrimento, in pixel al secondo
`is_marquee_direction` | string | `MARQUEE_START` | Senso dello scorrimento: `MARQUEE_START` (verso l'inizio della lettura) o `MARQUEE_END`. Alias fisici `"left"` / `"right"` accettati
`ib_marquee_overflow_only` | boolean | `false` | Opt-in: scorrere solo se il testo è troppo largo per il riquadro. Un banner che fa scorrere un testo già leggibile è puro rumore visivo. Disattivato per impostazione predefinita, perché `ib_marquee = true` continui a significare scorre
`ib_marquee_pause_on_hover` | boolean | `false` | Opt-in: ferma lo scorrimento finché il puntatore è sul blocco, così un testo lungo si può leggere. La posizione del ciclo è conservata: nulla salta quando il puntatore se ne va

### Interazioni opzionali #

Proprietà | Tipo | Predefinito | Ruolo
--- | --- | --- | ---
`ib_allow_drop` | boolean | `false` | Opt-in: accetta il rilascio di file da Esplora risorse di Windows; i percorsi completi arrivano tramite `ue_drop_files`
`ib_track_mouse` | boolean | `false` | Opt-in: attiva `ue_mouse_enter` / `ue_mouse_leave`
`ib_auto_height` | boolean | `false` | Opt-in: il blocco misura la propria altezza ideale e ridimensiona l'userobject; vedere Base comune
`is_theme_style` | string | `fluent` | Stile visivo del componente (costanti `THEME_STYLE_*`)
`is_theme_mode` | string | `light` | Variante chiara o scura (costanti `THEME_MODE_*`)
`il_theme_accent` | long | `-1` | Colore d'accento di questo componente (`-1` = accento 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

## Metodi #

Metodo | Ruolo
--- | ---
`of_reset ( )` | Riporta tutte le proprietà ai valori predefiniti e svuota il testo
`of_set_redraw (boolean)` | Raggruppa una raffica di modifiche in un unico rendering
`of_save_as_png (string)` · `of_save_as_jpg (string)` | Esporta il rendering come immagine
`of_scroll_to_end ( )` | Scende in fondo al testo. Per un registro, la cui riga più recente sta alla fine: senza questo essa scende sotto la linea di galleggiamento non appena il testo supera l altezza visibile

## Event #

Event | Attivato quando
--- | ---
`ue_clicked ( )` | Clic sinistro sul blocco — non attivato su un'area `[action]` o `[hyperlink]` (nessun doppione)
`ue_hyperlink (string as_url)` | Una zona `[hyperlink=url]` è stata cliccata. Il browser si apre da solo: l'event le arriva in più, per tracciare il clic o farne altro
`ue_action (string as_id)` | È stata cliccata un'area `[action=id]`: sta a Lei collegarvi il Suo codice
`ue_drop_files (string as_files[])` | Sono stati rilasciati dei file da Windows: percorsi completi, una voce per file. Richiede `ib_allow_drop = true`
`ue_drag_enter ( )` | Un trascinamento di file entra nel componente (`ib_allow_drop`)
`ue_drag_leave ( )` | Il trascinamento di file lascia il componente
`ue_auto_height (long al_height)` | Il blocco ha calcolato la propria altezza ideale — richiede `ib_auto_height = true`
`ue_rclicked ( )` | Clic destro sul blocco
`ue_double_clicked ( )` | Doppio clic sul blocco, come lo `StaticText` nativo di PowerBuilder. Anche i clic singoli che lo precedono vengono emessi, nello stesso ordine. Non su una zona `[action]` o `[hyperlink]`, che hanno un canale proprio
`ue_text_overflow (boolean ab_truncated)` | Il testo ha smesso di entrare nel riquadro — o vi rientra. Emesso solo al cambiamento, mai a raffica: un blocco a capo conta come tagliato quando è rifilato in basso, uno su una riga quando è tagliato di lato. Da gestire per allargare una colonna, offrire un pulsante vedi altro, o semplicemente attivare `ib_ellipsis_tooltip`
`ue_mouse_enter ( )` | Il mouse entra — richiede `ib_track_mouse = true`
`ue_mouse_leave ( )` | Il mouse esce — richiede `ib_track_mouse = true`
`ue_cycle ( )` | Solo in modalità scorrimento: il testo ha appena completato un passaggio intero
`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'intestazione di sezione #

Sfondo pieno, testo bianco centrato e altezza adattata al contenuto: il blocco si legge come una vera barra del titolo.

    uo_entete.of_set_redraw(false)

    uo_entete.is_text  = "[b]Cruscotto delle vendite"
    uo_entete.is_align = uo_entete.ALIGN_CENTER

    // Sfondo pieno e testo bianco leggibile
    uo_entete.il_back_color = RGB(/*rosso*/ 60, /*verde*/ 110, /*blu*/ 190)
    uo_entete.il_text_color = RGB(/*rosso*/ 255, /*verde*/ 255, /*blu*/ 255)
    uo_entete.ii_padding = 14

    // Il blocco aderisce al suo contenuto : si legge come una barra del titolo
    uo_entete.ib_auto_height = true

    uo_entete.of_set_redraw(true)

    // event ue_auto_height di uo_entete
    of_repositionner_sous_entete(al_height)   // sposta il contenuto sotto l'intestazione

### Testo formattato con collegamento e azione #

    uo_texte.is_text = "La Sua licenza scade il [b]31/12[/b]. " &
                       + "[hyperlink=https://pbtoolboxai.net]Maggiori informazioni[/hyperlink] " &
                       + "oppure [action=renew]la rinnovi subito[/action]."

    // event ue_action di uo_texte : (string as_id)
    choose case as_id
        case "renew" ; of_ouvrir_renouvellement()
    end choose

`ue_hyperlink` è riservato agli URL (il browser si apre da solo); `[action=id]` è la scelta giusta quando il clic deve restare dentro la Sua applicazione. La variante `[invisibleaction=id]` attiva lo stesso `ue_action` senza l'aspetto di un collegamento.

### Un blocco comprimibile #

    uo_recap.is_text = "[b]Ordine 2026-0148[/b][br]" &
                       + "[foldarea:[b]Consegna[/b]]Spedito il 12/07, entro 48 ore.[/foldarea]" &
                       + "[foldarea-closed:[i]Note legali[/i]]Reso accettato entro 14 giorni.[/foldarea]"

    uo_recap.ib_auto_height = true   // il blocco si restringe quando una sezione viene compressa

Un `[foldarea:Titolo]` aggiunge un'intestazione cliccabile sopra il proprio contenuto: il lettore comprime la sezione con un clic e il marcatore passa da `−` a `+`. `[foldarea-closed:Titolo]` produce lo stesso blocco, compresso fin dalla visualizzazione. I blocchi si annidano e la compressione non emette alcun event: è una questione di lettura, non di codice. Se `ib_auto_height` è attivo, l'altezza viene notificata di nuovo a ogni compressione. Il titolo è testo con tag: `[foldarea:[b][accent]Ordine 2026-0148[/accent][/b]]` rende il proprio in grassetto e con il colore d'accento.

### Un banner scorrevole #

    uo_bandeau.is_text = "[b]Informazione[/b] -- chiusura straordinaria del servizio venerdì 12."

    // Modalita scorrimento, stile notiziario
    uo_bandeau.ib_marquee = true
    uo_bandeau.ii_marquee_speed = 90        // pixel al secondo
    uo_bandeau.is_marquee_direction = uo_bandeau.MARQUEE_START

Lo scorrimento va in ciclo senza tempi morti. Per fermarlo, riporti `ib_marquee` a `false`: il testo riprende la sua impaginazione normale.

A ogni passaggio completo del testo viene attivato l'event `ue_cycle` — pratico per far ruotare più messaggi:

    // In ue_cycle del banner : passare al messaggio successivo
    ii_message = Mod(ii_message, UpperBound(is_messages)) + 1
    uo_bandeau.is_text = is_messages[ii_message]

### Un'area di rilascio dei file #

    // Accettare i file trascinati da Esplora risorse di Windows
    uo_zone.ib_allow_drop = true

    uo_zone.is_text = "[size=32][accent][b]Rilasci qui i Suoi file[/b][/accent][/size][br][br]" &
                      + "Trascini uno o più file da Esplora risorse di Windows."
    uo_zone.is_align  = uo_zone.ALIGN_CENTER
    uo_zone.is_valign = uo_zone.VALIGN_CENTER

    // event ue_drop_files di uo_zone : (string as_files[])
    integer li

    for li = 1 to UpperBound(as_files)
        of_importer(as_files[li])       // as_files[li] = percorso COMPLETO del file
    next

    // event ue_drag_enter di uo_zone : segnalare la destinazione durante il passaggio
    uo_zone.il_border_color = RGB(/*rosso*/ 21, /*verde*/ 101, /*blu*/ 192)
    uo_zone.ii_border_width = 2

I percorsi ricevuti sono completi: può passarli direttamente a `FileOpen` o alla Sua routine di importazione.

### Un'etichetta che si comporta come un pulsante #

    uo_lien.is_text = "Seleziona tutto"
    uo_lien.il_text_color = RGB(/*rosso*/ 21, /*verde*/ 101, /*blu*/ 192)
    uo_lien.ii_padding = 8
    uo_lien.ii_corner_radius = 6
    uo_lien.ib_hover_effect = true       // reagisce al passaggio del mouse come un pulsante

    // event ue_clicked di uo_lien
    of_tout_selectionner()

## Buone pratiche #

- Un testo senza tag non comporta alcun costo aggiuntivo: non esiti a sostituire sistematicamente i Suoi `statictext` di PowerBuilder, anche per il testo semplice.
- Preferisca `is_align = uo.ALIGN_START` a `"left"`: la Sua schermata resterà corretta se l'applicazione passa alla scrittura da destra a sinistra.
- `ib_selectable` resta disattivato per impostazione predefinita, come un'etichetta. Lo attivi solo dove la copia ha senso (numero di pratica, messaggio di errore tecnico).
- Per un'intestazione, combini `il_back_color` + `ii_padding` + `ib_auto_height`: il blocco si dimensiona da solo quando il testo cambia lunghezza.
- Attivi `ib_track_mouse` solo se scrive davvero il codice di `ue_mouse_enter` / `ue_mouse_leave`.
- Chiami `of_reset()` prima di riutilizzare un blocco per un altro contenuto: senza di esso, uno sfondo, un bordo o la modalità scorrimento precedenti restano attivi.

← Riferimento dei componenti · Sommario della guida