PBToolboxAI v5 ← Site

chartcartesian — u_pbt_chartcartesian #

← Riferimento dei componenti · Sommario della guida

Grafico cartesiano: colonne, barre, linee, aree e nuvole di punti, su un asse di categorie e uno o due assi di valori. Il tipo si imposta per serie.

▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Cartesian chart : l'anteprima, il codice che lo produce e questa pagina, affiancati.


In breve #

Userobjectu_pbt_chartcartesian
Classe di elementin_pbt_chartcartesian_series (of_item(key)) · n_pbt_chartcartesian_axis (of_axis(axis))
Serve aConfrontare valori lungo un asse — mesi, prodotti, regioni
PrincipioVoi ponete le categorie poi le serie; le scale, la griglia e l'animazione sono affar nostro

Avvio rapido #

// Local variables
string ls_months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun"}
double ld_sales[] = {420, 510, 480, 620, 700, 660}

// The categories FIRST : they fix how many values a series carries
uo_chart.of_set_categories(/*labels*/ ls_months)
uo_chart.of_add_series(/*key*/ "sales", /*label*/ "Revenue", /*type*/ u_pbt_chartcartesian.TYPE_BAR, /*values*/ ld_sales)

Il tipo appartiene alla SERIE, non al componente #

È la decisione da cui discende tutto il resto. Un componente per tipo — uno per le barre, uno per le linee — non può mai produrre un combinato: barre sormontate da una linea di obiettivo, su un secondo asse. Ed è proprio la forma più richiesta di un cruscotto.

Qui c'è un solo componente, e ogni serie porta il suo is_type (TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER, TYPE_STEPLINE). Cambiare il tipo di una serie non tocca le altre.

ib_secondary mette una serie sul secondo asse dei valori. È ciò che permette a un numero di ordini e a un fatturato di convivere: senza, una delle due è una linea piatta a filo dell'asse.

of_set_categories viene prima delle serie: il loro numero fissa quanti valori ogni serie deve portare.

// Local variables
double ld_target[] = {400, 500, 550, 600, 680, 720}

// Bars and a line in the SAME chart : the type belongs to the series
uo_chart.of_add_series(/*key*/ "target", /*label*/ "Target", /*type*/ u_pbt_chartcartesian.TYPE_LINE, /*values*/ ld_target)

// And its own scale, when the two do not share a unit
uo_chart.of_item(/*key*/ "target").ib_secondary = true

Proprietà #

ProprietàTipoPredefinitoRuolo
is_titlestring""Titolo del grafico, mostrato sopra
ib_show_legendbooleantrueMostra la legenda. Cliccare una voce nasconde la sua serie — il modo più economico di confrontare due serie su cinque
is_legend_locationstringbottomDove va la legenda (costanti LEGEND_*): sopra o sotto il tracciato, oppure accanto — START/END la mettono in colonna su un lato, e il tracciato le cede lo spazio. START/END sono logiche: seguono il senso di lettura. Una posizione sconosciuta vale il basso, e si rilegge così
ib_show_gridbooleantrueLe righe di sfondo, a ogni valore tondo. Senza, resta leggibile solo la forma, mai un valore
ib_value_tooltipbooleantrueIl pannello dei valori: quando il mouse passa su una categoria, tutte le serie e il loro valore lì, in una volta, e un mirino segna la colonna. Non è is_tooltip (ereditato), che è il tooltip dell'intero componente — questo segue il puntatore e dice di cosa è fatto il grafico. Ogni serie scrive la sua riga con il proprio is_label_format; un valore assente non ha riga. Il tooltip di una serie (il suo is_tooltip) è scritto in questo pannello, sotto la riga della serie puntata, anche a false
is_orientationstringverticalColonne o barre (costanti ORIENTATION_*). Ruota tutto il sistema di riferimento, linee e aree comprese
ib_stackedbooleanfalseImpila le serie di barre invece di affiancarle; le serie di aree si impilano tra loro — mai le barre con le aree. Una linea non si impila mai: dice un livello. Le barre del secondo asse formano la loro pila, accanto a quella dell'asse principale
is_stack_modestringvalueSomma o quota (costanti STACK_*). In percentage ogni pila è portata a 100: l'asse legge allora quote, non totali — fino a -100 quando alcune quote sono negative. Non significa nulla fuori dall'impilamento
ib_enabledbooleantrueIn grigio: il componente continua a mostrare ciò che mostra — un grafico senza dati non è la stessa cosa di un grafico che l'applicazione ha spento — ma smette di rispondere: né clic, né tasti, né voci di legenda, ed esce dall'ordine di tabulazione. true per impostazione predefinita
ib_animatedbooleantrueIl grafico arriva animato: le forme salgono dall'asse — l'intero grafico quando passa da vuoto a disegnato e quando si aggiunge una serie. I nuovi valori scivolano al loro posto, e una forma che un grafico in diretta aggiunge (of_append_values) sale da sola: un cruscotto che si aggiorna può tenere l'animazione. Una postazione impostata su meno movimento non anima, a meno che l'applicazione non insista (PBT_SetAnimationPolicy, sezione 4.8)
ii_anim_durationinteger450Durata di quell'arrivo, in millisecondi (da 0 a 5000)
is_anim_easingstringease-outCurva dell'arrivo (costanti EASING_*): linear, ease-out, back-out che supera e torna, bounce-out che rimbalza, elastic-out che scatta. È lei a dare carattere all'animazione
ii_anim_delayinteger0Sfasamento tra due serie all'arrivo, in millisecondi (da 0 a 1000). Entrano allora una dopo l'altra invece di comparire insieme, il che dà al grafico il suo senso di lettura. 0 = tutte insieme
is_formatstring""Il formato di tutti i numeri che il grafico scrive — assi dei valori, etichette e pannello dei valori — nella sintassi di un formato DataWindow: #,##0.00, $#,##0, #,##0 "unità", sezioni positivo;negativo;zero. I separatori sono quelli della lingua di visualizzazione. Un asse può portare il suo (of_axis(AXIS_VALUE2).is_format), che prevale su questo. Vuoto (o un formato non numerico) = il numero così com'è, al millesimo
is_theme_stylestring""Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio
is_theme_modestring""Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio
il_theme_accentlong-1Colore di accento di questo componente (-1 = accento del tema)
is_tooltipstring""Descrizione comando semplice mostrata al passaggio sul componente
is_super_tooltip_titlestring""Titolo della descrizione arricchita (prevale su is_tooltip)
is_super_tooltip_textstring""Testo della descrizione arricchita (markup ricco accettato)
is_super_tooltip_imagestring""Immagine della descrizione arricchita

Metodi #

MetodoRuolo
of_set_categories ( string as_labels[] )Le etichette dell'asse delle categorie — testo: un tag di markup al loro interno viene tolto, così l'asse, il pannello e #x# dicono la stessa cosa. Da chiamare prima delle serie. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_set_value_labels ( string as_labels[] )Etichette sull'asse dei valori. Vuoto — il caso normale — quell'asse porta numeri. Riempito, porta fasce come l'asse delle categorie: il riquadro a due categorie in cui si disegna una mappa di calore. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_get_value_labels ( ref string as_labels[] )Riempie as_labels[] con ciò che l'asse dei valori porta ora e restituisce il numero. Zero = porta numeri; un'etichetta che contiene `` si rilegge intera
of_get_categories ( ref string as_labels[] )Riempie as_labels[] con le categorie che il grafico porta ora — dopo che of_append_categories ha tolto le più vecchie, dopo che of_from_datastore le ha lette — e restituisce il loro numero
of_get_last_error ( )Perché l'ultima chiamata è stata rifiutata (un ruolo di of_map che le righe non hanno, un limite NULL, una posizione fuori da una serie…), o quante righe l'ultimo of_from_datastore ha scartato e perché; altrimenti l'ultimo errore della DLL, come per ogni componente
of_add_heat_series ( string as_key, string as_label, long al_x[], long al_y[], double ad_weight[] )Una mappa di calore: una cella per coppia (categoria, etichetta di valore), colorata dal suo peso. al_x è il rango della categoria e al_y quello dell'etichetta, entrambi da 1 — i ranghi di un array PowerScript, che un doppio ciclo scrive senza calcoli. Impostare prima le due liste. Un peso NULL è una cella vuota: lì non si disegna, non si etichetta né si clicca nulla. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o `, o è già presa, -2` se il componente non è creato
of_add_ohlc_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Una serie OHLC: l'intervallo dal minimo al massimo, un trattino a sinistra per l'apertura e uno a destra per la chiusura. Quattro numeri per punto, e l'asse si legge sul massimo e sul minimo — gli altri due vi stanno dentro per costruzione. I quattro array sono troncati al più corto. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o `, o è già presa, -2` se il componente non è creato
of_add_candle_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Gli stessi quattro numeri, disegnati a candele: uno stoppino dal minimo al massimo e un corpo pieno fra apertura e chiusura. Un doji — apertura uguale alla chiusura — conserva un pixel di corpo, per restare una linea che l'occhio ritrova. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o `, o è già presa, -2` se il componente non è creato
of_set_series_ohlc ( string as_key, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Nuove quotazioni per una serie finanziaria già tracciata. Ciò che of_set_series_values è per una serie di valori. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se non è finanziaria, -2 se il componente non è creato
of_get_series_ohlc ( string as_key, ref double ad_open[], ref double ad_high[], ref double ad_low[], ref double ad_close[] )Riempie i quattro array con ciò che la serie porta ora e restituisce il numero di punti. Una serie non finanziaria risponde 0
of_add_series ( string as_key, string as_label, string as_type, double ad_values[] { , long al_color } )Aggiunge una serie con il suo tipo — TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER o TYPE_STEPLINE; l'overload prende anche il suo colore (RGB()), altrimenti sceglie la tavolozza. Un valore NULL (SetNull) è un buco: lì nulla viene disegnato, etichettato né cliccato, e una linea si interrompe. Una chiave già presa è rifiutata, mai sostituita: of_set_series_values e l'handle of_item cambiano una serie che esiste. Restituisce 0 una volta aggiunta, -5 se il tipo non è uno di questi cinque (una mappa di calore e le serie finanziarie hanno il loro metodo), o se la chiave è vuota, contiene / o `, o è già presa, -2` se il componente non è creato
of_set_series_values ( string as_key, double ad_values[] )Nuovi valori per una serie già tracciata, il resto invariato. È la chiamata di un cruscotto vivo: la serie mantiene la sua identità, quindi le forme scivolano invece di saltare. Un valore NULL è un buco. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se porta punti o quotazioni (of_set_series_points, of_set_series_ohlc li sostituiscono), -2 se il componente non è creato
of_set_point_color ( string as_key, long al_position, long al_color )Il colore di un punto — il mese che ha superato il suo limite, in rosso. al_position conta da 1; -1 (o NULL) rende al punto il colore della sua serie. Barre, marcatori di linea e punti di nuvola lo prendono, e scivola con il suo punto in un grafico in diretta. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave, se la posizione è fuori dalla serie, o per una mappa di calore o una serie finanziaria (i loro colori sono la loro scala e il loro senso), -2 se il componente non è creato
of_get_point_color ( string as_key, long al_position )Restituisce il colore (un long RGB()) che of_set_point_color — o una colonna ROLE_COLOR — ha dato al punto al_position, contato da 1, o -1 quando non ne ha (prende il colore della sua serie), e per una chiave o una posizione sconosciuta
of_append_values ( string as_key, double ad_values[], long al_max_points )Un grafico in diretta: aggiunge nuovi valori alla fine di una serie e toglie i più vecchi appena ne porta più di al_max_points (0 = nessun limite). Viaggiano solo i nuovi valori — la serie non viene rinviata a ogni tic. Da abbinare a of_append_categories. Le nuove forme salgono da sole, le altre scivolano. Aggiunga ogni serie, con lo stesso massimo di of_append_categories: una serie dimenticata si sfasa rispetto alle sue categorie. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se porta punti o quotazioni, -2 se il componente non è creato
of_append_categories ( string as_labels[], long al_max_count )Nuove categorie alla fine dell'asse, le più vecchie tolte oltre al_max_count (0 = nessun limite): le etichette di un grafico in diretta scivolano con i suoi valori. Aggiunga ogni serie con of_append_values e lo stesso massimo. Restituisce 0 una volta applicato, -2 se il componente non è creato
of_add_point_series ( string as_key, string as_label, double ad_x[], double ad_y[] { , double ad_weight[] } )Una serie posizionata per valore su entrambi gli assi: x dice dove lungo l'asse delle categorie, y a che altezza. Quell'asse smette allora di essere un asse di categorie — diventa un secondo asse di valori, con le sue graduazioni. Un overload prende un peso per punto, che dimensiona la bolla. Un peso NULL mantiene la dimensione predefinita, fuori dalla scala delle altre. Non mescoli queste serie con serie di valori su un grafico di categorie: le etichette delle categorie lasciano il posto alle graduazioni. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o `, o è già presa, -2` se il componente non è creato
of_set_series_points ( string as_key, double ad_x[], double ad_y[], double ad_weight[] )Nuovi punti per una serie che ne porta già. Ciò che of_set_series_values è per una serie di valori. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se porta valori o quotazioni, -2 se il componente non è creato
of_get_series_points ( string as_key, ref double ad_x[], ref double ad_y[], ref double ad_weight[] )Riempie i tre array con ciò che la serie porta ora e restituisce il numero di punti. Una serie di valori non risponde nulla in ad_x: non ha una x propria
of_get_series_values ( string as_key, ref double ad_values[] )Riempie ad_values[] con ciò che la serie porta ora e restituisce il numero. Lettura viva : interroga il grafico, non l'ultimo invio
of_remove_series ( string as_key )Rimuove una serie; le altre conservano il colore — preso alla loro aggiunta — e la visibilità; il suo tooltip e i suoi colori di elemento se ne vanno con essa. Il suo handle (of_item) è distrutto con essa: un of_item successivo sulla stessa chiave ne crea uno nuovo. Restituisce 0 una volta rimossa, -5 se nessuna serie porta questa chiave, -2 se il componente non è creato
of_clear ( )Svuota il grafico — serie e categorie; gli handle delle serie se ne vanno con esse. Gli assi conservano le loro impostazioni e le loro sezioni. Restituisce 0 una volta svuotato, -2 se il componente non è creato
of_from_datastore ( datastore ads )Alimenta il grafico da un DataStore (un DataWindow, un DataWindowChild: overload), come il grafico di un DataWindow: una colonna di categorie, una colonna di valori e, se c'è, una colonna di serie — una serie per ogni valore trovato, una serie con il nome della colonna dei valori senza di essa. Le righe che condividono una categoria e una serie sono sommate; le categorie arrivano nell'ordine delle righe (ordini il DataStore); una categoria senza riga è un buco. Una colonna di colore colora il suo punto. Una colonna gioca un ruolo quando ne porta il nome (category, series, value, color) o quando of_map lo dice; numeri e date della postazione sono letti correttamente. Ridato, il grafico cambia sul posto: una serie conserva tipo, colore e asse, una serie aggiunta a mano non viene mai toccata; una nuova serie è una barra. Restituisce 0 una volta caricato (le righe la cui serie non può essere una chiave vengono saltate: of_get_last_error dice quante), -5 se il DataStore non è valido o nessuna colonna gioca ROLE_CATEGORY o ROLE_VALUE (of_get_last_error dice quale), -2 se il componente non è creato
of_map ( string as_role, string as_column )Dà un ruolo a una colonna del DataStore (ROLE_CATEGORY, ROLE_SERIES, ROLE_VALUE, ROLE_COLOR) quando il suo nome non lo dice. Prima di of_from_datastore, o dopo: le righe vengono rilette. Una colonna vuota rende il ruolo alla colonna che ne porta il nome. Restituisce 0 una volta impostato, -5 se il ruolo non è una costante ROLE_ o la colonna non è una dell'ultimo DataStore, -2 se il componente non è creato
of_reload ( )Rilegge le righe del DataStore (o del DataWindow) dato a of_from_datastore — dopo un Retrieve, una modifica, un filtro — e cambia il grafico sul posto: le forme scivolano verso i nuovi valori. Restituisce 0 una volta riletto, -5 se nessun DataStore è stato dato o non è più valido, -2 se il componente non è creato
of_item ( string as_key )Restituisce la maniglia di una serie, per modificarla in seguito
of_axis ( string as_axis )Restituisce la maniglia di un asse (AXIS_CATEGORY, AXIS_VALUE, AXIS_VALUE2), per regolarlo poi. Qualsiasi altro ruolo non restituisce nessuna maniglia (IsValid() è falso)
of_add_axis_section ( string as_axis, string as_key, double ad_from, double ad_to, long al_color )Una fascia attraverso il tracciato, dietro i dati: « sotto 200 è male ». Disegnata sotto le forme, non fa mai loro concorrenza. Sull'asse delle categorie, ad_from e ad_to sono posizioni contate a partire da 1 (da 2 a 3 copre la seconda e la terza categoria). Un colore -1 (o NULL) è una velatura pallida dell'accento del tema. Restituisce 0 una volta aggiunta, -5 se l'asse non è uno degli AXIS_*, se un limite è NULL o se la chiave è vuota, contiene / o `, o è già presa su quell'asse, -2` se il componente non è creato
of_add_axis_threshold ( string as_axis, string as_key, double ad_at, long al_color, integer ai_thickness )Una linea attraverso il tracciato a un valore — un obiettivo, un limite. Stesso registro delle fasce, ma disegnata per essere vista. Un colore -1 (o NULL) la disegna nell'accento del tema. Restituisce 0 una volta aggiunta, -5 se l'asse non è uno degli AXIS_*, se un limite è NULL o se la chiave è vuota, contiene / o `, o è già presa su quell'asse, -2` se il componente non è creato
of_clear_axis_sections ( string as_axis )Rimuove tutte le fasce e tutte le soglie di un asse. Restituisce 0 una volta svuotato, -5 se l'asse non è uno degli AXIS_*, -2 se il componente non è creato
of_remove_axis_section ( string as_axis, string as_key )Rimuove una fascia o una soglia di un asse: le altre restano. Restituisce 0 una volta rimossa, -5 se l'asse non è uno degli AXIS_* o non porta alcuna sezione con questa chiave, -2 se il componente non è creato
of_reset ( )Svuota il grafico — handle delle serie e degli assi compresi — e riporta tutte le proprietà al loro valore d'origine. Restituisce 0 una volta fatto, -2 se il componente non è creato

Senza chiave (modalità demo), il grafico disegna solo le sue prime 3 serie, legenda compresa. Le altre restano nel modello — of_count, of_get_series_values e i loro handle le vedono — e la chiave impostata le mostra senza che Lei debba rinviare nulla.


Eventi #

EventoScatta quando
ue_point_clicked (string as_key, long al_index, double ad_value)Una barra, un punto, una cella o una quotazione è stata cliccata — o confermata con Invio: la chiave della serie, la posizione del punto nella serie, a partire da 1, e il suo valore — quello del punto qualunque sia la forma della serie: la y di una nuvola, il peso di una cella di calore, la chiusura di una quotazione. Alla tastiera Sinistra/Destra percorrono le categorie e Su/Giù scelgono la serie che il pannello sottolinea; una serie di punti o una mappa di calore scelta si percorre punto per punto. Un buco non ha niente da cliccare; il punto su cui è la tastiera è cerchiato, e annunciato al lettore di schermo
ue_point_rclicked (string as_key, long al_index, double ad_value, long al_x, long al_y)Un clic destro su una barra, un punto, una cella o una quotazione — o il tasto Menu (Maiusc+F10) sul punto su cui è la tastiera: la chiave della serie, la posizione da 1 e il valore, come li dà ue_point_clicked. È lì che si apre il proprio menu; al_x, al_y: dove aprire il menu, in pixel dello schermo — il puntatore, o da tastiera (tasto Menu, Maiusc+F10) il centro della forma del punto; un contextmenu vi si apre così com'è (uo_menu.of_show(al_x, al_y))
ue_rclicked ( )Un clic destro sul grafico dove nessun punto è disegnato — gli assi, il tracciato vuoto, la legenda. Un clic destro su un punto solleva invece ue_point_rclicked, mai entrambi
ue_series_toggled (string as_key, boolean ab_visible)L'utente ha nascosto o rimostrato una serie con un clic nella legenda. Ciò che il grafico mostra non è allora più ciò che l'applicazione ha inviato. Impostare ib_visible è un valore, come spuntare una casella: questo evento riporta il gesto dell'utente

L'animazione è un ingresso, non un calcolo: la geometria finale è scritta subito, e si riproduce solo l'arrivo. Un grafico mai mostrato — nato fuori schermo, in una scheda che nessuno apre — mostra dunque le barre giuste, in silenzio.


Proprietà di elemento #

ProprietàTipoPredefinitoRuolo
is_labelstring""Il nome della serie, così come la legenda lo mostra
is_typestringbarbar · line · area · scatter · stepline (costanti TYPE_*). Cambia il disegno di questa sola serie — è ciò che fa un grafico combinato. Viene preso solo un tipo della stessa famiglia: una serie di valori fra bar, line, area, scatter e stepline, una serie finanziaria fra ohlc e candle; un altro è ignorato e is_type rilegge il tipo conservato
il_colorlong-1Colore della serie (RGB()). -1 finché non ne è impostato nessuno: sceglie la tavolozza, all'aggiunta, e la serie lo conserva: rimuovere un'altra serie non la ricolora mai. Un punto può prendere il suo (of_set_point_color). I colori di elemento ereditati (il_accent, il_back_color, il_text_color e le loro varianti al passaggio) non hanno alcun effetto su una serie: decide il_color
ib_visiblebooleantruefalse nasconde una serie senza rimuoverla — la legenda conserva la via del ritorno. Come una casella di controllo, è un valore impostato: ue_series_toggled riporta il clic dell'utente nella legenda
ib_secondarybooleanfalseTraccia la serie sul secondo asse. È così che un numero e un importo vivono sullo stesso grafico
ib_data_labelsbooleanfalseScrive il valore di ogni punto accanto a esso. Spento per difetto: su cinquanta punti le etichette coprono il disegno che spiegano
is_label_formatstring""Ciò che dice ogni etichetta e ogni riga del pannello: #y# il valore, #x# la categoria (la x di una serie di punti, la colonna di una cella di calore), #v# la riga di una cella di calore, #label# il nome della serie, #open# #high# #low# #close# le quotazioni; il resto si scrive così com'è — "$#y#K". Vuoto = il valore da solo. Un'etichetta scritta dentro una barra impilata prende il nero o il bianco che la sua barra regge
id_smoothnessdouble1Solo linee e aree: quanto la linea è arrotondata, 0 = segmenti dritti, 1 = pienamente curva, come la disegna LiveCharts. Una linea a gradini lo ignora — dice che il livello ha TENUTO fino alla categoria successiva, una curva direbbe che è derivato. Una curva può passare oltre i suoi punti; è tagliata alla cornice del tracciato e non dipinge mai sulle etichette degli assi
ib_fillbooleantrueLinee e aree: la velatura sotto il tratto, fino all'asse, nella tinta della serie. È la rimozione l'atto deliberato — per una linea posata sopra altro (colonne, bande d'asse colorate) che la velatura nasconderebbe
il_fill_colorlong-1Il colore di quella velatura. -1 = quello della linea stessa
is_markerstring"circle"Linee, linee a gradini e nuvole di punti: la FORMA del marcatore su ogni punto (costanti MARKER_*: none, circle, square, triangle, diamond). Non è decorazione — due linee che si incrociano, stampate in grigio, si distinguono per il loro marcatore e per nient'altro
ii_thicknessinteger2Linee e aree: lo spessore del tratto, in pixel
il_point_countlong0Quanti punti porta questa serie — valori, coppie (x, y) o quotazioni (sola lettura). Un long: una serie in diretta può tenerne più di 32 767
il_cold_colorlong-1Solo mappe di calore: l'estremo FREDDO della scala, la lettura più leggera. -1 = la scala propria del componente, un solo blu, dal molto pallido al pieno
il_mid_colorlong-1Il punto MEDIO. Tre punti e non due: interpolare da un estremo all'altro sbiadisce il centro della scala, dove si trovano la maggior parte delle letture. -1 = il blu medio del componente
il_hot_colorlong-1L'estremo CALDO, la lettura più pesante. È quello che la legenda mostra. -1 = il blu pieno del componente
il_up_colorlong-1Solo serie finanziarie: il colore di un punto che chiude sopra la sua apertura. -1 = il verde del componente
il_down_colorlong-1E quello di un punto che chiude al di sotto. Due colori perché il verso è ciò che si legge su un tale grafico — uno solo lo nasconderebbe. -1 = il rosso del componente
is_tooltipstring""Il suo tooltip, scritto nel pannello dei valori, subito sotto la riga della serie — solo quando è la serie puntata (la sua barra, il suo punto o la sua linea sotto il mouse, o la serie scelta da tastiera con Su / Giù), mai per le altre serie della colonna, mai come seconda bolla. Una colonna sorvolata dove non è disegnata alcuna forma non punta alcuna serie. Con ib_value_tooltip a false, il pannello si apre comunque per esso, senza le cifre. Una serie di punti o una mappa di calore lo mostra nel pannello che la tastiera apre sul suo punto. Markup accettato
is_super_tooltip_titlestring""Il titolo in grassetto del suo tooltip, scritto nel pannello sotto la sua riga
is_super_tooltip_textstring""Il testo del suo tooltip, nel pannello. Markup accettato
is_super_tooltip_imagestring""Un'immagine in cima al suo tooltip, nel pannello (percorso del bundle, percorso assoluto o resources.dll:nome)

Proprietà d'asse #

ProprietàTipoPredefinitoRuolo
is_titlestring""Titolo scritto lungo l'asse. Vuoto = nessun titolo, e nessuno spazio riservato. Il tooltip e i colori di elemento che un handle d'asse eredita (is_tooltip, is_super_tooltip_*, il_accent, il_back_color, il_text_color…) non hanno alcun effetto su un asse
id_mindoubleNULLLimite inferiore imposto. Vince sui dati e non è arrotondato: chi scrive 0 vuole 0. NULL (SetNull) non impone nulla: l'asse segue di nuovo i suoi dati, e un limite libero si rilegge NULL (IsNull), mai 0. Libero, un asse dei valori include lo zero solo se una barra o un'area vi poggia: quotazioni e linee si leggono sul loro intervallo
id_maxdoubleNULLLimite superiore imposto, stessa regola. Ciò che lo supera è tagliato al bordo del tracciato
id_stepdouble0Distanza fra due linee di griglia, in valori. 0 = un passo tondo letto dall'intervallo
ii_label_rotationinteger0Rotazione delle etichette di questo asse, in gradi (da -90 a 90) — nomi di categoria o graduazioni dei valori. Dodici nomi di mesi stanno sotto un grafico solo inclinati; quando ancora non ci stanno, il grafico ne scrive uno su N, sempre il primo e l'ultimo
ib_separatorbooleantrueLe sue linee di griglia. Un asse di categorie ne ha raramente bisogno, uno di valori quasi sempre
ii_section_countinteger0Quante fasce e soglie porta questo asse (sola lettura)
ib_logarithmicbooleanfalseSolo assi dei valori: una scala logaritmica, graduata per decadi (1, 10, 100…), ogni decade della stessa altezza — per cifre che coprono più ordini di grandezza. Lo zero e i valori negativi non vi trovano posto e non sono disegnati
is_formatstring""Il formato di questo asse — le sue graduazioni, e le etichette e il pannello delle serie tracciate su di esso — sopra l'is_format del grafico: un importo da un lato, un numero di ordini dall'altro. Stessa sintassi (#,##0, 0.0 "u"…). Vuoto = il formato del grafico

Esempi #

Regolare l'animazione secondo lo schermo #

// A dashboard that refreshes every few seconds : no arrival animation
uo_chart.ib_animated = false

// Elsewhere, a slower arrival that is actually seen
uo_chart.ii_anim_duration = 1200

Aprire le righe dietro un punto #

// Event ue_point_clicked of uo_chart : the series key, the position of the
// point (from 1) and its value - enough to open the rows behind it
// Local variables
string ls_month

// On a series of values, the position IS the rank of the category
ls_month = is_months[al_index]
wf_open_orders(/*series*/ as_key, /*month*/ ls_month, /*amount*/ ad_value)

Un cruscotto che vive #

// Timer event of the window : new values for the same series, so the bars
// SLIDE to their new height instead of replaying their arrival
// Local variables
double ld_sales[]

// Read the figures, then hand them to the series already on the chart
ld_sales = wf_read_sales()
uo_chart.of_set_series_values(/*key*/ "sales", /*values*/ ld_sales)

Un grafico in diretta che scorre #

// Timer event of the window, every second : ONE new reading. Only that value
// travels ; past sixty, the oldest leaves on both the axis and the series
// Local variables
string ls_time[]
double ld_cpu[]

// The time of the reading on the axis, the reading itself in the series
ls_time[1] = String(Now(), "hh:mm:ss")
ld_cpu[1] = wf_read_cpu()
uo_chart.of_append_categories(/*labels*/ ls_time, /*max_count*/ 60)
uo_chart.of_append_values(/*key*/ "cpu", /*values*/ ld_cpu, /*max_points*/ 60)

Una misura mancante, e il grafico come immagine #

// March was not measured : a NULL value is a gap, the line is cut there
// Local variables
double ld_temp[] = {18.5, 19.2, 0, 21.4}

// The third reading is missing : NULL, not zero
SetNull(ld_temp[3])
uo_chart.of_add_series(/*key*/ "temp", /*label*/ "Temperature", /*type*/ u_pbt_chartcartesian.TYPE_LINE, /*values*/ ld_temp)

// The chart as it is on screen, title and legend included, to a PNG file
uo_chart.of_save_as_png(/*path*/ "C:\Reports\temperature.png")

Una fascia e un obiettivo sull'asse dei valori #

// A pale red band below 200 and a target line at 600, behind the bars
uo_chart.of_add_axis_section(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE, /*key*/ "low", /*from*/ 0, /*to*/ 200, /*color*/ RGB(/*red*/ 255, /*green*/ 220, /*blue*/ 220))
uo_chart.of_add_axis_threshold(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE, /*key*/ "target", /*at*/ 600, /*color*/ RGB(/*red*/ 200, /*green*/ 70, /*blue*/ 70), /*thickness*/ 2)

// The value axis says what it measures
uo_chart.of_axis(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE).is_title = "Sales ($K)"

Un grafico alimentato da un DataStore #

// The month on the category axis, one series per product category, the amounts
// of the rows summed by the chart - what the graph of a DataWindow does
// Local variables
datastore lds_sales

// Your DataStore and its Retrieve, sorted : the categories come in the order of the rows
lds_sales = create datastore
lds_sales.DataObject = "d_sales"
lds_sales.SetTransObject(SQLCA)
lds_sales.Retrieve()
lds_sales.SetSort("month A")
lds_sales.Sort()

// Which column plays which role, then ONE call reads every row
uo_chart.of_map(/*role*/ u_pbt_chartcartesian.ROLE_CATEGORY, /*column*/ "month")
uo_chart.of_map(/*role*/ u_pbt_chartcartesian.ROLE_SERIES, /*column*/ "category")
uo_chart.of_map(/*role*/ u_pbt_chartcartesian.ROLE_VALUE, /*column*/ "amount")
uo_chart.of_from_datastore(/*ads*/ lds_sales)

// Later, the rows changed (an edit, a new Retrieve) : read again IN PLACE, the
// bars slide and every series keeps what you set on it
lds_sales.Retrieve()
uo_chart.of_reload()

Il colore di un punto, un menu su un altro #

// May passed its limit : ONE bar of the series in red, the others keep their colour
uo_chart.of_set_point_color(/*key*/ "sales", /*position*/ 5, /*color*/ RGB(/*red*/ 200, /*green*/ 40, /*blue*/ 40))
// Event ue_point_rclicked of uo_chart : a menu about the point under the mouse
// Local variables
m_point lm_menu

// Remember which point the menu is about, then open it where the pointer is
is_menu_series = as_key
il_menu_position = al_index
lm_menu = create m_point
lm_menu.m_popup.PopMenu(w_main.PointerX(), w_main.PointerY())
destroy lm_menu

Buone pratiche #

Ereditato dalla base comune #

Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.

MembriRuoloDescritto in
of_count · of_keys_at · of_hasPercorrere ciò che il componente contiene3.2 Gli item
of_resetRiportare il componente a zero3.6 Riportare un componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsScorciatoie da tastiera del componente3.5 Le scorciatoie da tastiera
of_is_created · of_is_ready · of_get_last_errorSe è nato, se è pronto, cosa è fallito3.7 Diagnostica
of_save_as_png · of_save_as_jpgEsportare il rendering in immagine3.8 Esportare il rendering come immagine
of_set_redrawRaggruppare le modifiche in un solo ridisegno3.10 Buone pratiche
of_preload_iconsIcone mostrate senza ritardoVisualizzazione istantanea: of_icon
of_set_translationTradurre una dicitura del componente5.2 Adattare un'etichetta: of_set_translation
of_focus_webviewDare il focus al componente6.4 Tastiera e focus
of_print · of_print_to_pdfStampare, o scrivere un PDF6.9 Stampare
of_set_property · of_get_property · of_component_namePilotare una proprietà per nome3.1 Il motore delle proprietà
is_accessible_name · is_accessible_descriptionIl nome e la descrizione che dice un lettore di schermo3.4 Proprietà ed event opzionali

Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.

← Riferimento dei componenti · Sommario della guida