PBToolboxAI v5 ← Site

angulargauge — u_pbt_angulargauge #

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

Esfera: un valor leído en una escala circular — una aguja, un arco lleno o una marca en el borde, rangos de color que dicen si está bien, un objetivo, una lectura en el formato que usted elija.

▶ Verlo en vivo — Aplicación de demostración, mosaico Angular gauge : la vista previa, el código que lo produce y esta página, lado a lado.


En resumen #

Userobjectu_pbt_angulargauge
Clase de elementosn_pbt_angulargauge_range (of_range(key))
Sirve paraLeer una magnitud de un vistazo — velocidad, temperatura, grado de cumplimiento de un objetivo, mando de termostato
PrincipioUsted da una escala, un valor y rangos; las marcas, los números, los colores y la animación son cosa nuestra
FamiliaGemelo de gauge: mismos métodos, mismos eventos y, salvo la geometría, mismas propiedades — aquí los ángulos y los extremos redondeados, allí la orientación y la colocación de los rangos

Inicio rápido #

// A scale from 0 to 240, a number every 20
uo_dial.id_maximum = 240
uo_dial.id_tick_step = 20

// Three ranges of the scale, each with the tone of what it means
uo_dial.of_add_range(/*key*/ "city", /*from*/ 0, /*to*/ 130)
uo_dial.of_add_range(/*key*/ "fast", /*from*/ 130, /*to*/ 180)
uo_dial.of_add_range(/*key*/ "limit", /*from*/ 180, /*to*/ 240)
uo_dial.of_range(/*key*/ "city").is_tone = u_pbt_angulargauge.TONE_SUCCESS
uo_dial.of_range(/*key*/ "fast").is_tone = u_pbt_angulargauge.TONE_WARN
uo_dial.of_range(/*key*/ "limit").is_tone = u_pbt_angulargauge.TONE_DANGER

// The unit, and the value : the needle turns to it
uo_dial.is_unit = "km/h"
uo_dial.id_value = 96

La escala, el valor y los rangos #

La escala va de id_minimum a id_maximum (de 0 a 100 por defecto). El valor id_value se relee tal como usted lo dio: fuera de la escala se dibuja en el tope del extremo más cercano y la lectura lo escribe igualmente — un indicador que reescribiera en silencio lo que la aplicación midió mentiría dos veces. Puesto por el código no lanza ningún evento, como SetItem: ue_value_changed dice lo que hizo el usuario. NULL se ignora: el valor anterior se queda — compruebe una medida que puede faltar (GetItemNumber devuelve NULL) antes de ponerla.

Los números siguen is_format, el formato de visualización de un DataWindow (#,##0.0, $#,##0, 0% escribe la PARTE de la escala — 50 sobre 0..200 da 25 %, como la barra de progreso), con los separadores del idioma de visualización. Sin formato, la escala elige los decimales de la lectura — dos para una escala de 0 a 1, ninguno para 0 a 100 —, nunca el valor, que escribiría 43 un segundo y 42,55 el siguiente; los números de la escala toman los de su paso.

Un rango colorea una parte de la escala: su color es el que usted da, si no el de su tono (TONE_SUCCESS, TONE_WARN, TONE_DANGER, TONE_INFO = el acento del tema, TONE_NEUTRAL — un juego de colores por modo claro u oscuro), si no el de la paleta. Los rangos se superponen en el orden en que se añadieron; of_current_range() dice en cuál está el valor. Bajo una aguja son la banda; bajo un arco lleno, un anillo en su interior. Un rango contiene su principio pero no su fin: en el límite que comparten dos rangos (60 entre 0–60 y 60–85), el valor está en el que empieza ahí, sea cual sea el orden en que se añadieron; el extremo de la escala pertenece al rango que lo alcanza. El color de paleta de un rango se fija al añadirlo: quitar uno no cambia el color de los demás. Un rango entero fuera de la escala no se dibuja.

Los ángulos se cuentan en grados, 0 arriba, en el sentido de las agujas del reloj: por defecto la escala empieza en -135 (abajo a la izquierda) y cubre 270 grados — un velocímetro. ii_start_angle = -90 e ii_sweep_angle = 180 dan media esfera, dibujada el doble de grande. Una esfera es un instrumento de medida: no se invierte en una aplicación de derecha a izquierda.


Propiedades #

PropiedadTipoPor defectoFunción
is_titlestring""El título, encima de la esfera. Se admite marcado; también nombra el componente para un lector de pantalla. Sin título, lo nombra el texto simple de la información sobre herramientas (is_super_tooltip_title, si no is_tooltip), si no la palabra « Indicador » en el idioma de visualización
id_valuedouble0El valor. Se desliza a su sitio; fuera de la escala, dibujado en el tope y releído tal cual. Puesto por el código, mudo; NULL se ignora, el valor anterior se queda
id_minimumdouble0El principio de la escala. Una escala cuyo mínimo no está por debajo del máximo está vacía: ni marca, ni número, ni rango, ni indicador, ni objetivo, y of_current_range() devuelve una cadena vacía. Para invertir una escala, ib_reversed
id_maximumdouble100El final de la escala
is_formatstring""El formato de visualización de todos los números — lectura, escala, extremos de un rango —, con la sintaxis de un formato de DataWindow (#,##0.00, $#,##0, 0%), separadores del idioma de visualización. Vacío = la lectura toma los decimales de la escala (dos para 0 a 1, ninguno para 0 a 100), los números de la escala los de su paso (0,0, 0,2… 1,0)
is_unitstring""Se escribe tras el valor en la lectura (%, km/h)
ib_show_valuebooleantrueMuestra la lectura — el valor y su unidad — bajo el pivote de una aguja (bajo los números de los dos extremos en una esfera pequeña), en el centro de un arco lleno. Sin lectura, una esfera de aguja se dibuja más grande
id_tick_stepdouble0El paso entre dos marcas numeradas. 0 = elegido por la escala: un paso redondo (1, 2, 2,5 o 5 veces una potencia de diez, luego 3, 4,5 o 6) que cae en los dos extremos cuando lo hay — de 0 a 90 de 10 en 10, de −50 a 50 de 25 en 25, de 0 a 360 de 60 en 60 —, si no contado desde el mínimo (de 32 a 212 de 20 en 20). Un paso que usted da se cuenta siempre desde el mínimo; un paso que dibujaría más de 200 marcas vuelve al automático. Cada extremo lleva una marca numerada. Cuando no caben todos los números, se escribe uno de cada k para mantener un paso regular, y los dos extremos se escriben siempre. Los números toman los decimales de su paso. El paso elegido nunca es más fino que lo que escribe is_format (de 0 a 3 con el formato #,##0: 0, 1, 2, 3); un paso que usted da sigue siendo el suyo, y el formato redondea sus números. En una esfera demasiado pequeña para un círculo de números no se escribe ninguno; en un arco lleno pequeño la lectura se desplaza para conservar los dos extremos
ii_minor_ticksinteger4Marcas pequeñas entre dos numeradas (0 a 9)
ib_show_ticksbooleantrueMuestra las marcas
ib_show_labelsbooleantrueMuestra los números de la escala; en una esfera demasiado pequeña para un círculo de números no se escribe ninguno — la lectura y los rangos siguen hablando
id_targetdouble0Un objetivo — una meta, un umbral —, marcado de través sobre la banda mientras ib_show_target sea verdadero
ib_show_targetbooleanfalseMuestra la marca de id_target
is_pointerstringneedleCómo se muestra el valor (constantes POINTER_*): NEEDLE, una aguja; BAR, la banda rellena desde el mínimo — un indicador lleno, el número en el centro; MARKER, un triángulo en el borde. Desconocido = NEEDLE
il_value_colorlong-1El color del valor — la aguja, el arco lleno o la marca; -1 = el acento del tema
il_track_colorlong-1El color de la banda; -1 = un matiz del color de texto del tema
ii_thicknessinteger0El grosor de la banda, en píxeles (0 a 80, nunca más de la mitad del radio); 0 = automático: una parte del radio, mantenida entre 6 y 24 px bajo una aguja o una marca, entre 8 y 36 px para un arco lleno — una esfera grande sigue siendo una esfera. Los números de la escala (11 a 16 px) y la lectura crecen con ella
ib_reversedbooleanfalseEl máximo al principio del arco: la escala gira en sentido contrario a las agujas del reloj. Derecha y Arriba siguen girando en el sentido de las agujas: en una esfera invertida bajan el valor
ii_start_angleinteger-135Dónde empieza la escala, en grados: 0 arriba, 90 a la derecha, -90 a la izquierda (450 se relee 90)
ii_sweep_angleinteger270Cuánto del círculo cubre la escala, en grados (10 a 360). Un ángulo negativo vale su valor absoluto: para que la escala gire en el otro sentido, ib_reversed. La esfera se ajusta al espacio que ocupa el ángulo
ib_editablebooleanfalseEl usuario mueve el valor: girar la aguja alrededor del pivote, hacer clic en la esfera, flechas, Re Pág / Av Pág (diez pasos), Inicio y Fin. Un clic cerca del pivote, en la lectura o lejos de la esfera (más allá de la banda y de las marcas de al lado) no pone nada; durante un arrastre la mano puede salir de la esfera, el valor se queda en el extremo del que viene y nunca salta el hueco. Derecha y Arriba giran en sentido horario, como un mando giratorio, pase por donde pase el arco (en una esfera invertida bajan el valor). Cada gesto lanza ue_value_changed una vez — una tecla, como la mano, pone el valor de golpe, y un arrastre interrumpido (cuadro de mensaje, Alt+Tab) termina como al soltar; Esc durante un arrastre devuelve el valor (un valor escrito por su código entretanto se queda) sin pulsar el botón Cancelar de la ventana; la tecla Menú nombra el rango en el que está el valor
id_stepdouble0El paso de la mano y de las teclas; 0 = la precisión que la lectura muestra (los decimales de is_format, o los que elige la escala): en una escala de 0 a 7 la mano da 2,6, nunca un 2,61 que el usuario no ha leído; una tecla avanza una centésima de la escala, nunca menos de una cifra mostrada. Los dos extremos siguen siendo alcanzables cuando el paso no divide la escala: de 0 a 100 de 30 en 30, el valor pasa por 0, 30, 60, 90, 100
ib_track_dragbooleanfalseCon ib_editable, opcional: mientras el usuario arrastra el valor, ue_value_tracking sigue la mano — un volumen oído en directo, una vista previa redibujada. ue_value_changed sigue llegando una sola vez, al soltar; cuando un arrastre se interrumpe (Esc, ib_editable o ib_enabled puestos a false por el código), ue_value_tracking dice también el valor del que partió
ib_value_tooltipbooleantrueEl panel que nombra el rango bajo el puntero, con sus extremos. No es is_tooltip, la información sobre herramientas del componente entero. La información de un rango (su is_tooltip) se escribe en este panel, incluso en false
ib_value_follows_rangebooleanfalseOpcional: el valor — la aguja, el arco lleno o la marca — toma el color del rango en el que está (el dibujado encima si dos se solapan): rojo en la zona roja. Fuera de todo rango conserva il_value_color, si no el acento del tema. Mientras el valor se desliza, el color sigue al valor dibujado
ib_roundedbooleanfalseOpcional: extremos redondeados en la banda, el arco lleno y los rangos. Cada uno se acorta medio grosor en cada extremo para quedarse en su parte de la escala; un rango más corto que su propio grosor se convierte en un punto. Un círculo completo mantiene su banda cerrada
ib_pointer_tooltipbooleanfalseOpcional: el panel nombra también el valor bajo el ratón — en la aguja, el arco lleno o la marca — y el objetivo, con su número en el formato de la lectura. Los rangos conservan su propio panel (ib_value_tooltip)
id_origindouble0Dónde empieza el arco lleno (POINTER_BAR): un valor por debajo del origen llena en el otro sentido — una desviación, una varianza, una escala de −50 a 50 que empieza en 0. Mientras no se pone — o una vez devuelto a NULL —, el arco empieza en el mínimo y la propiedad relee el mínimo; fuera de la escala, en el extremo más cercano. El gemelo de id_origin de gauge
ib_auto_heightbooleanfalseEl componente anuncia su altura ideal y el userobject se ajusta (ue_auto_height). La anchura la dicta: media esfera es la mitad de alta
ib_enabledbooleantrueEn gris sigue mostrando su valor pero deja de responder: ni clic, ni teclas, ni arrastre, y sale del orden de tabulación
ib_animatedbooleantrueEl valor se desliza a su sitio, fotograma a fotograma — la aguja gira —, y llega desde el principio de la escala (su mínimo) cuando el componente se dibuja. Una propiedad cambiada durante el deslizamiento (título, unidad, color, tamaño) no lo corta. Un puesto configurado para reducir las animaciones nunca anima; la mano del usuario nunca se anima; un valor puesto bajo of_set_redraw(false) se desliza al reanudar
ii_anim_durationinteger450Duración del deslizamiento, en milisegundos (0 a 5000)
is_anim_easingstringease-outLa curva del deslizamiento (constantes EASING_*, los nombres de LiveCharts2): back-out se pasa y vuelve, bounce-out rebota, elastic-out restalla. Un exceso se queda en la escala. Desconocido = ease-out
is_theme_stylestring""Estilo visual del componente (constantes THEME_STYLE_*); vacío = el de la aplicación, seguido en cada cambio
is_theme_modestring""Variante clara u oscura (constantes THEME_MODE_*); vacío = la de la aplicación, seguida en cada cambio
il_theme_accentlong-1Color de acento de este componente (-1 = acento del tema)
is_tooltipstring""Información sobre herramientas simple al pasar por encima del componente
is_super_tooltip_titlestring""Título de la información enriquecida (tiene prioridad sobre is_tooltip)
is_super_tooltip_textstring""Texto de la información enriquecida (se acepta marcado enriquecido)
is_super_tooltip_imagestring""Imagen de la información enriquecida

Métodos #

MétodoFunción
of_add_range ( string as_key, double ad_from, double ad_to { , long al_color } )Añade un rango de color de ad_from a ad_to (unos extremos escritos al revés se dibujan al derecho); la sobrecarga con color lo fija, si no el tono y luego la paleta. Devuelve 0 una vez añadido, -5 si la clave está vacía, contiene / o `, o ya existe (añadir nunca reemplaza), -2` si el componente no está creado. El color de paleta se da al añadir: quitar un rango no cambia el color de los demás
of_clear_ranges ( )Quita todos los rangos — sus manejadores se van con ellos —, el valor y los ajustes se quedan. Devuelve 0 una vez hecho, -2 si el componente no está creado
of_current_range ( )La clave del rango en el que está el valor ahora, una cadena vacía si no está en ninguno o si la escala está vacía. Donde dos rangos se solapan, gana el último añadido — el dibujado encima. Un rango oculto no cuenta; un rango que el modo demo no dibuja sí cuenta: lo que lee este método nunca depende de la licencia. Un rango contiene su principio pero no su fin: en el límite común de dos rangos, el valor está en el que empieza ahí, sea cual sea el orden en que se añadieron; el extremo de la escala pertenece al rango que lo alcanza. Un rango fuera de la escala (no dibujado) también cuenta
of_range ( string as_key )El manejador n_pbt_angulargauge_range de un rango, para leer o cambiar sus extremos, color, tono, nombre o visibilidad
of_remove_range ( string as_key )Quita un rango; su manejador se destruye. Devuelve 0 una vez quitado, -5 si ningún rango tiene esa clave, -2 si el componente no está creado
of_reset ( )Vacía los rangos — manejadores incluidos — y devuelve todas las propiedades a su valor de origen. Devuelve 0 una vez hecho, -2 si el componente no está creado

Eventos #

EventoSe lanza cuando
ue_value_changed (double ad_value)Solo con ib_editable: el usuario ha movido el valor — una vez por arrastre (al soltar, o cuando el arrastre se interrumpe: un cuadro de mensaje abierto bajo la mano, Alt+Tab), por clic, por tecla. Un valor puesto por su código no lo lanza, ni siquiera durante un arrastre. Para seguir la mano durante el arrastre: ib_track_drag
ue_value_tracking (double ad_value)Solo con ib_editable e ib_track_drag, mientras el usuario arrastra el valor: cada nueva posición de la mano, y luego — cuando el arrastre se interrumpe: Esc, o ib_editable / ib_enabled puestos a false por su código — el valor del que partió. El valor final sigue llegando una vez en ue_value_changed
ue_range_clicked (string as_key)Se hizo clic en un rango — o se validó con Intro o Espacio en el rango del teclado (Tab, luego las flechas). No en un componente editable: allí un clic pone el valor
ue_range_rclicked (string as_key, long al_x, long al_y)Clic derecho en un rango, o tecla Menú (Mayús+F10) en el rango del teclado — en un componente editable, el rango en el que está el valor: el lugar donde abrir un menú; al_x, al_y: dónde abrir el menú, en píxeles de pantalla — el puntero, o con el teclado (tecla Menú, Mayús+F10) el centro del rango; un contextmenu se abre allí tal cual (uo_menu.of_show(al_x, al_y))
ue_auto_height (long al_height)Con ib_auto_height: el userobject acaba de redimensionarse a su altura ideal

Propiedades de elemento #

Un rango se designa por su clave: uo_dial.of_range("warn").is_tone = u_pbt_angulargauge.TONE_WARN.

PropiedadTipoPor defectoFunción
id_fromdouble0El principio del rango, en la escala
id_todouble0Su final. Unos extremos al revés se dibujan al derecho y se releen tal cual
il_colorlong-1Su color; -1 = el de su tono, si no el de la paleta. Los colores de elemento heredados (il_accent, il_back_color, il_text_color y sus variantes al pasar el ratón) no tienen efecto sobre un rango: deciden il_color e is_tone
is_tonestring""Su tono (constantes TONE_* del componente): SUCCESS, WARN, DANGER, INFO (el acento del tema), NEUTRAL — un juego por modo claro u oscuro, sin importar mayúsculas o minúsculas. il_color prevalece; un tono desconocido equivale a ningún tono
is_labelstring""Su nombre, en el panel bajo el puntero y para un lector de pantalla; vacío = su clave. Se admite marcado
ib_visiblebooleantrueOculta el rango sin quitarlo; como una casilla, no lanza ningún evento
is_tooltipstring""Su información sobre herramientas, escrita en el panel que nombra el rango bajo el puntero — nunca una segunda burbuja. Se admite marcado
is_super_tooltip_titlestring""El título en negrita de su información, escrito en el panel bajo su nombre
is_super_tooltip_textstring""El texto de su información, en el panel. Se admite marcado
is_super_tooltip_imagestring""Una imagen en la cabecera de su información, en el panel (ruta del bundle, ruta absoluta o resources.dll:nombre)

Ejemplos #

Un panel que vive #

// Timer event of the window : the needle turns to each new reading
uo_dial.id_value = ids_monitor.GetItemNumber(1, "speed")

// Which range is it in now ? An alert outside the good one
st_alert.visible = (uo_dial.of_current_range() <> "city")

Un medio indicador lleno #

// The band fills from the minimum, the number in the middle
uo_dial.is_pointer = u_pbt_angulargauge.POINTER_BAR

// From the left, over half a circle : the upper half
uo_dial.ii_start_angle = -90
uo_dial.ii_sweep_angle = 180

// A scale from 0 to 1, written as a percentage
uo_dial.id_maximum = 1
uo_dial.is_format = "0%"
uo_dial.id_value = 0.72

Una desviación en torno a cero #

// A scale centred on zero : the filled arc starts at 0, not at the minimum
uo_dial.is_pointer = u_pbt_angulargauge.POINTER_BAR
uo_dial.id_minimum = -50
uo_dial.id_maximum = 50
uo_dial.id_origin = 0

// Below the budget, the arc fills to the left of 0
uo_dial.id_value = -18

Un valor que el usuario ajusta #

// The user moves the value, by steps of 5
uo_dial.ib_editable = true
uo_dial.id_step = 5

// Event ue_value_changed of uo_dial : apply what the user chose
ii_level = Integer(ad_value)

Un volumen ajustado en directo #

// The user drags the value, and the sound follows the hand
uo_dial.ib_editable = true
uo_dial.ib_track_drag = true

// Event ue_value_tracking of uo_dial : the volume heard while the hand moves
inv_player.ii_volume = Integer(ad_value)

// Event ue_value_changed of uo_dial : the volume kept when the hand lets go
ii_saved_volume = Integer(ad_value)

Un indicador moderno #

// A filled arc with round ends, in the colour of the zone it is in
uo_dial.is_pointer = u_pbt_angulargauge.POINTER_BAR
uo_dial.ib_rounded = true
uo_dial.ib_value_follows_range = true

// The goal, and its number under the mouse
uo_dial.id_target = 85
uo_dial.ib_show_target = true
uo_dial.ib_pointer_tooltip = true
uo_dial.id_value = 74

Un menú en un rango #

// Event ue_range_rclicked of uo_dial : remember the range, then open the menu
// at the pointer of the window
is_menu_range = as_key
m_range.PopMenu(/*xlocation*/ w_main.PointerX(), /*ylocation*/ w_main.PointerY())

Una imagen de la esfera para un informe #

// The dial as it is on screen, title and readout included, to a PNG file
uo_dial.of_save_as_png(/*path*/ "C:\Reports\speed.png")

// The same, printed into a PDF file without any dialog
uo_dial.of_print_to_pdf(/*path*/ "C:\Reports\speed.pdf")

Buenas prácticas #


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.

MiembrosFunciónDetallado en
of_count · of_keys_at · of_hasRecorrer lo que el componente contiene3.2 Los items
of_resetPoner el componente a cero3.6 Poner un componente a cero: of_reset()
of_register_shortcut · of_clear_shortcutsAtajos de teclado del componente3.5 Los atajos de teclado
of_is_created · of_is_ready · of_get_last_errorSi ha nacido, si está listo, qué ha fallado3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar el render como imagen3.8 Exportar la representación como imagen
of_set_redrawAgrupar los cambios en un solo repintado3.10 Buenas prácticas
of_preload_iconsIconos mostrados sin retardoVisualización instantánea: of_icon
of_set_translationTraducir una etiqueta del componente5.2 Adaptar una etiqueta: of_set_translation
of_focus_webviewDar el foco al componente6.4 Teclado y foco
of_print · of_print_to_pdfImprimir, o escribir un PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar una propiedad por su nombre3.1 El motor de propiedades
is_accessible_name · is_accessible_descriptionEl nombre y la descripción que dice un lector de pantalla3.4 Propiedades y eventos opcionales

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.

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