statictext — u_pbt_statictext #
← Référence des composants · Sommaire du guide
Bloc de texte riche : balisage, alignements, liens et actions cliquables, allure d'en-tête, mode défilant (marquee) et zone de dépôt de fichiers.
▶ Le voir en vrai — Application de démonstration, tuile Statictext : l'aperçu, le code qui le produit et cette page, côte à côte.
En bref #
| Userobject | u_pbt_statictext |
| Classe d'items | — (composant sans items) |
| Sert à | Remplacer un statictext PowerBuilder par un bloc de texte formaté, cliquable, capable de servir d'en-tête, de bandeau défilant ou de zone de dépôt |
| Options opt-in | ib_auto_height, ib_auto_width, ib_follow_end, ib_track_mouse, ib_track_cycle, ib_allow_drop, ib_selectable, ib_hover_effect |
Démarrage rapide #
// event open de la fenetre
uo_text.is_text = "Bienvenue sur [b][accent]PBToolboxAI[/accent][/b][br]" &
+ "Consultez la [hyperlink=https://pbtoolboxai.net]documentation[/hyperlink]."
uo_text.is_align = uo_text.ALIGN_CENTER
uo_text.is_valign = uo_text.VALIGN_CENTER
Le texte accepte le balisage riche : c'est ce composant qui en tire le meilleur parti, puisqu'il est le seul à rendre les zones [action=…] cliquables (un [hyperlink=…] s'ouvre partout).
Constantes #
| Constante | Valeur | Pour |
|---|---|---|
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 et end sont logiques : ils suivent le sens d'écriture (Langue et RTL). Les valeurs physiques left et right restent acceptées comme alias.
Propriétés #
Texte et mise en forme #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
is_text | string | "" | Le texte affiché, avec le balisage riche : [b], [i], [u], couleurs, [picture=…], [hyperlink=…], [action=…] |
is_align | string | "start" | Alignement horizontal : ALIGN_START, ALIGN_CENTER, ALIGN_END, ALIGN_JUSTIFY |
is_valign | string | "top" | Alignement vertical dans le contrôle : VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM |
ib_wrap | boolean | true | Retour à la ligne automatique. false force une ligne unique |
ib_ellipsis | boolean | false | Avec ib_wrap = false, tronque le débordement par des points de suspension au lieu de le couper net |
ib_ellipsis_tooltip | boolean | false | Opt-in : quand le texte ne tient pas dans la boîte, l'afficher en entier dans une info-bulle (balisage compris). Ne remplace jamais une info-bulle que vous avez posée avec is_tooltip ou is_super_tooltip_* : la vôtre gagne |
is_font_family | string | "" | Police par défaut du bloc (vide = police du thème) |
ii_font_size | integer | 0 | Taille par défaut en points (0 = taille du thème) |
il_text_color | long | -1 | Couleur de texte RGB() (-1 = couleur du thème). Les balises [color] restent prioritaires sur leur portion |
ii_line_spacing | integer | 0 | Interligne en pourcentage, de 50 à 400 (150 = 1,5 ligne ; 0 = défaut). Une valeur hors de ces bornes est ramenée à la plus proche, et se relit telle qu'appliquée |
ib_enabled | boolean | true | Bloc actif ou grisé (liens et actions inertes quand il est grisé) |
ib_selectable | boolean | false | Opt-in : autorise l'utilisateur à sélectionner le texte et à le copier par Ctrl+C (coupé par défaut, comme un libellé). Relâcher la souris après une sélection ne lève pas ue_clicked |
Allure de bloc (look « en-tête ») #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
il_back_color | long | -1 | Fond du bloc RGB() (-1 = fond du thème). Avec ii_corner_radius, il suit l'arrondi, et hors des coins le bloc montre la couleur de l'objet sur lequel il est posé |
il_border_color | long | -1 | Couleur de la bordure (-1 = pas de bordure) |
ii_border_width | integer | 0 | Épaisseur de la bordure en pixels (0 = pas de bordure) |
ii_corner_radius | integer | 0 | Rayon d'arrondi des angles, en pixels. La bordure ET le fond il_back_color le suivent |
ii_padding | integer | -1 | Marge intérieure en pixels : -1 = celle du thème (défaut), 0 = aucune marge (le texte s'aligne sur le bord d'un champ voisin), au-delà = pixels |
ib_hover_effect | boolean | false | Opt-in : léger assombrissement au survol (éclaircissement sur un thème sombre), pour un libellé-bouton |
Mode défilant (marquee) #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
ib_marquee | boolean | false | Transforme le bloc en bandeau défilant horizontalement |
ii_marquee_speed | integer | 60 | Vitesse de défilement, en pixels par seconde (0 = vitesse par défaut, 60) |
is_marquee_direction | string | MARQUEE_START | Sens du défilement : MARQUEE_START (vers le début de lecture) ou MARQUEE_END. Alias physiques "left" / "right" acceptés : ils restent physiques, quel que soit le sens de lecture. Toute autre valeur vaut, et se relit, MARQUEE_START |
ib_marquee_overflow_only | boolean | false | Opt-in : ne défiler que si le texte est trop large pour la boîte. Un bandeau qui fait défiler un texte déjà lisible n'est que du bruit visuel. Désactivé par défaut, pour que ib_marquee = true continue de vouloir dire ça défile |
ib_marquee_pause_on_hover | boolean | false | Opt-in : arrête le défilement tant que le pointeur est sur le bloc, pour qu'un texte long soit lisible. La position de boucle est conservée : rien ne saute quand le pointeur s'en va |
Interactions optionnelles #
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
ib_allow_drop | boolean | false | Opt-in : accepte le dépôt de fichiers depuis l'Explorateur Windows ; les chemins complets arrivent par ue_drop_files. Un texte désactivé (ib_enabled = false) refuse tout dépôt |
ib_track_mouse | boolean | false | Opt-in : active ue_mouse_enter / ue_mouse_leave |
ib_track_cycle | boolean | false | Opt-in : active ue_cycle, levé à la fin de chaque passage du défilement ; sans lui, le texte défile en silence |
ib_auto_height | boolean | false | Opt-in : le bloc mesure sa hauteur idéale et redimensionne l'userobject ; voir Socle commun |
ib_auto_width | boolean | false | Opt-in : l'userobject prend la LARGEUR de son texte — la plus longue ligne, sans retour à la ligne (les [br] comptent), plus la marge et la bordure ; un nouveau texte, une police ou une marge le redimensionnent à nouveau, et ue_auto_width dit la largeur retenue. Un bandeau défilant (ib_marquee) n'a pas de largeur naturelle et n'en rapporte aucune |
ib_follow_end | boolean | false | Opt-in, pour un journal écrit avec of_append_text : la vue reste EN BAS à mesure que les lignes arrivent — sauf si le lecteur est remonté lire une ligne plus ancienne : on ne l'en arrache jamais |
is_theme_style | string | "" | Style visuel du composant (constantes THEME_STYLE_*) ; vide = celui de l'application, suivi à chaque changement |
is_theme_mode | string | "" | Variante claire ou sombre (constantes THEME_MODE_*) ; vide = celle de l'application, suivie à chaque changement |
il_theme_accent | long | -1 | Couleur d'accent de ce composant (-1 = l'accent de l'application, ou celui du thème) |
is_tooltip | string | "" | Info-bulle simple affichée au survol du composant |
is_super_tooltip_title | string | "" | Titre de l'info-bulle enrichie (prend le pas sur is_tooltip) |
is_super_tooltip_text | string | "" | Texte de l'info-bulle enrichie (balisage riche accepté) |
is_super_tooltip_image | string | "" | Image de l'info-bulle enrichie |
Méthodes #
| Méthode | Rôle |
|---|---|
of_reset ( ) | Remet toutes les propriétés à leur défaut et vide le texte. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_set_redraw (boolean) | Regroupe une rafale de modifications en un seul rendu. Renvoie 0 une fois appliqué, -2 si le composant n'est pas créé |
of_save_as_png (string) · of_save_as_jpg (string) | Exporte le rendu en image. Renvoie 0 une fois l'image écrite, -4 si l'écriture échoue, -2 si le composant n'est pas créé |
of_refresh_parent_color ( ) | Relit la couleur de l'objet sur lequel le bloc est posé. Avec il_back_color et ii_corner_radius, les coins arrondis montrent cette couleur, lue quand ces deux propriétés sont posées : appelez-la après avoir changé le BackColor de votre fenêtre, ou déplacé le bloc vers un autre parent. Renvoie 0 une fois envoyée, -2 si le composant n'est pas créé |
of_scroll_to_end ( ) | Descend au bas du texte. Pour un journal, dont la ligne la plus récente est à la fin : sans cela elle passe sous la ligne de flottaison dès que le texte dépasse la hauteur visible. Renvoie 0 une fois envoyée, -2 si le composant n'est pas créé |
of_append_text (string as_markup) | Ajoute UNE ligne à la fin du texte, pour un journal : seule cette ligne part vers le composant et seule elle est dessinée — réécrire is_text à chaque ligne renvoyait et redessinait tout le journal. as_markup prend le même balisage que is_text ; relu, is_text porte toutes les lignes, jointes par [br]. Avec ib_follow_end la vue reste en bas. Renvoie 0 une fois envoyée, -2 si le composant n'est pas créé |
Événements #
| Événement | Déclenché quand |
|---|---|
ue_clicked ( ) | Clic gauche sur le bloc — pas déclenché sur une zone [action] ou [hyperlink] (aucun doublon), sur l'en-tête d'un [foldarea] (replier ne lève rien), ni après une sélection de texte |
ue_hyperlink (string as_url) | Une zone [hyperlink=url] a été cliquée. Le navigateur s'ouvre tout seul : l'event vous est remis en plus, pour tracer le clic ou en faire davantage |
ue_action (string as_key) | Une zone [action=id] a été cliquée : à vous d'y brancher votre code. La zone s'atteint aussi au clavier : Tab jusqu'à elle, puis Entrée ou Espace |
ue_drop_files (string as_files[]) | Des fichiers ont été déposés depuis Windows : chemins complets, une entrée par fichier. Nécessite ib_allow_drop = true |
ue_drag_enter ( ) | Un glissement de fichiers entre sur le composant (ib_allow_drop) |
ue_drag_leave ( ) | Le glissement de fichiers quitte le composant |
ue_auto_height (long al_height) | Le bloc a calculé sa hauteur idéale — nécessite ib_auto_height = true |
ue_auto_width (long al_width) | Le bloc a pris une nouvelle largeur, en unités PowerBuilder — nécessite ib_auto_width = true |
ue_rclicked ( ) | Clic droit sur le bloc |
ue_double_clicked ( ) | Double-clic sur le bloc, comme le StaticText natif de PowerBuilder. Les clics simples qui le précèdent sont émis aussi, dans le même ordre. Pas déclenché sur une zone [action] ou [hyperlink], qui ont leur propre canal |
ue_text_overflow (boolean ab_truncated) | Le texte a cessé de tenir dans la boîte — ou y tient de nouveau. Émis uniquement sur changement, jamais en rafale : un bloc en retour à la ligne compte comme coupé quand il est rogné en bas, un bloc sur une ligne quand il est coupé sur le côté. À traiter pour élargir une colonne, proposer un bouton voir plus, ou simplement activer ib_ellipsis_tooltip |
ue_mouse_enter ( ) | La souris entre — nécessite ib_track_mouse = true |
ue_mouse_leave ( ) | La souris sort — nécessite ib_track_mouse = true |
ue_cycle ( ) | Mode défilant uniquement : le texte vient de terminer un passage complet (une animation À L'INTÉRIEUR du texte ne compte jamais comme un passage) — nécessite ib_track_cycle = true |
ue_ready ( ) | Le composant a fini de charger ; tout ce qui a été envoyé avant a été rejoué |
ue_runtime_missing ( ) | Le runtime WebView2 est absent : le composant reste vide |
ue_bg_color (long al_color) | Le composant a calculé sa couleur de fond de thème ; l'userobject l'a déjà adoptée (backcolor) |
Exemples #
Un en-tête de section #
Fond plein, texte blanc centré et hauteur ajustée au contenu : le bloc se lit comme une vraie barre de titre.
// Geler l'affichage le temps de tout poser
uo_header.of_set_redraw(/*on*/ false)
// Le titre, centre
uo_header.is_text = "[b]Tableau de bord des ventes"
uo_header.is_align = uo_header.ALIGN_CENTER
// Fond plein et texte blanc lisible
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
// Le bloc se colle a son contenu : il se lit comme une barre de titre
uo_header.ib_auto_height = true
// Tout se dessine en une fois
uo_header.of_set_redraw(/*on*/ true)
// event ue_auto_height de uo_header
of_reposition_below_header(al_height) // decale le contenu sous l'en-tete
Texte riche avec lien et action #
// Un lien vers une page web, et une action que votre application traite (ue_action)
uo_text.is_text = "Votre licence expire le [b]31/12[/b]. " &
+ "[hyperlink=https://pbtoolboxai.net]En savoir plus[/hyperlink] " &
+ "ou [action=renew]la renouveler maintenant[/action]."
// event ue_action de uo_text : (string as_key)
choose case as_key
case "renew" ; of_open_renewal()
end choose
ue_hyperlink est réservé aux URL (le navigateur s'ouvre tout seul) ; [action=id] est le bon choix quand le clic doit rester dans votre application. La variante [invisibleaction=id] déclenche le même ue_action sans l'apparence d'un lien.
Un bloc repliable #
// Deux sections repliables : la seconde commence repliee
uo_recap.is_text = "[b]Commande 2026-0148[/b][br]" &
+ "[foldarea:[b]Livraison[/b]]Expedie le 12/07, sous 48 heures.[/foldarea]" &
+ "[foldarea-closed:[i]Mentions legales[/i]]Retour accepte sous 14 jours.[/foldarea]"
// Le bloc se retracte quand une section est repliee
uo_recap.ib_auto_height = true
Un [foldarea:Titre] ajoute un en-tête cliquable au-dessus de son contenu : le lecteur replie la section d'un clic, et le marqueur passe de − à +. [foldarea-closed:Titre] produit le même bloc, replié dès l'affichage. Les blocs s'imbriquent, et le repli ne remonte aucun event : c'est une affaire de lecture, pas de code. Si ib_auto_height est actif, la hauteur est renotifiée à chaque repli. Le titre est du texte à balises : [foldarea:[b][accent]Commande 2026-0148[/accent][/b]] met le sien en gras et à la couleur d'accent.
Un bandeau défilant #
// Le message du bandeau
uo_banner.is_text = "[b]Information[/b] -- fermeture exceptionnelle du service le vendredi 12."
// Mode defilant, facon fil d'actualite
uo_banner.ib_marquee = true
uo_banner.ii_marquee_speed = 90 // pixels par seconde
uo_banner.is_marquee_direction = uo_banner.MARQUEE_START
Le défilement boucle sans temps mort. Pour l'arrêter, repassez ib_marquee à false : le texte reprend sa mise en page normale.
Une fois ib_track_cycle = true posé, l'événement ue_cycle est déclenché à chaque passage complet du texte — pratique pour faire tourner plusieurs messages :
// Dans ue_cycle du bandeau : passer au message suivant
ii_message = Mod(ii_message, UpperBound(is_messages)) + 1
uo_banner.is_text = is_messages[ii_message]
Une zone de dépôt de fichiers #
// Accepter les fichiers glisses depuis l'Explorateur Windows
uo_zone.ib_allow_drop = true
// Ce que la zone affiche, centre
uo_zone.is_text = "[size=32][accent][b]Deposez vos fichiers ici[/b][/accent][/size][br][br]" &
+ "Glissez un ou plusieurs fichiers depuis l'Explorateur Windows."
uo_zone.is_align = uo_zone.ALIGN_CENTER
uo_zone.is_valign = uo_zone.VALIGN_CENTER
// event ue_drop_files de uo_zone : (string as_files[])
integer li
// Chaque fichier depose, l'un apres l'autre
for li = 1 to UpperBound(as_files)
of_import(as_files[li]) // as_files[li] = chemin COMPLET du fichier
next
// event ue_drag_enter de uo_zone : signaler la cible pendant le survol
uo_zone.il_border_color = RGB(/*red*/ 21, /*green*/ 101, /*blue*/ 192)
uo_zone.ii_border_width = 2
Les chemins reçus sont complets : vous pouvez les passer directement à FileOpen ou à votre routine d'import.
Un libellé qui se comporte comme un bouton #
// Un texte qui se comporte comme un bouton-lien
uo_link.is_text = "Tout selectionner"
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 // reagit au survol comme un bouton
// event ue_clicked de uo_link
of_select_all()
Un journal qui s'écrit ligne à ligne #
Chaque appel n'envoie que la ligne ajoutée ; ib_follow_end garde la dernière en vue tant que le lecteur ne remonte pas.
// 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]")
Une étiquette à la largeur de son texte #
// 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
Bonnes pratiques #
- Un texte sans balise n'a aucun surcoût : n'hésitez pas à remplacer systématiquement vos
statictextPowerBuilder, même pour du texte brut. - Préférez
is_align = uo.ALIGN_STARTà"left": votre écran restera correct si l'application passe en écriture de droite à gauche. ib_selectablereste coupé par défaut, comme un libellé. Ne l'activez que là où la copie a du sens (numéro de dossier, message d'erreur technique).- Pour un en-tête, combinez
il_back_color+ii_padding+ib_auto_height: le bloc se dimensionne seul quand le texte change de longueur. - N'activez
ib_track_mouseque si vous scriptez réellementue_mouse_enter/ue_mouse_leave. - Appelez
of_reset()avant de réutiliser un bloc pour un autre contenu : sans cela, un fond, une bordure ou le mode défilant précédents restent en place.
Hérité du socle commun #
Ces membres existent sur tous les composants visuels — ils ne sont pas propres à celui-ci. Ils sont détaillés une seule fois, dans les chapitres transverses ; cette table dit seulement où les lire.
| Membres | Rôle | Détaillé dans |
|---|---|---|
of_reset | Remettre le composant à zéro | 3.6 Remettre un composant à zéro : of_reset() |
of_register_shortcut · of_clear_shortcuts | Raccourcis clavier du composant | 3.5 Les raccourcis clavier |
of_is_created · of_is_ready · of_get_last_error | S'il est né, s'il est prêt, ce qui a échoué | 3.7 Diagnostic |
of_save_as_png · of_save_as_jpg | Exporter le rendu en image | 3.8 Exporter le rendu en image |
of_set_redraw | Grouper les modifications en un seul repaint | 3.10 Bonnes pratiques |
of_preload_icons | Icônes affichées sans délai | Affichage instantané : of_icon |
of_set_translation | Traduire un libellé du composant | 5.2 Adapter un libellé : of_set_translation |
of_focus_webview | Donner le focus au composant | 6.4 Clavier et focus |
of_print · of_print_to_pdf | Imprimer, ou écrire un PDF | 6.9 Imprimer |
of_set_property · of_get_property · of_component_name | Piloter une propriété par son nom | 3.1 Le moteur de propriétés |
Deux aides ne sont pas héritées : of_icon et of_escape_markup vivent sur n_pbt_utils. Déclarez-en une — n_pbt_utils lnv_utils, rien à créer — et appelez-les dessus.