dockcontainer — u_pbt_dockcontainer #
← Referencia de componentes · Índice de la guía
Paneles acoplables al estilo de Visual Studio: acoplamiento mediante arrastrar y soltar, apilamiento en pestañas, separadores redimensionables, ventanas flotantes, ocultación automática — y guardado/restauración de la disposición.
▶ Verlo en vivo — Aplicación de demostración, mosaico Dock container: la vista previa, el código que lo genera y esta página, uno al lado del otro.
De un vistazo #
| Userobject | u_pbt_dockcontainer |
| Clase de items | n_pbt_dock_panel (un panel) |
| Sirve para | Dar a una ventana PowerBuilder la ergonomía de un IDE moderno: el usuario organiza él mismo sus paneles, y la disposición reaparece en la sesión siguiente |
Al igual que tab, cada panel aloja un control real de PowerBuilder (dragobject): userobject, DataWindow u otro componente PBToolboxAI. Véase Alojar controles reales de PowerBuilder.
Inicio rápido #
// event open de la ventana : los controles de panel ya estan colocados en ella
uo_dock.of_add_panel(/*key*/ "document", /*position*/ "", /*relative_to*/ "", /*size*/ 0, /*title*/ "Documento", /*content*/ uo_editor)
// El explorador, acoplado al inicio del documento, de 260 pixeles
uo_dock.of_add_panel(/*key*/ "explorer", /*position*/ uo_dock.POSITION_START, /*relative_to*/ "document", /*size*/ 260, /*title*/ "Explorador", /*content*/ uo_tree)
// Las propiedades, acopladas al final del documento, de 300 pixeles
uo_dock.of_add_panel(/*key*/ "properties", /*position*/ uo_dock.POSITION_END, /*relative_to*/ "document", /*size*/ 300, /*title*/ "Propiedades", /*content*/ uo_props)
// La zona central : ni cerrable por el acoplamiento, ni flotante, ni ocultable
uo_dock.is_main = "document"
Propiedades #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
is_main | string | "" | Clave del panel principal: la zona de documento central, que no puede ocultarse ni desacoplarse, y sobre la que no se apila ningún panel. Asignada antes de añadir ese panel, se conserva y se aplica en su of_add_panel; "" quita el panel principal |
ib_veto_close | boolean | false | Opt-in: preguntar antes de que se cierre un panel — la cruz de su cabecera, Cerrar / Cerrar los demás en el menú, la cruz de un panel deslizante y of_close_panel (dispara ue_panel_closing, que puede rechazar; una orden rechazada devuelve -4). Desactivado por defecto, como todo evento cancelable de la biblioteca: ponga true para mantener abierto un panel con trabajo sin guardar |
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 |
Posiciones de acoplamiento #
Las constantes del componente alimentan as_position en of_add_panel y of_move_panel:
| Constante | Valor | Efecto |
|---|---|---|
POSITION_START | "start" | El nuevo panel se acopla por el lado de inicio de lectura del panel de referencia (a la izquierda en escritura de izquierda a derecha) |
POSITION_END | "end" | … por el lado de fin de lectura |
POSITION_TOP | "top" | … encima |
POSITION_BOTTOM | "bottom" | … debajo |
POSITION_STACK | "stack" | El panel se apila como pestaña sobre el panel de referencia. Valor adoptado si as_position está vacío |
Propiedades de un panel — n_pbt_dock_panel #
Obtenidas mediante of_panel(clave).
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
is_title | string | "" | Título mostrado en la pestaña del panel; vacío (ningún título dado), la pestaña muestra la clave y el panel principal no tiene cabecera — darle un título después la hace aparecer. Acepta el texto enriquecido con etiquetas |
is_short_title | string | "" | Forma corta del título, para los lugares donde falta espacio: el raíl de un panel anclado (siempre — es una franja estrecha) y la pestaña de una pila, pero solo cuando el título completo ya no cabe, algo que se mide en lugar de adivinarse. La cabecera del panel conserva el título completo. "" = sin forma corta |
ib_visible | boolean | true | Muestra u oculta este panel. El panel principal no se oculta; ocultar un panel flotante cierra su ventana, y volverá acoplado a su sitio |
ib_pinned | boolean | true | true = fijado en su sitio; false = todo el grupo del panel (sus pestañas incluidas) se repliega en lengüetas sobre el borde. Una lengüeta despliega su panel al pasar el cursor (tras 400 ms) o enseguida al hacer clic; abierto al pasar el cursor, se repliega cuando el ratón lo abandona sin que el foco esté dentro, abierto con un clic permanece hasta un clic en otro lugar. el botón de chincheta de la cabecera lanza ue_panel_pinned para cada panel del grupo, y también asignar ib_pinned desde el código (una orden lo lanza como el gesto) |
ib_closable | boolean | true | ¿Puede el usuario cerrar este panel (cruz de la cabecera, cruz del panel deslizante, Cerrar / Cerrar los demás en el menú)? Se fija al añadirlo con of_add_panel(…, ab_closable) y puede cambiarse en cualquier momento: la cruz y las entradas del menú siguen al instante. of_close_panel rechaza (-5) un panel no cerrable |
is_header_color | string | "" | Color de la cabecera de este panel. Vacío = decide el tema; HEADER_COLOR_ACCENT sigue el acento del tema (y lo sigue tras un cambio de tema, cosa que un código fijo no haría); si no, un #rrggbb. El color de texto legible se calcula |
is_border_color | string | "" | Color del borde de este panel, misma gramática. Enmarca el marco y la cabecera, que tienen cada uno el suyo: colorear solo uno deja una costura visible. Acompaña al panel en su panel deslizante |
is_tooltip | string | "" | Tooltip simple mostrado al pasar el ratón por el item |
is_super_tooltip_title | string | "" | Título del tooltip enriquecido del item (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto del tooltip enriquecido del item (se acepta el marcado enriquecido) |
is_super_tooltip_image | string | "" | Imagen del tooltip enriquecido del item |
il_back_color | long | -1 | Fondo de la pestaña de ESTE panel en una pila, y de su lengüeta en el borde una vez desfijado (-1 = el del componente, que sigue el tema). La cabecera de un panel solo toma is_header_color |
il_text_color | long | -1 | Color del texto de la pestaña y la lengüeta de ESTE panel (-1 = el del componente) |
il_back_color_hover | long | -1 | Fondo de la pestaña y la lengüeta de ESTE panel al pasar (-1 = el del componente) |
il_text_color_hover | long | -1 | Color del texto de la pestaña y la lengüeta de ESTE panel al pasar (-1 = el del componente) |
il_accent | long | -1 | Acento de ESTE panel (-1 = acento del componente); la cabecera lo sigue cuando is_header_color vale HEADER_COLOR_ACCENT |
Métodos #
| Método | Función |
|---|---|
of_add_panel (string as_key, string as_position, string as_relative_to, integer ai_size, string as_title, dragobject ado_content) | Añade un panel cerrable y aloja el control. as_relative_to = clave del panel contra el que se acopla (vacío = la raíz); ai_size = tamaño inicial en píxeles (0 = automático). Devuelve 0 una vez aplicado, -5 ante una clave vacía, ya usada o que contenga / o una barra vertical, un control ya alojado, un as_relative_to desconocido o un apilamiento (POSITION_STACK) sobre el panel principal, o una posición desconocida — no se toca nada, -6 en modo demo cuando el dock ya contiene sus tres paneles (el control se queda en su sitio, visible), -2 si el componente no está creado |
of_add_panel (…, boolean ab_closable) | Ídem, con ab_closable = false para un panel sin botón de cierre. Devuelve 0 una vez aplicado, -5 ante una clave vacía, ya usada o que contenga / o una barra vertical, un control ya alojado, un as_relative_to desconocido o un apilamiento (POSITION_STACK) sobre el panel principal, o una posición desconocida — no se toca nada, -6 en modo demo cuando el dock ya contiene sus tres paneles (el control se queda en su sitio, visible), -2 si el componente no está creado |
of_select_panel (string as_key) | Hace visible un panel: en primer plano de su pila, su panel deslizante abierto cuando su grupo está replegado, su ventana traída al frente cuando flota. Cuando un panel acoplado pasa al primer plano de su pila, sigue ue_panel_selected, como para un clic en su pestaña. Devuelve 0 una vez aplicado, -5 ante una clave desconocida o un panel OCULTO (mostrarlo es el papel de ib_visible), -2 si el componente no está creado |
of_move_panel (string as_key, string as_target, string as_position) | Reorganiza desde el código, exactamente como si el usuario hubiera arrastrado la pestaña. Devuelve 0 una vez aplicado, -5 ante una clave desconocida, un destino (as_target) desconocido una posición desconocida, un apilamiento sobre el panel principal o un apilamiento DEL panel principal, -2 si el componente no está creado |
of_move_panel (string as_key, string as_target, string as_position, integer ai_index) | Lo mismo, indicando el rango del panel en la pila del destino (1 = primero, 0 o menos = último). Solo una pila es una lista ordenada: el índice se ignora para POSITION_START / END / TOP / BOTTOM. Devuelve 0 una vez aplicado, -5 ante una clave desconocida, un destino (as_target) desconocido una posición desconocida, un apilamiento sobre el panel principal o un apilamiento DEL panel principal, -2 si el componente no está creado |
of_float_panel (string as_key) | Desacopla el panel en una auténtica ventana flotante desplazable y redimensionable; un panel ya desacoplado antes recupera el lugar de su ventana. Al cerrarla, el panel se vuelve a acoplar (ue_panel_docked). No el panel principal (is_main): es la zona de documento alrededor de la cual se colocan los demás, construye su propia cabecera, y no puede ser ni desprendido, ni ocultado, ni cerrado. Sigue ue_panel_floated, como para el botón de la cabecera, el doble clic en la cabecera o en la pestaña, o Desacoplar en el menú del clic derecho. Devuelve 0 una vez aplicado, -5 ante una clave desconocida, el panel principal o un panel OCULTO, -2 si el componente no está creado |
of_close_panel (string as_key) | Cierra el panel como su cruz: queda oculto (ib_visible = true lo vuelve a mostrar) y sigue ue_panel_closed. Con ib_veto_close = true, se plantea primero ue_panel_closing. Devuelve 0 una vez aplicado, -4 cuando su ue_panel_closing ha rechazado (el panel se queda), -5 ante una clave desconocida, el panel principal, un panel oculto o no cerrable (ib_closable = false), -2 si el componente no está creado |
of_notify_panel (string as_key) | Señala contenido nuevo: si el panel no está visible, su pestaña muestra un contador de elementos no vistos, que se borra al seleccionarlo. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado |
of_clear_notify (string as_key) | Borra ese contador sin mostrar el panel. Seleccionar la pestaña era la única otra forma, lo cual es incorrecto cuando su código sabe que el contenido en sí ha desaparecido. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado |
of_remove_panel (string as_key) | Retira el panel y devuelve el control a su ventana de origen, en su sitio, con su tamaño y con la visibilidad que tenía antes de of_add_panel. Devuelve 0 una vez aplicado, -5 ante un argumento no válido (clave vacía, dirección errónea), -2 si el componente no está creado |
of_get_layout ( ) | Devuelve la disposición actual (árbol de divisiones, proporciones, pestañas, visibilidad, paneles flotantes y lugar de su ventana) en forma de cadena, para almacenarla en un archivo, una base de datos o el registro |
of_set_layout (string as_json) | Restaura una disposición obtenida con of_get_layout. Los paneles deben haberse vuelto a crear antes de la llamada; los ausentes de la disposición — o todos, si no conoce ninguno — se unen a un grupo junto a los demás, nunca al panel principal. Los paneles flotantes recuperan su ventana en su lugar, devuelta a una pantalla si la suya ya no está; una disposición que no nombra ningún panel principal conserva el actual. Devuelve 0 una vez aplicado, -5 ante un texto que no es una disposición (no es JSON, o sin tree): el dock queda entonces tal cual, -2 si el componente no está creado |
of_panel (string as_key) | Handle n_pbt_dock_panel del panel (creado en el primer acceso) |
of_refresh_panel (string as_key) | Actualiza la representación de un panel construido fuera de pantalla, sin parpadeo. Devuelve 0, -5 si la clave no designa ningún panel, -2 si el componente no está creado |
of_relayout ( ) | Recalcula y vuelve a publicar todas las zonas para que los controles alojados se reposicionen. Devuelve 0 una vez aplicado, -2 si el componente no está creado |
of_reset ( ) | Vacía el contenedor: cada control alojado vuelve a su ventana de origen, los handles de paneles se liberan y la disposición memorizada se borra. Devuelve 0 una vez aplicado, -2 si el componente no está creado |
of_set_redraw (boolean) | Agrupa una ráfaga de modificaciones en una sola 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 |
Eventos #
| Evento | Se activa cuando |
|---|---|
ue_panel_selected (string as_key) | Un panel acoplado pasa al primer plano de su grupo: clic en su pestaña o su cabecera, flechas de la tira de pestañas, o of_select_panel (una orden de su código también lo lanza) |
ue_panel_closed (string as_key) | Se cierra un panel: la cruz de su cabecera, Cerrar o Cerrar los demás en el menú del clic derecho sobre la cabecera o la pestaña, la cruz de un panel deslizante, u of_close_panel (una orden de su código también lo lanza). El panel queda oculto (ib_visible = true lo vuelve a mostrar); con ib_veto_close = true, solo una vez que ue_panel_closing lo ha permitido |
ue_panel_closing (string as_key) → boolean | Cancelable, planteado antes de que se cierre un panel — la cruz de su cabecera, Cerrar o Cerrar los demás en el menú (una pregunta por panel), la cruz de un panel deslizante, u of_close_panel —, y solo cuando ib_veto_close = true (desactivado por defecto). Devuelva false para mantener abierto el panel (trabajo sin guardar): ue_panel_closed no sigue, y of_close_panel devuelve -4 |
ue_panel_pinned (string as_key, boolean ab_pinned) | Un panel se fija (true) o se desfija en ocultación automática (false): botón de chincheta de la cabecera, botón de acoplar del panel deslizante, o ib_pinned asignado por su código (una orden también lo lanza) |
ue_panel_floated (string as_key) | Un panel se desacopla en ventana flotante: botón de la cabecera, doble clic en la cabecera o en la pestaña, Desacoplar en el menú del clic derecho, u of_float_panel (una orden de su código también lo lanza). Una disposición restaurada (of_set_layout) no lanza nada |
ue_panel_docked (string as_key) | El USUARIO vuelve a acoplar un panel flotante: cierra su ventana, o hace doble clic en su barra de título — el panel recupera su lugar |
ue_layout_changed (string as_json) | La disposición ha cambiado (arrastre, redimensionamiento, acoplamiento, una ventana flotante movida o redimensionada, pero también un panel cerrado, ocultado, seleccionado, renombrado, u otro panel principal). El parámetro lleva la nueva disposición, lista para guardarse |
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) |
Con el ratón #
Además de arrastrar pestañas y divisores, tres gestos actúan sobre un panel — nunca sobre el panel principal:
| Gesto | Efecto |
|---|---|
| Doble clic en la cabecera de un grupo o en una pestaña | Desacopla el panel (para la cabecera: el panel activo del grupo) en una ventana flotante — ue_panel_floated |
| Doble clic en la barra de título de una ventana flotante | Vuelve a acoplar el panel en su lugar, como la cruz de la ventana — ue_panel_docked |
| Clic derecho en la cabecera o en una pestaña | Menú Desacoplar / Cerrar / Cerrar los demás (los demás paneles cerrables del mismo grupo). Una entrada que no puede hacer nada aparece atenuada; con ib_veto_close = true, cada cierre plantea ue_panel_closing — una pregunta por panel |
Con el teclado #
El contenido de un panel es un verdadero control PowerBuilder: allí el teclado pertenece a su código, como en cualquier ventana. De lo que se encarga el componente es de su propio armazón — encabezados, pestañas, divisores:
| Tecla | Efecto |
|---|---|
| Flechas sobre una pestaña | Pasan al panel anterior / siguiente del grupo y lo seleccionan. Una banda de pestañas es una sola parada de tabulación |
| Inicio / Fin sobre una pestaña | Primer / último panel del grupo |
| Flechas sobre un divisor | Desplazan la separación un 2 %, únicamente en el eje del divisor |
| Re Pág / Av Pág sobre un divisor | Lo mismo, en pasos del 10 % |
| Esc | Cierra el panel deslizante abierto desde un botón de borde |
Un divisor es un separator enfocable que anuncia su posición; los botones del encabezado (desacoplar, ocultar, cerrar) llevan un nombre, y el panel activo de un grupo está marcado con aria-selected. Un desplazamiento con el teclado se informa en ue_layout_changed exactamente igual que un arrastre con el ratón.
Ejemplos #
Una ventana al estilo de un IDE #
// event open : cada contenido es un control PB real colocado en la ventana
uo_dock.of_add_panel(/*key*/ "document", /*position*/ "", /*relative_to*/ "", /*size*/ 0, /*title*/ "Documento", /*content*/ uo_editor)
uo_dock.of_add_panel(/*key*/ "explorer", /*position*/ uo_dock.POSITION_START, /*relative_to*/ "document", /*size*/ 260, /*title*/ "Explorador", /*content*/ uo_tree)
uo_dock.of_add_panel(/*key*/ "properties", /*position*/ uo_dock.POSITION_END, /*relative_to*/ "document", /*size*/ 300, /*title*/ "Propiedades", /*content*/ uo_props)
uo_dock.of_add_panel(/*key*/ "output", /*position*/ uo_dock.POSITION_BOTTOM, /*relative_to*/ "document", /*size*/ 200, /*title*/ "Salida", /*content*/ uo_console)
// Un segundo panel apilado como pestana sobre "properties"
uo_dock.of_add_panel(/*key*/ "help", /*position*/ uo_dock.POSITION_STACK, /*relative_to*/ "properties", /*size*/ 0, /*title*/ "Ayuda", /*content*/ uo_help)
// El documento es la zona central
uo_dock.is_main = "document"
Memorizar y restaurar la disposición del usuario #
// event close de la ventana : guardar lo que el usuario ha organizado
string ls_layout
ls_layout = uo_dock.of_get_layout()
of_save_setting(/*name*/ "main_dock", /*value*/ ls_layout)
// event open : VOLVER A CREAR primero los paneles, restaurar despues
string ls_layout
// Primero los paneles : las llamadas of_add_panel anteriores
of_create_panels()
// Luego la disposicion guardada en el ultimo cierre, si la hay
ls_layout = of_read_setting(/*name*/ "main_dock")
if ls_layout <> "" then uo_dock.of_set_layout(/*json*/ ls_layout)
El orden es obligatorio:
of_set_layoutno crea ningún panel, solo recoloca los que ya existen.
Seguir los cambios de forma continua #
// event ue_layout_changed de uo_dock : (string as_json)
// Guardado inmediato, sin esperar al cierre de la ventana.
of_save_setting(/*name*/ "main_dock", /*value*/ as_json)
Controlar un panel mediante su handle #
// Local variables
n_pbt_dock_panel lnv_panel
// El panel de propiedades : un titulo que cuenta los cambios, plegado en su borde
lnv_panel = uo_dock.of_panel(/*key*/ "properties")
lnv_panel.is_title = "Propiedades (3 modificadas)"
lnv_panel.ib_pinned = false // se repliega en una lengueta sobre el borde
// Ocultar un panel reservado a los administradores
uo_dock.of_panel(/*key*/ "audit").ib_visible = gb_administrator
Llamar la atención sobre un panel en segundo plano #
// Un proceso en segundo plano ha escrito en la consola : avisar sin robar el foco
uo_dock.of_notify_panel(/*key*/ "output")
Reorganizar desde el código #
// Mover un panel como si el usuario hubiera arrastrado su pestana
uo_dock.of_move_panel(/*key*/ "output", /*target*/ "document", /*position*/ "bottom")
// Apilarlo como pestana sobre otro panel
uo_dock.of_move_panel(/*key*/ "help", /*target*/ "properties", /*position*/ "stack")
Desacoplar un panel en una segunda pantalla #
// Ventana flotante nativa : el usuario puede colocarla en otra pantalla
uo_dock.of_float_panel(/*key*/ "properties")
// event ue_panel_docked de uo_dock : (string as_key)
// El usuario ha cerrado la ventana flotante : el panel ha vuelto.
of_log(/*msg*/ "Panel reacoplado : " + as_key)
Cerrar correctamente un panel #
// event ue_panel_closed de uo_dock : (string as_key)
// Retirar tambien el panel del contenedor para liberar el control alojado.
uo_dock.of_remove_panel(/*key*/ as_key)
Rechazar el cierre de un panel con trabajo sin guardar #
// event open de la ventana : preguntar antes de que se cierre un panel (desactivado por defecto)
uo_dock.ib_veto_close = true
// ue_panel_closing event of uo_dock : (string as_key) returns boolean
// El editor aun tiene cambios sin guardar : su panel sigue abierto.
if as_key = "editor" then
if ib_editor_modified then return false
end if
return true
// Su codigo plantea la misma pregunta : -4 cuando se rechaza
if uo_dock.of_close_panel(/*key*/ "editor") = -4 then
st_status.Text = "Guarde el documento antes de cerrar el editor."
end if
Buenas prácticas #
- Designe siempre un panel principal con
is_main: sin zona central, el usuario puede ocultarlo todo y encontrarse ante una ventana vacía. - Guarde la disposición en
ue_layout_changeden lugar de únicamente al cerrar: así un cierre anómalo no pierde nada. of_set_layoutva después de losof_add_panel, nunca antes.- Utilice
of_notify_panelpara los procesos en segundo plano: es menos intrusivo que un cuadro de diálogo y la información permanece visible. - Un control alojado es una ventana nativa: se dibuja por encima de la capa web, ningún efecto visual del componente pasa por delante de él.
of_reset()antes de cualquier reconstrucción: sin él, los controles alojados anteriormente siguen reasignados al contenedor vaciado y reutilizar una clave falla.- Para simples páginas exclusivas, sin acoplamiento ni flotación, tab es más ligero.
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_count · of_keys_at · of_has | Recorrer lo que el componente contiene | 3.2 Los items |
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.