PBToolboxAI v1 ← Site

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 #

Userobjectu_pbt_statictext
Clase de items— (componente sin items)
Sirve paraSustituir 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-inib_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 #

ConstanteValorPara
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 #

PropiedadTipoPredeterminadoFunción
is_textstring""El texto mostrado, con el texto enriquecido con etiquetas: [b], [i], [u], colores, [picture=…], [hyperlink=…], [action=…]
is_alignstring"start"Alineación horizontal: ALIGN_START, ALIGN_CENTER, ALIGN_END, ALIGN_JUSTIFY
is_valignstring"top"Alineación vertical dentro del control: VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM
ib_wrapbooleantrueSalto de línea automático. false fuerza una única línea
ib_ellipsisbooleanfalseCon ib_wrap = false, trunca el desbordamiento con puntos suspensivos en lugar de cortarlo en seco
ib_ellipsis_tooltipbooleanfalseOpt-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_familystring""Fuente predeterminada del bloque (vacío = fuente del tema)
ii_font_sizeinteger0Tamaño predeterminado en puntos (0 = tamaño del tema)
il_text_colorlong-1Color del texto RGB() (-1 = color del tema). Las etiquetas [color] siguen teniendo prioridad sobre su fragmento
ii_line_spacinginteger0Interlineado en porcentaje (150 = 1,5 líneas; 0 = predeterminado)
ib_enabledbooleantrueBloque activo o atenuado (los enlaces y las acciones quedan inertes cuando está atenuado)
ib_selectablebooleanfalseOpt-in: permite al usuario seleccionar y copiar el texto (desactivado de forma predeterminada, como una etiqueta)

Aspecto de bloque (aire de «encabezado») #

PropiedadTipoPredeterminadoFunción
il_back_colorlong-1Fondo del bloque RGB() (-1 = fondo del tema)
il_border_colorlong-1Color del borde (-1 = sin borde)
ii_border_widthinteger0Grosor del borde en píxeles (0 = sin borde)
ii_corner_radiusinteger0Radio de redondeo de las esquinas, en píxeles
ii_paddinginteger0Margen interior en píxeles (0 = valor del tema)
ib_hover_effectbooleanfalseOpt-in: ligero oscurecimiento al pasar el cursor, para una etiqueta que actúa como botón

Modo desplazable (marquee) #

PropiedadTipoPredeterminadoFunción
ib_marqueebooleanfalseConvierte el bloque en una banda desplazable horizontalmente
ii_marquee_speedinteger60Velocidad de desplazamiento, en píxeles por segundo
is_marquee_directionstringMARQUEE_STARTSentido del desplazamiento: MARQUEE_START (hacia el inicio de la lectura) o MARQUEE_END. Se aceptan los alias físicos "left" / "right"
ib_marquee_overflow_onlybooleanfalseOpt-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_hoverbooleanfalseOpt-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 #

PropiedadTipoPredeterminadoFunción
ib_allow_dropbooleanfalseOpt-in: acepta que se suelten ficheros desde el Explorador de Windows; las rutas completas llegan por ue_drop_files
ib_track_mousebooleanfalseOpt-in: activa ue_mouse_enter / ue_mouse_leave
ib_auto_heightbooleanfalseOpt-in: el bloque mide su altura ideal y redimensiona el userobject; véase Base común
is_theme_stylestringfluentEstilo visual del componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara u oscura (constantes THEME_MODE_*)
il_theme_accentlong-1Color de acento de este componente (-1 = acento del tema)
is_tooltipstring""Tooltip simple mostrado al pasar el ratón por el componente
is_super_tooltip_titlestring""Título del tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto del tooltip enriquecido (se acepta el marcado enriquecido)
is_super_tooltip_imagestring""Imagen del tooltip enriquecido

Métodos #

MétodoFunció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 #

EventoSe 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 #


← Referencia de componentes · Índice de la guía