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_auto_width, ib_follow_end, ib_track_mouse, ib_track_cycle, ib_allow_drop, ib_selectable, ib_hover_effect |
Inicio rápido #
// event open de la ventana
uo_text.is_text = "Bienvenido a [b][accent]PBToolboxAI[/accent][/b][br]" &
+ "Consulte la [hyperlink=https://pbtoolboxai.net]documentación[/hyperlink]."
uo_text.is_align = uo_text.ALIGN_CENTER
uo_text.is_valign = uo_text.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 pulsables las zonas [action=…] (un [hyperlink=…] se abre en todas partes).
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, de 50 a 400 (150 = 1,5 líneas; 0 = predeterminado). Un valor fuera de esos límites se lleva al más cercano, y se relee tal como se aplicó |
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 el texto y copiarlo con Ctrl+C (desactivado de forma predeterminada, como una etiqueta). Soltar el ratón tras una selección no genera ue_clicked |
Aspecto de bloque (aire de «encabezado») #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
il_back_color | long | -1 | Fondo del bloque RGB() (-1 = fondo del tema). Con ii_corner_radius sigue el redondeo, y fuera de las esquinas el bloque muestra el color del objeto sobre el que está colocado |
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. El borde Y el fondo il_back_color lo siguen |
ii_padding | integer | -1 | Margen interior en píxeles: -1 = el del tema (predeterminado), 0 = ningún margen (el texto se alinea con el borde de un campo vecino), más = píxeles |
ib_hover_effect | boolean | false | Opt-in: ligero oscurecimiento al pasar el cursor (aclarado en un tema oscuro), 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 (0 = velocidad por defecto, 60) |
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": siguen siendo físicos, sea cual sea el sentido de lectura. Cualquier otro valor vale, y se relee, MARQUEE_START |
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. Un texto desactivado (ib_enabled = false) rechaza cualquier depósito |
ib_track_mouse | boolean | false | Opt-in: activa ue_mouse_enter / ue_mouse_leave |
ib_track_cycle | boolean | false | Opt-in: activa ue_cycle, lanzado al final de cada pasada del desplazamiento; sin él, el texto se desplaza en silencio |
ib_auto_height | boolean | false | Opt-in: el bloque mide su altura ideal y redimensiona el userobject; véase Base común |
ib_auto_width | boolean | false | Opt-in: el userobject toma la ANCHURA de su texto — la línea más larga, sin salto de línea (los [br] cuentan), más el margen y el borde; un texto nuevo, una fuente o un margen lo redimensionan de nuevo, y ue_auto_width indica la anchura adoptada. Un texto desplazable (ib_marquee) no tiene anchura natural y no informa ninguna |
ib_follow_end | boolean | false | Opt-in, para un registro escrito con of_append_text: la vista se queda ABAJO a medida que llegan las líneas — salvo si el lector ha subido a leer una línea más antigua: nunca se le aparta de ella |
is_theme_style | string | "" | Estilo visual del componente (constantes THEME_STYLE_*); vacío = el de la aplicación, seguido en cada cambio |
is_theme_mode | string | "" | Variante clara u oscura (constantes THEME_MODE_*); vacío = la de la aplicación, seguida en cada cambio |
il_theme_accent | long | -1 | Color de acento de este componente (-1 = acento de la aplicación, o el 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. Devuelve 0 una vez aplicado, -2 si el componente no está creado |
of_set_redraw (boolean) | Agrupa una ráfaga de modificaciones en una única representación. Devuelve 0 una vez aplicado, -2 si el componente no está creado |
of_save_as_png (string) · of_save_as_jpg (string) | Exporta la representación como imagen. Devuelve 0 una vez escrita la imagen, -4 si la escritura falla, -2 si el componente no está creado |
of_refresh_parent_color ( ) | Vuelve a leer el color del objeto sobre el que está el bloque. Con il_back_color e ii_corner_radius, las esquinas redondeadas muestran ese color, leído cuando se asignan esas dos propiedades: llámela después de cambiar el BackColor de su ventana, o de mover el bloque a otro padre. Devuelve 0 una vez enviado, -2 si el componente no está creado |
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. Devuelve 0 una vez enviado, -2 si el componente no está creado |
of_append_text (string as_markup) | Añade UNA línea al final del texto, para un registro: solo esa línea viaja al componente y solo ella se dibuja — reescribir is_text en cada línea reenviaba y redibujaba todo el registro. as_markup admite el mismo marcado que is_text; releído, is_text contiene todas las líneas, unidas por [br]. Con ib_follow_end la vista se queda abajo. Devuelve 0 una vez enviado, -2 si el componente no está creado |
Eventos #
| Evento | Se activa cuando |
|---|---|
ue_clicked ( ) | Clic izquierdo sobre el bloque — no se activa sobre una zona [action] o [hyperlink] (sin duplicados), sobre el encabezado de un [foldarea] (plegar no genera nada), ni tras una selección de texto |
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_key) | Se ha hecho clic en una zona [action=id]: le corresponde a usted enganchar ahí su código. La zona también se alcanza con el teclado: Tab hasta ella, luego Intro o Espacio |
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_auto_width (long al_width) | El bloque ha tomado una nueva anchura, en unidades PowerBuilder — requiere ib_auto_width = 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 (una animación DENTRO del texto nunca cuenta como pasada) — requiere ib_track_cycle = true |
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.
// Congelar la visualizacion mientras se configura todo
uo_header.of_set_redraw(/*on*/ false)
// El titulo, centrado
uo_header.is_text = "[b]Cuadro de mando de ventas"
uo_header.is_align = uo_header.ALIGN_CENTER
// Fondo liso y texto blanco legible
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
// El bloque se cine a su contenido : se lee como una barra de titulo
uo_header.ib_auto_height = true
// Todo se dibuja de una vez
uo_header.of_set_redraw(/*on*/ true)
// event ue_auto_height de uo_header
of_reposition_below_header(al_height) // desplaza el contenido bajo el encabezado
Texto enriquecido con enlace y acción #
// Un enlace a una pagina web y una accion que su aplicacion trata (ue_action)
uo_text.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_text : (string as_key)
choose case as_key
case "renew" ; of_open_renewal()
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 #
// Dos secciones plegables : la segunda empieza plegada
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]"
// El bloque se encoge cuando se pliega una seccion
uo_recap.ib_auto_height = true
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 #
// El mensaje de la banda
uo_banner.is_text = "[b]Información[/b] -- cierre excepcional del servicio el viernes 12."
// Modo desplazable, al estilo de un teletipo de noticias
uo_banner.ib_marquee = true
uo_banner.ii_marquee_speed = 90 // pixeles por segundo
uo_banner.is_marquee_direction = uo_banner.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.
Una vez puesto ib_track_cycle = true, 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_banner.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
// Lo que muestra la zona, centrado
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
// Cada fichero soltado, uno tras otro
for li = 1 to UpperBound(as_files)
of_import(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(/*red*/ 21, /*green*/ 101, /*blue*/ 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 #
// Un texto que se comporta como un boton-enlace
uo_link.is_text = "Seleccionar todo"
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 // reacciona al paso del cursor como un boton
// event ue_clicked de uo_link
of_select_all()
Un registro escrito línea a línea #
Cada llamada envía solo la línea añadida; ib_follow_end mantiene la última a la vista mientras el lector no suba.
// 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]")
Una etiqueta tan ancha como su texto #
// 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
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.
Heredado de la base común #
Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.
| Miembros | Función | Detallado en |
|---|---|---|
of_reset | Poner el componente a cero | 3.6 Poner un componente a cero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atajos de teclado del componente | 3.5 Los atajos de teclado |
of_is_created · of_is_ready · of_get_last_error | Si ha nacido, si está listo, qué ha fallado | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar el render como imagen | 3.8 Exportar la representación como imagen |
of_set_redraw | Agrupar los cambios en un solo repintado | 3.10 Buenas prácticas |
of_preload_icons | Iconos mostrados sin retardo | Visualización instantánea: of_icon |
of_set_translation | Traducir una etiqueta del componente | 5.2 Adaptar una etiqueta: of_set_translation |
of_focus_webview | Dar el foco al componente | 6.4 Teclado y foco |
of_print · of_print_to_pdf | Imprimir, o escribir un PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar una propiedad por su nombre | 3.1 El motor de propiedades |
Dos ayudas no se heredan: of_icon y of_escape_markup viven en n_pbt_utils. Declare uno — n_pbt_utils lnv_utils, nada que crear — y llámelas sobre él.