statictext — u_pbt_statictext #
← Referencia de componentes · Índice de la guía
Bloque de texto enriquecido: etiquetas, alineaciones, enlaces y acciones en los que se puede hacer clic, aspecto de encabezado, modo desplazable (marquee) y zona para soltar ficheros.
▶ Verlo en vivo — Aplicación de demostración, mosaico Statictext: la vista previa, el código que lo genera y esta página, uno al lado del otro.
De un vistazo #
| Userobject | u_pbt_statictext |
| Clase de items | — (componente sin items) |
| Sirve para | Sustituir un statictext de PowerBuilder por un bloque de texto formateado, en el que se puede hacer clic, capaz de servir de encabezado, de banda desplazable o de zona para soltar ficheros |
| Opciones opt-in | ib_auto_height, ib_track_mouse, ib_allow_drop, ib_selectable, ib_hover_effect |
Inicio rápido #
// event open de la ventana
uo_texte.is_text = "Bienvenido a [b][accent]PBToolboxAI[/accent][/b][br]" &
+ "Consulte la [hyperlink=https://pbtoolboxai.net]documentación[/hyperlink]."
uo_texte.is_align = uo_texte.ALIGN_CENTER
uo_texte.is_valign = uo_texte.VALIGN_CENTER
El texto admite el texto enriquecido con etiquetas: es este componente el que mejor partido le saca, ya que es el único que hace que las zonas [hyperlink=…] y [action=…] sean realmente pulsables.
Constantes #
| Constante | Valor | Para |
|---|---|---|
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 y end son lógicos: siguen el sentido de escritura (Idioma y RTL). Los valores físicos left y right se siguen aceptando como alias.
Propiedades #
Texto y formato #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
is_text | string | "" | El texto mostrado, con el texto enriquecido con etiquetas: [b], [i], [u], colores, [picture=…], [hyperlink=…], [action=…] |
is_align | string | "start" | Alineación horizontal: ALIGN_START, ALIGN_CENTER, ALIGN_END, ALIGN_JUSTIFY |
is_valign | string | "top" | Alineación vertical dentro del control: VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM |
ib_wrap | boolean | true | Salto de línea automático. false fuerza una única línea |
ib_ellipsis | boolean | false | Con ib_wrap = false, trunca el desbordamiento con puntos suspensivos en lugar de cortarlo en seco |
ib_ellipsis_tooltip | boolean | false | Opt-in: cuando el texto no cabe en la caja, mostrarlo entero en una sugerencia (marcado incluido). Nunca sustituye una sugerencia que usted haya puesto con is_tooltip o is_super_tooltip_*: la suya gana |
is_font_family | string | "" | Fuente predeterminada del bloque (vacío = fuente del tema) |
ii_font_size | integer | 0 | Tamaño predeterminado en puntos (0 = tamaño del tema) |
il_text_color | long | -1 | Color del texto RGB() (-1 = color del tema). Las etiquetas [color] siguen teniendo prioridad sobre su fragmento |
ii_line_spacing | integer | 0 | Interlineado en porcentaje (150 = 1,5 líneas; 0 = predeterminado) |
ib_enabled | boolean | true | Bloque activo o atenuado (los enlaces y las acciones quedan inertes cuando está atenuado) |
ib_selectable | boolean | false | Opt-in: permite al usuario seleccionar y copiar el texto (desactivado de forma predeterminada, como una etiqueta) |
Aspecto de bloque (aire de «encabezado») #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
il_back_color | long | -1 | Fondo del bloque RGB() (-1 = fondo del tema) |
il_border_color | long | -1 | Color del borde (-1 = sin borde) |
ii_border_width | integer | 0 | Grosor del borde en píxeles (0 = sin borde) |
ii_corner_radius | integer | 0 | Radio de redondeo de las esquinas, en píxeles |
ii_padding | integer | 0 | Margen interior en píxeles (0 = valor del tema) |
ib_hover_effect | boolean | false | Opt-in: ligero oscurecimiento al pasar el cursor, para una etiqueta que actúa como botón |
Modo desplazable (marquee) #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
ib_marquee | boolean | false | Convierte el bloque en una banda desplazable horizontalmente |
ii_marquee_speed | integer | 60 | Velocidad de desplazamiento, en píxeles por segundo |
is_marquee_direction | string | MARQUEE_START | Sentido del desplazamiento: MARQUEE_START (hacia el inicio de la lectura) o MARQUEE_END. Se aceptan los alias físicos "left" / "right" |
ib_marquee_overflow_only | boolean | false | Opt-in: desplazar solo si el texto es demasiado ancho para la caja. Un rótulo que desplaza un texto ya legible no es más que ruido visual. Desactivado de forma predeterminada, para que ib_marquee = true siga significando se desplaza |
ib_marquee_pause_on_hover | boolean | false | Opt-in: detiene el desplazamiento mientras el puntero está sobre el bloque, para que un texto largo se pueda leer. La posición del ciclo se conserva: nada salta cuando el puntero se va |
Interacciones opcionales #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
ib_allow_drop | boolean | false | Opt-in: acepta que se suelten ficheros desde el Explorador de Windows; las rutas completas llegan por ue_drop_files |
ib_track_mouse | boolean | false | Opt-in: activa ue_mouse_enter / ue_mouse_leave |
ib_auto_height | boolean | false | Opt-in: el bloque mide su altura ideal y redimensiona el userobject; véase Base común |
is_theme_style | string | fluent | Estilo visual del componente (constantes THEME_STYLE_*) |
is_theme_mode | string | light | Variante clara u oscura (constantes THEME_MODE_*) |
il_theme_accent | long | -1 | Color de acento de este componente (-1 = acento del tema) |
is_tooltip | string | "" | Tooltip simple mostrado al pasar el ratón por el componente |
is_super_tooltip_title | string | "" | Título del tooltip enriquecido (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto del tooltip enriquecido (se acepta el marcado enriquecido) |
is_super_tooltip_image | string | "" | Imagen del tooltip enriquecido |
Métodos #
| Método | Función |
|---|---|
of_reset ( ) | Devuelve todas las propiedades a su valor predeterminado y vacía el texto |
of_set_redraw (boolean) | Agrupa una ráfaga de modificaciones en una única representación |
of_save_as_png (string) · of_save_as_jpg (string) | Exporta la representación como imagen |
of_scroll_to_end ( ) | Baja al final del texto. Para un registro, cuya línea más reciente está al final: sin esto queda por debajo de la línea de flotación en cuanto el texto supera la altura visible |
Eventos #
| Evento | Se activa cuando |
|---|---|
ue_clicked ( ) | Clic izquierdo sobre el bloque — no se activa sobre una zona [action] o [hyperlink] (sin duplicados) |
ue_hyperlink (string as_url) | Se pulsó una zona [hyperlink=url]. El navegador se abre solo: el evento le llega además, para registrar el clic o hacer algo más con él |
ue_action (string as_id) | Se ha hecho clic en una zona [action=id]: le corresponde a usted enganchar ahí su código |
ue_drop_files (string as_files[]) | Se han soltado ficheros desde Windows: rutas completas, una entrada por fichero. Requiere ib_allow_drop = true |
ue_drag_enter ( ) | Un arrastre de ficheros entra en el componente (ib_allow_drop) |
ue_drag_leave ( ) | El arrastre de ficheros sale del componente |
ue_auto_height (long al_height) | El bloque ha calculado su altura ideal — requiere ib_auto_height = true |
ue_rclicked ( ) | Clic derecho sobre el bloque |
ue_double_clicked ( ) | Doble clic sobre el bloque, como el StaticText nativo de PowerBuilder. Los clics simples que lo preceden también se emiten, en el mismo orden. No sobre una zona [action] o [hyperlink], que tienen su propio canal |
ue_text_overflow (boolean ab_truncated) | El texto ha dejado de caber en la caja — o vuelve a caber. Emitido únicamente al cambiar, nunca en ráfaga: un bloque con salto de línea cuenta como cortado cuando queda recortado por abajo, y uno de una sola línea cuando se corta de lado. Trátelo para ensanchar una columna, ofrecer un botón ver más, o simplemente activar ib_ellipsis_tooltip |
ue_mouse_enter ( ) | El ratón entra — requiere ib_track_mouse = true |
ue_mouse_leave ( ) | El ratón sale — requiere ib_track_mouse = true |
ue_cycle ( ) | Solo en modo desplazable: el texto acaba de terminar una pasada completa |
ue_ready ( ) | El componente ha terminado de cargarse; todo lo enviado antes se ha reproducido |
ue_runtime_missing ( ) | El runtime WebView2 está ausente: el componente permanece vacío |
ue_bg_color (long al_color) | El componente ha calculado el color de fondo de su tema; el userobject ya lo ha adoptado (backcolor) |
Ejemplos #
Un encabezado de sección #
Fondo liso, texto blanco centrado y altura ajustada al contenido: el bloque se lee como una auténtica barra de título.
uo_entete.of_set_redraw(false)
uo_entete.is_text = "[b]Cuadro de mando de ventas"
uo_entete.is_align = uo_entete.ALIGN_CENTER
// Fondo liso y texto blanco legible
uo_entete.il_back_color = RGB(/*rojo*/ 60, /*verde*/ 110, /*azul*/ 190)
uo_entete.il_text_color = RGB(/*rojo*/ 255, /*verde*/ 255, /*azul*/ 255)
uo_entete.ii_padding = 14
// El bloque se cine a su contenido : se lee como una barra de titulo
uo_entete.ib_auto_height = true
uo_entete.of_set_redraw(true)
// event ue_auto_height de uo_entete
of_repositionner_sous_entete(al_height) // desplaza el contenido bajo el encabezado
Texto enriquecido con enlace y acción #
uo_texte.is_text = "Su licencia caduca el [b]31/12[/b]. " &
+ "[hyperlink=https://pbtoolboxai.net]Más información[/hyperlink] " &
+ "o [action=renew]renuévela ahora[/action]."
// event ue_action de uo_texte : (string as_id)
choose case as_id
case "renew" ; of_ouvrir_renouvellement()
end choose
ue_hyperlink está reservado a las URL (el navegador se abre solo); [action=id] es la opción adecuada cuando el clic debe permanecer dentro de su aplicación. La variante [invisibleaction=id] activa el mismo ue_action sin la apariencia de un enlace.
Un bloque plegable #
uo_recap.is_text = "[b]Pedido 2026-0148[/b][br]" &
+ "[foldarea:[b]Entrega[/b]]Enviado el 12/07, en 48 horas.[/foldarea]" &
+ "[foldarea-closed:[i]Aviso legal[/i]]Devolucion aceptada en 14 dias.[/foldarea]"
uo_recap.ib_auto_height = true // el bloque se encoge cuando se pliega una seccion
Un [foldarea:Título] añade un encabezado en el que se puede hacer clic sobre su contenido: el lector pliega la sección con un clic y el marcador pasa de − a +. [foldarea-closed:Título] produce el mismo bloque, plegado desde el principio. Los bloques se anidan y el pliegue no emite ningún evento: es una cuestión de lectura, no de código. Si ib_auto_height está activo, la altura se vuelve a notificar en cada pliegue. El título es texto con etiquetas: [foldarea:[b][accent]Pedido 2026-0148[/accent][/b]] pone el suyo en negrita y con el color de acento.
Una banda desplazable #
uo_bandeau.is_text = "[b]Información[/b] -- cierre excepcional del servicio el viernes 12."
// Modo desplazable, al estilo de un teletipo de noticias
uo_bandeau.ib_marquee = true
uo_bandeau.ii_marquee_speed = 90 // pixeles por segundo
uo_bandeau.is_marquee_direction = uo_bandeau.MARQUEE_START
El desplazamiento se repite sin tiempos muertos. Para detenerlo, vuelva a poner ib_marquee en false: el texto recupera su disposición normal.
En cada pasada completa del texto se activa el evento ue_cycle — práctico para ir rotando varios mensajes:
// En ue_cycle de la banda : pasar al mensaje siguiente
ii_message = Mod(ii_message, UpperBound(is_messages)) + 1
uo_bandeau.is_text = is_messages[ii_message]
Una zona para soltar ficheros #
// Aceptar los ficheros arrastrados desde el Explorador de Windows
uo_zone.ib_allow_drop = true
uo_zone.is_text = "[size=32][accent][b]Suelte aquí sus ficheros[/b][/accent][/size][br][br]" &
+ "Arrastre uno o varios ficheros desde el Explorador de 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
for li = 1 to UpperBound(as_files)
of_importer(as_files[li]) // as_files[li] = ruta COMPLETA del fichero
next
// event ue_drag_enter de uo_zone : senalar el destino al pasar el cursor
uo_zone.il_border_color = RGB(/*rojo*/ 21, /*verde*/ 101, /*azul*/ 192)
uo_zone.ii_border_width = 2
Las rutas recibidas son completas: puede pasarlas directamente a FileOpen o a su rutina de importación.
Una etiqueta que se comporta como un botón #
uo_lien.is_text = "Seleccionar todo"
uo_lien.il_text_color = RGB(/*rojo*/ 21, /*verde*/ 101, /*azul*/ 192)
uo_lien.ii_padding = 8
uo_lien.ii_corner_radius = 6
uo_lien.ib_hover_effect = true // reacciona al paso del cursor como un boton
// event ue_clicked de uo_lien
of_tout_selectionner()
Buenas prácticas #
- Un texto sin etiquetas no tiene ningún coste añadido: no dude en sustituir sistemáticamente sus
statictextde PowerBuilder, incluso para texto sin formato. - Prefiera
is_align = uo.ALIGN_STARTa"left": su pantalla seguirá siendo correcta si la aplicación pasa a escritura de derecha a izquierda. ib_selectablepermanece desactivado de forma predeterminada, como una etiqueta. Actívelo solo allí donde copiar tenga sentido (número de expediente, mensaje de error técnico).- Para un encabezado, combine
il_back_color+ii_padding+ib_auto_height: el bloque se dimensiona solo cuando el texto cambia de longitud. - Active
ib_track_mouseúnicamente si realmente programaue_mouse_enter/ue_mouse_leave. - Llame a
of_reset()antes de reutilizar un bloque para otro contenido: de lo contrario, permanecerán en su sitio el fondo, el borde o el modo desplazable anteriores.