PBToolboxAI v4 ← Site

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 #

Userobjectu_pbt_statictext
Classe degli item— (componente senza item)
Serve perSostituire 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-inib_auto_height, ib_auto_width, ib_follow_end, ib_track_mouse, ib_track_cycle, ib_allow_drop, ib_selectable, ib_hover_effect

Avvio rapido #

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

Il testo accetta il testo formattato con tag: è questo il componente che ne trae il massimo vantaggio, poiché è l'unico a rendere cliccabili le aree [action=…] (un [hyperlink=…] si apre ovunque).


Costanti #

CostanteValorePer
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àTipoPredefinitoRuolo
is_textstring""Il testo visualizzato, con il testo formattato con tag: [b], [i], [u], colori, [picture=…], [hyperlink=…], [action=…]
is_alignstring"start"Allineamento orizzontale: ALIGN_START, ALIGN_CENTER, ALIGN_END, ALIGN_JUSTIFY
is_valignstring"top"Allineamento verticale all'interno del controllo: VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM
ib_wrapbooleantrueA capo automatico. false forza una riga unica
ib_ellipsisbooleanfalseCon ib_wrap = false, tronca l'eccedenza con dei puntini di sospensione invece di tagliarla di netto
ib_ellipsis_tooltipbooleanfalseOpt-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_familystring""Carattere predefinito del blocco (vuoto = carattere del tema)
ii_font_sizeinteger0Dimensione predefinita in punti (0 = dimensione del tema)
il_text_colorlong-1Colore del testo RGB() (-1 = colore del tema). I tag [color] restano prioritari sulla propria porzione
ii_line_spacinginteger0Interlinea in percentuale, da 50 a 400 (150 = 1,5 righe; 0 = predefinito). Un valore fuori da questi limiti viene riportato al più vicino, e si rilegge così come applicato
ib_enabledbooleantrueBlocco attivo o disattivato (collegamenti e azioni inerti quando è disattivato)
ib_selectablebooleanfalseOpt-in: consente all'utente di selezionare il testo e di copiarlo con Ctrl+C (disattivato per impostazione predefinita, come un'etichetta). Rilasciare il mouse dopo una selezione non genera ue_clicked

Aspetto del blocco (look da « intestazione ») #

ProprietàTipoPredefinitoRuolo
il_back_colorlong-1Sfondo del blocco RGB() (-1 = sfondo del tema). Con ii_corner_radius segue l'arrotondamento, e fuori dagli angoli il blocco mostra il colore dell'oggetto su cui è posato
il_border_colorlong-1Colore del bordo (-1 = nessun bordo)
ii_border_widthinteger0Spessore del bordo in pixel (0 = nessun bordo)
ii_corner_radiusinteger0Raggio di arrotondamento degli angoli, in pixel. Il bordo E lo sfondo il_back_color lo seguono
ii_paddinginteger-1Margine interno in pixel: -1 = quello del tema (predefinito), 0 = nessun margine (il testo si allinea al bordo di un campo vicino), oltre = pixel
ib_hover_effectbooleanfalseOpt-in: leggero scurimento al passaggio del mouse (schiarimento su un tema scuro), per un'etichetta-pulsante

Modalità scorrimento (marquee) #

ProprietàTipoPredefinitoRuolo
ib_marqueebooleanfalseTrasforma il blocco in un banner scorrevole orizzontalmente
ii_marquee_speedinteger60Velocità di scorrimento, in pixel al secondo (0 = velocità predefinita, 60)
is_marquee_directionstringMARQUEE_STARTSenso dello scorrimento: MARQUEE_START (verso l'inizio della lettura) o MARQUEE_END. Alias fisici "left" / "right" accettati: restano fisici, qualunque sia il senso di lettura. Qualsiasi altro valore vale, e si rilegge, MARQUEE_START
ib_marquee_overflow_onlybooleanfalseOpt-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_hoverbooleanfalseOpt-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àTipoPredefinitoRuolo
ib_allow_dropbooleanfalseOpt-in: accetta il rilascio di file da Esplora risorse di Windows; i percorsi completi arrivano tramite ue_drop_files. Un testo disattivato (ib_enabled = false) rifiuta ogni rilascio
ib_track_mousebooleanfalseOpt-in: attiva ue_mouse_enter / ue_mouse_leave
ib_track_cyclebooleanfalseOpt-in: attiva ue_cycle, sollevato alla fine di ogni passaggio dello scorrimento; senza, il testo scorre in silenzio
ib_auto_heightbooleanfalseOpt-in: il blocco misura la propria altezza ideale e ridimensiona l'userobject; vedere Base comune
ib_auto_widthbooleanfalseOpt-in: l'userobject prende la LARGHEZZA del proprio testo — la riga più lunga, senza a capo (i [br] contano), più margine e bordo; un nuovo testo, un carattere o un margine lo ridimensionano di nuovo, e ue_auto_width indica la larghezza adottata. Un testo scorrevole (ib_marquee) non ha larghezza naturale e non ne riporta alcuna
ib_follow_endbooleanfalseOpt-in, per un registro scritto con of_append_text: la vista resta IN FONDO man mano che arrivano le righe — tranne se il lettore è risalito a leggere una riga più vecchia: non ne viene mai strappato via
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

Metodi #

MetodoRuolo
of_reset ( )Riporta tutte le proprietà ai valori predefiniti e svuota il testo. 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_refresh_parent_color ( )Rilegge il colore dell'oggetto su cui è posato il blocco. Con il_back_color e ii_corner_radius, gli angoli arrotondati mostrano quel colore, letto quando queste due proprietà vengono impostate: la chiami dopo aver cambiato il BackColor della Sua finestra, o spostato il blocco verso un altro padre. Restituisce 0 una volta inviato, -2 se il componente non è creato
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. Restituisce 0 una volta inviato, -2 se il componente non è creato
of_append_text (string as_markup)Aggiunge UNA riga alla fine del testo, per un registro: solo quella riga parte verso il componente e solo essa viene disegnata — riscrivere is_text a ogni riga rinviava e ridisegnava l'intero registro. as_markup accetta lo stesso markup di is_text; riletto, is_text contiene tutte le righe, unite da [br]. Con ib_follow_end la vista resta in fondo. Restituisce 0 una volta inviato, -2 se il componente non è creato

Event #

EventAttivato quando
ue_clicked ( )Clic sinistro sul blocco — non attivato su un'area [action] o [hyperlink] (nessun doppione), sull'intestazione di un [foldarea] (ripiegare non genera nulla), né dopo una selezione di testo
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_key)È stata cliccata un'area [action=id]: sta a Lei collegarvi il Suo codice. L'area si raggiunge anche da tastiera: Tab fino ad essa, poi Invio o Spazio
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_auto_width (long al_width)Il blocco ha preso una nuova larghezza, in unità PowerBuilder — richiede ib_auto_width = 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 (un'animazione ALL'INTERNO del testo non conta mai come passaggio) — richiede ib_track_cycle = true
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.

// Congelare la visualizzazione mentre si imposta tutto
uo_header.of_set_redraw(/*on*/ false)

// Il titolo, centrato
uo_header.is_text  = "[b]Cruscotto delle vendite"
uo_header.is_align = uo_header.ALIGN_CENTER

// Sfondo pieno e testo bianco leggibile
uo_header.il_back_color = RGB(/*red*/ 60, /*green*/ 110, /*blue*/ 190)
uo_header.il_text_color = RGB(/*red*/ 255, /*green*/ 255, /*blue*/ 255)
uo_header.ii_padding = 14

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

// Tutto viene disegnato in una volta
uo_header.of_set_redraw(/*on*/ true)
// event ue_auto_height di uo_header
of_reposition_below_header(al_height)   // sposta il contenuto sotto l'intestazione

Testo formattato con collegamento e azione #

// Un link a una pagina web e un'azione gestita dalla Sua applicazione (ue_action)
uo_text.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_text : (string as_key)
choose case as_key
    case "renew" ; of_open_renewal()
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 #

// Due sezioni comprimibili : la seconda parte compressa
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]"

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

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 #

// Il messaggio del banner
uo_banner.is_text = "[b]Informazione[/b] -- chiusura straordinaria del servizio venerdì 12."

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

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

Una volta impostato ib_track_cycle = true, 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_banner.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

// Cio che la zona mostra, centrato
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

// Ogni file rilasciato, uno dopo l'altro
for li = 1 to UpperBound(as_files)
    of_import(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(/*red*/ 21, /*green*/ 101, /*blue*/ 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 #

// Un testo che si comporta come un pulsante-link
uo_link.is_text = "Seleziona tutto"
uo_link.il_text_color = RGB(/*red*/ 21, /*green*/ 101, /*blue*/ 192)
uo_link.ii_padding = 8
uo_link.ii_corner_radius = 6
uo_link.ib_hover_effect = true       // reagisce al passaggio del mouse come un pulsante
// event ue_clicked di uo_link
of_select_all()

Un registro scritto riga per riga #

Ogni chiamata invia solo la riga aggiunta; ib_follow_end tiene l'ultima in vista finché il lettore non risale.

// Once, when the window opens
uo_log.ib_follow_end = true
uo_log.is_text = "[b]Import[/b]"

// For every row imported : one line, sent alone
uo_log.of_append_text(/*markup*/ "Row " + String(ll_row) + " [color=#2e7d32]imported[/color]")

Un'etichetta larga quanto il suo testo #

// A status chip : background, rounded corners, and the width of its text
uo_status.is_text = "[b]Status :[/b] connected"
uo_status.il_back_color = RGB(/*red*/ 232, /*green*/ 245, /*blue*/ 233)
uo_status.ii_corner_radius = 12
uo_status.ib_auto_width = true

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_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