PBToolboxAI v5 ← Site

gantt — u_pbt_gantt #

← Riferimento dei componenti · Sommario della guida

gantt pianifica un progetto: a sinistra una griglia di attività (nome, inizio, fine, durata, avanzamento), a destra le loro barre su una scala temporale — giorno, settimana, mese o trimestre — con la linea di oggi (nel colore d'accento) e i giorni non lavorativi ombreggiati. Un'attività che ne contiene altre è un'attività di riepilogo, le cui date e il cui avanzamento sono calcolati; una milestone è un rombo di un giorno; una freccia collega un'attività a quella che la aspetta, e il percorso critico è disegnato in rosso. L'utente trascina una barra per spostarla, il suo bordo finale per cambiarne la fine, il piccolo triangolo sotto per il suo avanzamento; ue_task_moved, ue_task_resized e ue_progress_changed ve lo dicono. Il piano si riempie a mano o da un DataStore, che riceve le modifiche.

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


In breve #

Userobjectu_pbt_gantt
Classe di elementin_pbt_gantt_task (of_task(keys))
Serve aPianificare e seguire un progetto: fasi, attività, milestone, collegamenti, ritardi
PrincipioUn'attività si designa con il suo indirizzo ("build/design"); un'attività di riepilogo calcola le sue date e il suo avanzamento da ciò che contiene
Opzioni opt-inib_veto_changes, ib_write_back, ib_link_by_mouse, ib_critical_path, ib_show_late, ib_read_only

Avvio rapido #

// A phase : the task that holds others becomes a summary
uo_plan.of_add_task(/*keys*/ "build", /*label*/ "Build", /*start*/ "2026-11-02", /*end*/ "2026-11-20")
uo_plan.of_add_task(/*keys*/ "build/design", /*label*/ "Design", /*start*/ "2026-11-02", /*end*/ "2026-11-06")
uo_plan.of_add_task(/*keys*/ "build/code", /*label*/ "Code", /*start*/ "2026-11-09", /*end*/ "2026-11-20")

// A milestone : an instant at the end of its day, here the day the code ends
uo_plan.of_add_milestone(/*keys*/ "golive", /*label*/ "Go-live", /*date*/ "2026-11-20")

// The links : a task starts once the one before it is finished
uo_plan.of_add_dependency(/*from_keys*/ "build/design", /*to_keys*/ "build/code")
uo_plan.of_add_dependency(/*from_keys*/ "build/code", /*to_keys*/ "golive")

// What is done already
uo_plan.of_task(/*keys*/ "build/design").id_progress = 100
// event ue_task_moved of uo_plan : (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)
// Local variables
string ls_code

// The code of the task : the LAST level of its address ("build/design" -> "design")
ls_code = this.of_task(/*keys*/ as_keys).of_key()

// Save the new dates of the task
UPDATE tasks SET start_date = :as_start, end_date = :as_end WHERE code = :ls_code;

Attività, riepiloghi e milestone #

Un'attività si designa con il suo indirizzo: la sua chiave sotto il genitore, i livelli uniti da / — "build" in alto, "build/design" dentro l'attività "build", aggiunta per prima. Un'attività che ne contiene altre diventa un'attività di riepilogo: una barra sottile, le sue date vanno dal primo inizio all'ultimo giorno di ciò che contiene, il suo avanzamento è la loro media ponderata per le durate. Né l'utente né il vostro codice scrivono le sue date o il suo avanzamento: sono calcolati. La sua freccia, un doppio clic sulla sua riga o ib_collapsed la comprimono; segue ue_task_toggled.

Le date sono giorni interi, aaaa-mm-gg, la fine compresa: un'attività dal 6 al 10 dura cinque giorni, contati sul calendario. of_add_task e of_add_milestone accettano anche due date di PowerBuilder. Una milestone non ha durata: un giorno, un rombo, nessun avanzamento. Tramite l'handle di un'attività (of_task(indirizzo)), scrivere is_start la sposta (la sua durata resta), is_end cambia la sua fine, id_progress il suo avanzamento; un valore scritto dal vostro codice non solleva nulla, come SetItem. Lo stesso handle legge ciò che l'attività è ora: le sue date, la sua durata (of_duration), la sua posizione tra le sorelle a partire da 1 (of_position), il suo livello (of_level).

// The test starts three days later : it moves, its length stays
uo_plan.of_task(/*keys*/ "test").is_start = "2026-11-26"

// Read back what the summary computed
MessageBox("Build", uo_plan.of_task(/*keys*/ "build").is_end + " - " + String(uo_plan.of_task(/*keys*/ "build").id_progress) + " %")

Collegamenti e percorso critico #

of_add_dependency collega due attività con una freccia. Il tipo predefinito è fine-inizio (DEP_FS: la successiva inizia quando la precedente è finita); DEP_SS (inizio-inizio), DEP_FF (fine-fine) e DEP_SF (inizio-fine) si danno come terzo argomento. Un collegamento che le date violano — la successiva inizia troppo presto — è disegnato tratteggiato nel colore del pericolo. Un collegamento verso se stessa, tra un'attività e ciò che contiene, un collegamento già presente o uno che chiuderebbe un ciclo è rifiutato (-5). of_dependency_type legge il tipo di un collegamento, of_predecessors e of_successors dell'handle le attività collegate.

Con ib_critical_path = true, il percorso critico è disegnato nel colore del pericolo: le attività e i collegamenti senza margine, quelli che spostano la fine del progetto se slittano di un giorno. of_is_critical dell'handle lo legge, che il percorso sia disegnato o no. Con ib_link_by_mouse = true, due punti compaiono ai lati della barra sotto il puntatore: l'utente ne trascina uno su un'altra attività, e ue_link_requested dice il collegamento richiesto — il suo tipo segue il punto di partenza e la metà della barra di destinazione. Il diagramma non aggiunge nulla da sé: of_add_dependency quando la vostra applicazione è d'accordo. Un clic su una freccia solleva ue_dependency_clicked. Il margine si conta in giorni lavorativi (is_work_days): un'attività che finisce di venerdì seguita da una che inizia il lunedì non ne ha. Una milestone è un istante alla fine del suo giorno: posta il giorno in cui finisce l'attività che segue, il collegamento è rispettato, e l'attività successiva inizia il giorno dopo. Un collegamento che tocca un'attività di riepilogo vincola le attività che contiene; un riepilogo non è mai segnato, e una freccia è rossa solo tra due barre rosse. Un'attività terminata (100 %) non è mai segnata: non guida più nulla. is_project_end conta il margine fino a una scadenza invece che fino all'ultima fine.


Calendario: festivi, ritardi sui collegamenti, marcatori e attività in ritardo #

Un progetto segue un calendario. is_work_days indica i giorni lavorativi della settimana; of_add_holiday aggiunge un giorno festivo, uno alla volta — ombreggiato come un fine settimana, nominato nel tooltip del suo giorno alla scala giorno, non conta né nel margine del percorso critico né in un ritardo. Un collegamento può portare un ritardo in giorni lavorativi: of_add_dependency("design", "build", DEP_FS, 2) lascia due giorni lavorativi tra la fine dell'una e l'inizio dell'altra (un'asciugatura, una consegna); negativo, è un anticipo. La regola della freccia e il percorso critico lo contano, of_dependency_lag lo rilegge, un DataStore lo scrive dopo il tipo ("12:fs+2"). of_add_marker traccia un marcatore verticale alla fine di un giorno — una scadenza contrattuale, la fine di uno sprint — con la sua etichetta in alto. Infine, con ib_show_late = true, un'attività in ritardo — il suo ultimo giorno è passato (is_today) e non è finita — è disegnata in ambra tratteggiata; of_is_late() del suo handle e il campo {late} dei modelli lo dicono in ogni caso.

// The public holidays of the year : days off, never float
uo_plan.of_add_holiday(/*date*/ "2026-11-11", /*label*/ "Armistice Day")
uo_plan.of_add_holiday(/*date*/ "2026-12-25", /*label*/ "Christmas")

// The paint dries two working days before the second coat
uo_plan.of_add_dependency(/*from_keys*/ "paint", /*to_keys*/ "second_coat", /*type*/ u_pbt_gantt.DEP_FS, /*lag*/ 2)

// The contractual deadline, in red
uo_plan.of_add_marker(/*key*/ "deadline", /*date*/ "2026-12-18", /*label*/ "Contract", /*color*/ RGB(/*red*/ 196, /*green*/ 43, /*blue*/ 28))

// The tasks behind schedule, in amber
uo_plan.ib_show_late = true

Ciò che l'utente cambia #

L'utente trascina una barra per spostare l'attività, per giorni interi (ue_task_moved), il suo bordo finale per cambiarne la fine (ue_task_resized), il piccolo triangolo sotto la barra per il suo avanzamento (ue_progress_changed); un fumetto mostra le date o la percentuale durante il trascinamento, Esc annulla. Da tastiera, Ctrl + Sinistra / Destra sposta l'attività selezionata di un giorno e Ctrl + Maiusc + Sinistra / Destra ne cambia la fine. Gli eventi arrivano con l'attività già al suo posto. Solo un gesto li solleva: una data scritta dal vostro codice è muta, come SetItem. Un'attività di riepilogo non si trascina, né un'attività o un diagramma ib_read_only.

Con ib_veto_changes = true, ue_task_changing è posto prima di ciascuna di queste tre modifiche, con le date e l'avanzamento che l'attività prenderebbe: restituire FALSE la lascia com'era. Canc sull'attività selezionata solleva ue_delete_requested: il diagramma non toglie nulla, of_remove_task quando la vostra applicazione è d'accordo.


Scala, griglia e disposizione #

La scala (is_scale) si sceglie nella barra degli strumenti (ib_toolbar, con il pulsante Oggi), con Ctrl + rotellina — il giorno sotto il puntatore resta sotto il puntatore — o dal vostro codice; segue ue_scale_changed. Alle scale giorno e settimana, i giorni non lavorativi (is_work_days) sono ombreggiati. La griglia mostra le colonne di is_columns, nel loro ordine, con le date scritte secondo is_date_format; l'utente trascina la linea tra griglia e diagramma (ii_grid_width) e il bordo di un'intestazione di colonna per la sua larghezza. Ciò che ha sistemato — la scala, le larghezze, i riepiloghi compressi — si legge con of_get_layout, si restituisce con of_set_layout, e ogni cambiamento solleva ue_layout_changed con la disposizione intera: salvatela, restituitela al prossimo avvio.


Il testo delle barre e dei tooltip #

Il testo accanto a ogni barra è scritto da un modello, is_bar_template ("{label}" per impostazione predefinita, vuoto per nessuno), e il tooltip di una barra da is_tooltip_title_template e is_tooltip_template: testo formattato con tag dove {owner} è un campo dell'attività — uno dei vostri (of_set_field), una colonna del DataStore da cui proviene, o un campo predefinito (label, key, keys, start, end, duration, days, progress, percent, milestone, summary, critical, late, level, parent). {end:d mmm} scrive una data con i simboli d dd ddd dddd m mm mmm mmmm yy yyyy, {?owner}…{/owner} mantiene un pezzo quando il campo dice qualcosa, {!owner}…{/owner} quando non dice nulla, {x:raw} mantiene un valore come tag, {{ }} sono parentesi graffe. {label} e {parent} sono tag, come nella griglia; ogni altro valore è mostrato così com'è, mai letto come tag. Un nome di campo predefinito non è mai vostro: of_set_field lo rifiuta, e una colonna del DataStore con quel nome è nascosta da esso. Un'attività con un proprio tooltip (is_tooltip del suo handle) mostra quello.

// Who does what : a field of our own on a task
uo_plan.of_set_field(/*keys*/ "build/design", /*field*/ "owner", /*value*/ "Ada")

// Beside each bar : the label, the owner when there is one, the end day
uo_plan.is_bar_template = "{label}{?owner} - [b]{owner}[/b]{/owner} [symbol=calendar] {end:d mmm}"

Da un DataStore #

of_from_datastore fa un'attività di ogni riga. La sua chiave è il valore della colonna ROLE_KEY — un identificativo — o, senza di essa, il RowID della riga; la colonna ROLE_PARENT nomina la chiave dell'attività che la contiene (vuota: in alto; un genitore non trovato o un ciclo mette la riga in alto). Una colonna svolge un ruolo quando ne porta il nome (key, parent, label, start, end, progress, milestone, color, predecessors) o quando of_map lo dice. ROLE_MILESTONE fa una milestone di ogni valore che dice sì; ROLE_COLOR colora la barra (un RGB() di PowerBuilder o #rrggbb); ROLE_PREDECESSORS elenca le attività attese, le loro chiavi separate da virgole, il tipo dopo : quando non è fine-inizio: "12, 14:ss". Le date sono lette nell'ordine regionale della postazione. Tutte le colonne sono campi dei modelli. Le attività di un caricamento precedente se ne vanno (i loro handle sono liberati), quelle aggiunte a mano restano. Due righe con la stessa chiave: la seconda diventa key~RowID; una chiave che contiene / o | prende il RowID, e i suoi figli la ritrovano dal suo valore; una chiave che un'attività aggiunta a mano porta già diventa key~RowID, sotto lo stesso genitore — nessuna riga viene mai scartata. Una riga con inizio vuoto è un'attività non pianificata: la griglia lo dice, non ha barra e nessun gesto la sposta. Date e decimali sono letti qualunque siano le impostazioni regionali (12,5 vale 12.5). of_from_datastore accetta anche un DataWindow o un DataWindowChild: le righe che l'utente vede accanto al diagramma, riscritte lì. Dopo un Reset o un Retrieve del DataStore, ridatelo: i suoi RowID ripartono da capo.

Con ib_write_back = true, un gesto scrive nella riga prima del suo evento: le date di inizio e di fine per uno spostamento o una nuova fine, l'avanzamento per il triangolo — ogni valore nel tipo della sua colonna. L'evento legge il DataStore aggiornato, l'Update resta a voi. Un valore che il DataStore rifiuta rimette l'attività com'era, e anche ciò che era già scritto, e solleva ue_write_back_failed al posto dell'evento del gesto. Dopo aver cambiato voi stessi una riga, of_reload_row la rimanda al diagramma; arriva anche una riga inserita nel frattempo. Un'attività che rimuovete (of_remove_task) resta fuori fino al prossimo of_from_datastore: of_map e il ricaricamento di un'altra riga non la riportano, of_reload_row della sua riga sì. Dopo of_clear, of_reload_row rifiuta (-5) fino a un nuovo caricamento.

// Which column of the DataStore plays which role
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_KEY, /*column*/ "id")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_PARENT, /*column*/ "parent_id")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_START, /*column*/ "start_date")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_END, /*column*/ "end_date")
uo_plan.of_map(/*role*/ u_pbt_gantt.ROLE_PREDECESSORS, /*column*/ "after")

// A change goes into the DataStore, then the rows become tasks
uo_plan.ib_write_back = true
uo_plan.of_from_datastore(/*ads*/ ids_tasks)

Proprietà #

ProprietàTipoPredefinitoRuolo
is_scalestring"week"La scala del tempo: SCALE_DAY, SCALE_WEEK, SCALE_MONTH, SCALE_QUARTER. Un valore sconosciuto è rifiutato: resta il vecchio, of_get_last_error dice perché. Anche la barra degli strumenti e Ctrl + rotellina la cambiano: riletta in diretta
is_todaystring""Il giorno della linea di oggi, nel colore d'accento, aaaa-mm-gg; vuoto: la data della postazione. Una data non valida è rifiutata: resta la vecchia, of_get_last_error dice perché
is_work_daysstring"1|2|3|4|5"I giorni lavorativi, numeri ISO uniti da | (1 = lunedì … 7 = domenica, 0 accettato per domenica); gli altri sono ombreggiati alle scale giorno e settimana, e il margine del percorso critico conta solo questi. Non sono i numeri di DayNumber(), dove 1 = domenica. Un elenco che non nomina alcun giorno è rifiutato (of_get_last_error)
is_columnsstring"name|start|end|duration|progress"Le colonne della griglia, nel loro ordine, unite da |: COLUMN_NAME, COLUMN_START, COLUMN_END, COLUMN_DURATION, COLUMN_PROGRESS. Una colonna sconosciuta, o nessuna, è rifiutata: resta il vecchio elenco, of_get_last_error dice perché
is_date_formatstring""Come la griglia scrive una data, con i simboli d dd ddd dddd m mm mmm mmmm yy yyyy; vuoto: la data breve della lingua di visualizzazione
is_bar_templatestring"{label}"Il testo accanto a ogni barra, scritto da un modello (vedi sopra); vuoto: nessun testo
is_tooltip_title_templatestring"{label}"Il titolo del tooltip di una barra, scritto da un modello; vuoto con is_tooltip_template vuoto: nessun tooltip
is_tooltip_templatestring"{start} – {end} ({duration}){!milestone}{!summary}[br]{percent}{/summary}{/milestone}"Il testo del tooltip di una barra, scritto da un modello: per impostazione predefinita le date, la durata e, tranne per una milestone o un'attività di riepilogo, l'avanzamento; {percent} scrive l'avanzamento in percentuale, come lo scrive la lingua di visualizzazione (50% in inglese)
ib_toolbarbooleantrueLa barra degli strumenti sopra il diagramma: il pulsante Oggi e le quattro scale
ib_read_onlybooleanfalseL'utente non cambia nulla: niente trascinamento, ridimensionamento, avanzamento, Ctrl + frecce, Canc né collegamento. Seleziona, comprime, apre e cambia scala; il vostro codice cambia sempre le attività
ib_veto_changesbooleanfalseOpt-in: chiedere ue_task_changing prima di ogni spostamento, nuova fine o avanzamento dell'utente. Disattivato per impostazione predefinita, come ogni evento annullabile della libreria
ib_write_backbooleanfalseUn diagramma alimentato da of_from_datastore: un gesto scrive le nuove date o il nuovo avanzamento nel DataStore prima del suo evento. Un'attività aggiunta a mano non è mai scritta. Una colonna datetime mantiene la sua ora: il diagramma sposta dei giorni. Un'attività di un DataStore senza colonna di fine (ROLE_END) non ha maniglia di fine: la sua nuova fine non potrebbe essere scritta
ib_link_by_mousebooleanfalseDue punti ai lati della barra sotto il puntatore: trascinarne uno su un'altra attività chiede un collegamento (ue_link_requested)
ib_critical_pathbooleanfalseDisegna il percorso critico nel colore del pericolo: le attività e i collegamenti senza margine, contato in giorni lavorativi (is_work_days); un collegamento che tocca un'attività di riepilogo vincola le attività che contiene; un'attività terminata (100 %) non è mai segnata
is_project_endstring""La scadenza del progetto, yyyy-mm-dd: il margine del percorso critico si conta fino alla fine di quel giorno invece che fino all'ultima fine del piano. Più tardi, ogni attività ha gioco; prima, quelle che finiscono troppo tardi sono critiche. Vuoto: l'ultima fine. Una data che non è tale è rifiutata (of_get_last_error)
ib_show_latebooleanfalseDisegna le attività in ritardo in ambra tratteggiata: un'attività — né di riepilogo né milestone — il cui ultimo giorno è prima di is_today e il cui avanzamento è sotto 100. of_is_late() e il campo {late} rispondono che sia disegnata o no
ii_grid_widthinteger-1 (auto)La larghezza della griglia in pixel. Automatica per impostazione predefinita (-1): larga quanto le colonne che mostra, e riletta come tale larghezza (544 con le cinque colonne). 0 la nasconde, 2000 al massimo; un altro valore è rifiutato (of_get_last_error). L'utente trascina la linea tra griglia e diagramma, o la sposta con le frecce: riletta in diretta
ii_row_heightinteger30L'altezza di una riga in pixel, da 22 a 60; un altro valore è rifiutato (of_get_last_error)
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 d'accento di questo componente (-1 = accento dell'applicazione, o quello del tema)
is_tooltipstring""Tooltip semplice mostrato al passaggio del mouse sul componente
is_super_tooltip_titlestring""Titolo del tooltip avanzato (prevale su is_tooltip)
is_super_tooltip_textstring""Testo del tooltip avanzato (markup avanzato accettato)
is_super_tooltip_imagestring""Immagine del tooltip avanzato

Proprietà di un'attività — n_pbt_gantt_task #

Il suo handle, tramite of_task(indirizzo). Una lettura chiede al diagramma cosa sia l'attività ora; un valore scritto è muto, come SetItem; ib_collapsed è un ordine e solleva ue_task_toggled. Il suo of_count() conta le attività che contiene e il suo of_keys_at(n) restituisce l'indirizzo dell'n-esima.

ProprietàTipoPredefinitoRuolo
is_labelstring""Il nome dell'attività, nella griglia, accanto alla sua barra e nel suo tooltip: testo formattato con tag ovunque ([[1]] per una parentesi). Vuoto, l'attività mostra la sua chiave
is_startstring—Il primo giorno, aaaa-mm-gg. Scriverlo sposta l'attività: la sua durata resta (scrivete is_end dopo per cambiarla). Rifiutato per un'attività di riepilogo, che prende le sue date da ciò che contiene, e per una data non valida: of_get_last_error dice perché
is_endstring—L'ultimo giorno, compreso, aaaa-mm-gg: un'attività dal 6 al 10 dura cinque giorni. Rifiutato prima di is_start, per una milestone (non ha una fine propria) e per un'attività di riepilogo
id_progressdouble0L'avanzamento, in percentuale (da 0 a 100), disegnato nella barra. Un'attività di riepilogo legge la media di ciò che contiene, ponderata per le durate; scriverlo è rifiutato, anche per una milestone
ib_milestonebooleanfalsetrue: una milestone, un giorno disegnato come un rombo, senza durata né avanzamento. È un istante alla fine del suo giorno: collegata dopo un'attività che finisce quel giorno, la regola è rispettata; un'attività collegata dopo di essa inizia il giorno dopo
ib_collapsedbooleanfalsetrue comprime un'attività di riepilogo: le attività che contiene lasciano la griglia. Segue ue_task_toggled, come per un clic sulla sua freccia. Solo un'attività di riepilogo si comprime: true su un'attività che non contiene nulla è rifiutato (of_get_last_error). Riletta in diretta
ib_read_onlybooleanfalseL'utente non può né trascinare questa attività, né ridimensionarla, né cambiarne l'avanzamento, né chiederne l'eliminazione; il vostro codice la cambia sempre
il_accentlong-1Il colore della barra e del suo avanzamento, in RGB(r,g,b); prevale su una colonna ROLE_COLOR. -1 = l'accento del componente. Un'attività del percorso critico disegnato resta nel colore del pericolo
il_back_colorlong-1Lo sfondo dell'attività: la sua riga nella griglia e, come velatura pallida, la riga della sua barra nel diagramma, in RGB(r,g,b). -1 = quello del componente
il_text_colorlong-1Il colore del testo dell'attività: nella griglia e accanto alla sua barra. -1 = quello del componente
il_back_color_hoverlong-1Lo sfondo della riga dell'attività nella griglia quando il puntatore è sopra. -1 = quello del componente
il_text_color_hoverlong-1Il colore del testo della riga dell'attività nella griglia quando il puntatore è sopra. -1 = quello del componente
of_duration ( ) → long——Restituisce la sua durata in giorni di calendario, l'ultimo giorno compreso; 0 per una milestone
of_is_summary ( ) → boolean——TRUE quando l'attività ne contiene altre: le sue date e il suo avanzamento sono calcolati
of_is_critical ( ) → boolean——TRUE quando l'attività è sul percorso critico: nessun margine, un giorno di ritardo e il progetto finisce un giorno dopo. Risponde che ib_critical_path lo disegni o no. Il margine si conta in giorni lavorativi (is_work_days); un'attività di riepilogo non è mai critica, le attività che contiene possono esserlo; un'attività terminata (100 %) mai
of_position ( ) → long——Restituisce la sua posizione tra le attività del genitore, contata da 1; 0 quando il diagramma non la contiene
of_level ( ) → long——Restituisce la sua profondità: 1 per un'attività in alto, 2 per un'attività al suo interno…
of_predecessors ( ) → string——Gli indirizzi delle attività da cui dipende, uniti da |; vuoto se non ce ne sono
of_successors ( ) → string——Gli indirizzi delle attività che dipendono da essa, uniti da |; vuoto se non ce ne sono
of_is_late ( ) → boolean——In ritardo: il suo ultimo giorno è prima di is_today e non è finita (avanzamento sotto 100). Un'attività di riepilogo e una milestone non lo sono mai; risponde che ib_show_late lo disegni o no
of_row ( ) → long——Restituisce il numero di riga di oggi, nel DataStore di of_from_datastore, della riga da cui proviene l'attività — qualunque chiave abbia dovuto prendere, e dopo un ordinamento o un filtro. 0 per un'attività aggiunta a mano o la cui riga è scomparsa
is_tooltipstring""Tooltip semplice mostrato al passaggio del mouse sull'item
is_super_tooltip_titlestring""Titolo del tooltip avanzato dell'item (prevale su is_tooltip)
is_super_tooltip_textstring""Testo del tooltip avanzato dell'item (markup avanzato accettato)
is_super_tooltip_imagestring""Immagine del tooltip avanzato dell'item

Costanti #

CostanteValoreSignificato
SCALE_DAY"day"Una colonna per giorno
SCALE_WEEK"week"Una colonna per settimana — la scala predefinita
SCALE_MONTH"month"Una colonna per mese
SCALE_QUARTER"quarter"Una colonna per trimestre
COLUMN_NAME"name"Il nome dell'attività, ad albero
COLUMN_START"start"Il primo giorno
COLUMN_END"end"L'ultimo giorno
COLUMN_DURATION"duration"La durata in giorni
COLUMN_PROGRESS"progress"L'avanzamento in percentuale
DEP_FS"fs"Fine-inizio: la successiva inizia quando la precedente è finita (il collegamento abituale)
DEP_SS"ss"Inizio-inizio: iniziano insieme
DEP_FF"ff"Fine-fine: finiscono insieme
DEP_SF"sf"Inizio-fine: la successiva finisce quando la precedente inizia
CHANGE_MOVE"move"Uno spostamento: le due date
CHANGE_RESIZE"resize"Una nuova fine
CHANGE_PROGRESS"progress"Un nuovo avanzamento
ROLE_KEY"key"La chiave dell'attività (un identificativo); senza di essa, il RowID
ROLE_PARENT"parent"La chiave dell'attività che la contiene
ROLE_LABEL"label"Il suo nome
ROLE_START"start"Il suo primo giorno
ROLE_END"end"Il suo ultimo giorno (vuoto: il primo)
ROLE_PROGRESS"progress"Il suo avanzamento, da 0 a 100
ROLE_MILESTONE"milestone"Una milestone quando il valore dice sì
ROLE_COLOR"color"Il colore della sua barra
ROLE_PREDECESSORS"predecessors"Le attività che aspetta: "12, 14:ss, 15:fs+2" (un ritardo in giorni lavorativi si scrive dopo il tipo)

Metodi #

MetodoRuolo
of_add_dependency (string as_from_keys, string as_to_keys)Aggiunge un collegamento fine-inizio: as_to_keys inizia quando as_from_keys è finita. Restituisce 0 una volta aggiunto, -5 o -2 come la forma a tre argomenti
of_add_dependency (string as_from_keys, string as_to_keys, string as_type)Aggiunge un collegamento di tipo DEP_FS, DEP_SS, DEP_FF o DEP_SF, disegnato come freccia. Restituisce 0 una volta aggiunto, -5 per un'attività sconosciuta, un collegamento verso se stessa o tra un'attività e ciò che contiene, un collegamento già presente (qualunque sia il tipo), uno che chiuderebbe un ciclo o un tipo sconosciuto, -2 quando il componente non è creato
of_add_dependency (string as_from_keys, string as_to_keys, string as_type, long al_lag)Lo stesso collegamento con un ritardo in giorni lavorativi (is_work_days, meno i festivi): 2 lascia due giorni lavorativi tra la fine dell'una e l'inizio dell'altra, un numero negativo è un anticipo. La regola della freccia e il percorso critico lo contano. Restituisce 0 una volta aggiunto, -5 come la forma a tre argomenti o per un ritardo oltre 999 giorni, -2 quando il componente non è creato
of_add_holiday (string as_date)Aggiunge un giorno festivo senza nome. Restituisce 0 una volta aggiunto, -5 o -2 come la forma a due argomenti
of_add_holiday (string as_date, string as_label)Aggiunge un giorno festivo, aaaa-mm-gg: un giorno non lavorativo qualunque cosa dica is_work_days, ombreggiato come un fine settimana, nominato da as_label nel tooltip del suo giorno alla scala giorno; il margine del percorso critico e il ritardo di un collegamento non lo contano. Uno alla volta; of_clear lo conserva, of_reset lo cancella. Restituisce 0 una volta aggiunto, -5 per una data non valida o un giorno già festivo, -2 quando il componente non è creato
of_add_holiday (date ad_date, string as_label)Lo stesso da una date di PowerBuilder. Restituisce 0 una volta aggiunto, -5 anche per una data nulla
of_add_marker (string as_key, string as_date, string as_label)Aggiunge un marcatore verticale nel colore del testo attenuato. Restituisce 0 una volta aggiunto, -5 o -2 come la forma a quattro argomenti
of_add_marker (string as_key, string as_date, string as_label, long al_color)Aggiunge un marcatore verticale: una linea tratteggiata alla fine del suo giorno (una scadenza vale fino alla fine del suo giorno, come una milestone), la sua etichetta — testo formattato con tag — in alto nel diagramma: una scadenza contrattuale, la fine di uno sprint, un congelamento. al_color è un colore RGB(), -1 per il colore del testo attenuato. Restituisce 0 una volta aggiunto, -5 per una chiave che non può esserlo (vuota, con / o |), una chiave già presa o una data non valida, -2 quando il componente non è creato
of_add_milestone (string as_keys, string as_label, string as_date)Aggiunge una milestone al suo indirizzo: un giorno, un rombo, senza durata. Restituisce 0 una volta aggiunta, -5 come of_add_task, -2 quando il componente non è creato
of_add_milestone (string as_keys, string as_label, date ad_date)Lo stesso da una date di PowerBuilder. Restituisce 0 una volta aggiunta, -5 anche per una data nulla
of_add_task (string as_keys, string as_label, string as_start, string as_end)Aggiunge un'attività al suo indirizzo: "phase1" in alto, "phase1/design" dentro l'attività "phase1", aggiunta per prima (diventa un'attività di riepilogo). Date aaaa-mm-gg, la fine compresa ("": un giorno). Restituisce 0 una volta aggiunta, -5 per un indirizzo con un livello vuoto o una chiave con |, un indirizzo già preso, un genitore sconosciuto, una data non valida o una fine prima dell'inizio, -2 quando il componente non è creato
of_add_task (string as_keys, string as_label, date ad_start, date ad_end)Lo stesso da due date di PowerBuilder, la fine essendo l'ultimo giorno, compreso. Restituisce 0 una volta aggiunta, -5 anche per un inizio nullo (una fine nulla: un giorno)
of_clear ( )Svuota il diagramma: attività, collegamenti, i loro handle e le righe del DataStore (resta collegato, per un nuovo of_from_datastore; of_reload_row rifiuta fino ad allora); le opzioni restano. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_clear_dependencies ( )Rimuove tutti i collegamenti; le attività restano. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_clear_holidays ( )Rimuove tutti i giorni festivi: solo is_work_days dice quali giorni sono lavorativi. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_clear_markers ( )Rimuove tutti i marcatori; of_clear li conserva, come i giorni festivi. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_clear_selection ( )Non lascia alcuna attività selezionata: segue ue_selection_changed con un indirizzo vuoto; niente selezionato, niente è sollevato. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_collapse_all ( )Comprime tutte le attività di riepilogo: segue ue_task_toggled per ognuna di quelle che erano aperte, poi ue_layout_changed una volta. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_dependency_lag (string as_from_keys, string as_to_keys)Restituisce il ritardo del collegamento da un'attività a un'altra, in giorni lavorativi, letto dal vivo: negativo per un anticipo, 0 senza ritardo o senza collegamento
of_dependency_type (string as_from_keys, string as_to_keys)Il tipo del collegamento da un'attività a un'altra (DEP_FS…), vuoto se non ce n'è. Letto in diretta
of_expand_all ( )Apre tutte le attività di riepilogo: segue ue_task_toggled per ognuna di quelle che erano compresse, poi ue_layout_changed una volta. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_from_datastore (datastore ads)Fa un'attività di ogni riga del DataStore (vedi sopra). Le attività di un caricamento precedente se ne vanno, quelle aggiunte a mano restano, i loro handle anche. Restituisce 0 una volta caricato, -5 quando il DataStore non è valido o non ha colonne, -2 quando il componente non è creato
of_from_datastore (datawindow adw)Lo stesso dalle righe di un DataWindow — quello che l'utente vede accanto: ib_write_back scrive in questo DataWindow. Un DataWindow che non può condividere i suoi dati è rifiutato. Restituisce 0 una volta caricato, -5 quando il DataWindow non è valido, non ha colonne o non si condivide, -2 quando il componente non è creato
of_from_datastore (datawindowchild adwc)Lo stesso dalle righe di un DataWindowChild (un elenco a discesa DataWindow, un report annidato), riscritto da ib_write_back. Restituisce 0 una volta caricato, -5 quando non è valido, non ha colonne o non si condivide, -2 quando il componente non è creato
of_get_field (string as_keys, string as_field)Legge un campo di un'attività, in diretta: uno dei vostri, una colonna del suo DataStore o un campo predefinito (duration, critical…) — che restituisce il testo mostrato e nasconde una colonna con lo stesso nome. Una stringa vuota quando non ne ha
of_get_last_error ( )Perché l'ultima scrittura di una proprietà è stata rifiutata (una data non valida, le date di un'attività di riepilogo, una scala o una colonna sconosciuta); altrimenti l'ultimo errore della libreria
of_get_layout ( )Ciò che l'utente ha sistemato, in JSON: {"scale":"week","gridWidth":-1,"columns":[{"key":"name","width":200},...],"collapsed":["phase2"]} — la scala, la larghezza della griglia e di ogni colonna, i riepiloghi compressi. Da salvare, poi da restituire a of_set_layout. Letto in diretta
of_holidays ( )I giorni festivi, letti dal vivo: aaaa-mm-gg uniti da |, in ordine di data; vuoto se non ce ne sono
of_map (string as_role, string as_column)Dà un ruolo a una colonna del DataStore (ROLE_KEY, ROLE_PARENT, ROLE_LABEL, ROLE_START, ROLE_END, ROLE_PROGRESS, ROLE_MILESTONE, ROLE_COLOR, ROLE_PREDECESSORS), prima o dopo of_from_datastore: dopo, le righe sono rilette. Una colonna vuota restituisce il ruolo alla colonna che ne porta il nome. Ciò che è stato impostato sulle attività resta (compressione, sola lettura, campi, colori, collegamenti aggiunti dal codice). Un nuovo ROLE_KEY o ROLE_PARENT dà nuovi indirizzi alle attività delle righe: i loro handle sono liberati, quelli delle attività aggiunte a mano restano. Restituisce 0 una volta impostato, -5 per un ruolo sconosciuto o una colonna che il DataStore non ha, -2 quando il componente non è creato
of_markers ( )Le chiavi dei marcatori, lette dal vivo, nel loro ordine, unite da |; vuoto se non ce ne sono
of_reload_row (long al_row)Rimanda al diagramma una riga del DataStore di of_from_datastore, riletta ora, dopo che il vostro codice l'ha cambiata (SetItem, una finestra di modifica); al_row è il suo numero di riga oggi. L'attività segue la sua riga sul posto: ciò che è stato impostato su di essa (compressione, sola lettura, campi, colori, collegamenti aggiunti dal codice) resta, un trascinamento in corso continua, nulla viene sollevato. Una riga la cui chiave o il cui genitore è cambiato sposta la sua attività, con ciò che vi è stato impostato; arriva anche una riga inserita nel frattempo. Restituisce 0 una volta inviata, -5 quando nessun DataStore è collegato, il diagramma non ha più righe dopo of_clear o la riga non esiste (of_get_last_error dice quale), -2 quando il componente non è creato
of_remove_dependency (string as_from_keys, string as_to_keys)Rimuove il collegamento da un'attività a un'altra. Restituisce 0 una volta rimosso, -5 per un collegamento che il diagramma non ha, -2 quando il componente non è creato
of_remove_holiday (string as_date)Il giorno torna lavorativo. Restituisce 0 una volta rimosso, -5 per un giorno che non è un festivo di questo diagramma, -2 quando il componente non è creato
of_remove_marker (string as_key)Rimuove un marcatore. Restituisce 0 una volta rimosso, -5 per una chiave che questo diagramma non ha, -2 quando il componente non è creato
of_remove_task (string as_keys)Rimuove un'attività, tutto ciò che contiene e ogni collegamento che le tocca, e libera i loro handle; rimuovere l'attività selezionata svuota la selezione. L'attività di una riga di DataStore resta fuori fino al prossimo of_from_datastore; of_reload_row della sua riga la riporta. Restituisce 0 una volta rimossa, -5 per un indirizzo che il diagramma non ha, -2 quando il componente non è creato
of_reset ( )Svuota il diagramma, dimentica il DataStore e rimette ogni proprietà al suo valore predefinito, ogni colonna alla sua larghezza. Restituisce 0 una volta applicato, -2 quando il componente non è creato
of_scroll_to_date (string as_date)Fa scorrere l'asse del tempo fino a quel giorno (aaaa-mm-gg), posto al primo terzo della vista. Restituisce 0 una volta applicato, -5 per una data non valida, -2 quando il componente non è creato
of_scroll_to_task (string as_keys)Mostra un'attività: le attività di riepilogo che la contengono si aprono (ue_task_toggled per ognuna), poi il diagramma scorre fino alla sua riga e alla sua barra. Restituisce 0 una volta applicato, -5 per un'attività che il diagramma non ha, -2 quando il componente non è creato
of_select_task (string as_keys)Seleziona un'attività come un clic, senza spostare la vista (come SelectRow di un DataWindow), e segue ue_selection_changed. Restituisce 0 una volta selezionata (o già selezionata: niente è sollevato), -5 per un'attività sconosciuta o non disegnata (in un'attività di riepilogo compressa, oltre il limite della demo), -2 quando il componente non è creato
of_selected_key ( )L'indirizzo dell'attività selezionata, chiunque l'abbia selezionata; vuoto se nessuna. Letto in diretta
of_set_field (string as_keys, string as_field, string as_value)Dà a un'attività un vostro campo, per i modelli; prevale su una colonna del DataStore con lo stesso nome. Un nome di campo: lettere, cifre e _, senza cifra iniziale. Restituisce 0 una volta impostato, -5 per un'attività sconosciuta, un nome non valido o il nome di un campo predefinito (label, start…), -2 quando il componente non è creato
of_set_layout (string as_layout_json)Restituisce una disposizione letta da of_get_layout o ricevuta da ue_layout_changed: la scala, le larghezze e quali riepiloghi sono compressi (quelli che non nomina si aprono); una colonna o un'attività sconosciuta al diagramma è ignorata. ue_layout_changed è sollevato una volta se qualcosa è cambiato (né ue_task_toggled né ue_scale_changed: rimette uno stato). Restituisce 0 una volta applicata, -5 quando il testo è vuoto o non è un oggetto JSON, -2 quando il componente non è creato
of_task (string as_keys)Restituisce l'handle di un'attività, tramite il suo indirizzo (creato al primo accesso, liberato quando l'attività è rimossa)

Eventi #

EventAttivato quando
ue_task_moved (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)L'utente ha spostato un'attività: la sua barra trascinata, o Ctrl + Sinistra / Destra. as_start e as_end sono i suoi nuovi giorni, as_old_start e as_old_end quelli che aveva, aaaa-mm-gg — ciò che serve a un registro o a un annullamento. L'attività è già al suo posto; con ib_write_back, il DataStore è già scritto. Una data scritta dal vostro codice non solleva nulla
ue_task_resized (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)L'utente ha cambiato la fine di un'attività: il bordo finale della sua barra trascinato, o Ctrl + Maiusc + Sinistra / Destra. I vecchi giorni arrivano con i nuovi
ue_progress_changed (string as_keys, double ad_progress, double ad_old_progress)L'utente ha cambiato l'avanzamento di un'attività: il piccolo triangolo sotto la sua barra trascinato, o Ctrl + Su / Giù (10 punti). ad_progress è il nuovo, in percentuale, ad_old_progress quello che aveva
ue_task_changing (string as_keys, string as_kind, string as_start, string as_end, double ad_progress) → booleanAnnullabile, posto prima di uno spostamento, una nuova fine o un avanzamento dell'utente, solo quando ib_veto_changes = true. as_kind dice quale: CHANGE_MOVE, CHANGE_RESIZE o CHANGE_PROGRESS; i valori sono quelli che l'attività prenderebbe. Restituire FALSE la lascia com'era
ue_task_clicked (string as_keys)Un'attività è stata cliccata (e selezionata): la sua riga nella griglia o la sua barra. Non alla fine di un trascinamento
ue_task_opened (string as_keys)Doppio clic su un'attività, o Invio: aprite il vostro editor. Un doppio clic sulla riga di un'attività di riepilogo la comprime o la apre invece
ue_task_rclicked (string as_keys, long al_x, long al_y)Clic destro su un'attività (selezionata prima), o il tasto Menu (Maiusc + F10) sull'attività selezionata. al_x, al_y sono pixel dello schermo; per un menu PowerBuilder, PopMenu(PointerX(), PointerY()) della vostra finestra
ue_selection_changed (string as_from_keys, string as_keys)L'attività selezionata è cambiata: clic, tastiera, il vostro codice (of_select_task, of_clear_selection), o l'attività selezionata ha lasciato la griglia (rimossa, in un'attività di riepilogo compressa: as_keys è allora vuoto)
ue_task_toggled (string as_keys, boolean ab_collapsed)Un'attività di riepilogo si è compressa (ab_collapsed = TRUE) o aperta: la sua freccia, un doppio clic sulla sua riga, la tastiera, il suo ib_collapsed impostato dal vostro codice, of_expand_all, of_collapse_all, of_scroll_to_task
ue_delete_requested (string as_keys)Canc è stato premuto sull'attività selezionata. Il diagramma non toglie nulla: of_remove_task quando la vostra applicazione è d'accordo. Mai su un'attività o un diagramma in sola lettura
ue_link_requested (string as_from_keys, string as_to_keys, string as_type)L'utente ha tracciato un collegamento da un'attività a un'altra (ib_link_by_mouse); as_type è una delle costanti DEP_. Il diagramma non aggiunge nulla: of_add_dependency quando la vostra applicazione è d'accordo
ue_dependency_clicked (string as_from_keys, string as_to_keys, string as_type)Una freccia tra due attività è stata cliccata
ue_scale_changed (string as_scale)La scala è cambiata: la barra degli strumenti, Ctrl + rotellina, o is_scale impostato dal vostro codice
ue_layout_changed (string as_layout_json)La disposizione è cambiata: la scala, la larghezza della griglia o di una colonna, un riepilogo compresso o aperto (dall'utente o dal vostro codice), o of_set_layout. as_layout_json è la disposizione intera, come la restituisce of_get_layout: salvatela
ue_write_back_failed (string as_keys, string as_col, string as_value, string as_reason)ib_write_back: il DataStore ha rifiutato un nuovo valore di un'attività (un tipo che la sua colonna non accetta, una riga eliminata dal caricamento). L'attività è tornata com'era, e l'evento del gesto non è sollevato
ue_ready ( )Il componente ha terminato il caricamento; tutto ciò che è stato inviato prima è stato riprodotto
ue_runtime_missing ( )Il runtime WebView2 è assente: il componente resta vuoto
ue_bg_color (long al_color)Il componente ha calcolato il colore di sfondo del proprio tema; l'userobject lo ha già adottato (backcolor)

Tastiera e mouse #


Esempi #

Regole di pianificazione #

// Once, after the plan is built : ask before each change of the user
uo_plan.ib_veto_changes = true

// event ue_task_changing of uo_plan : nothing ends after the go-live
if as_keys <> "golive" and as_end > this.of_task(/*keys*/ "golive").is_start then return false

// and nothing moves into the past : a task already started keeps its start
if as_start < String(Today(), "yyyy-mm-dd") and as_start < this.of_task(/*keys*/ as_keys).is_start then return false
return true

Collegamenti tracciati con il mouse #

// Once : two dots beside the bar under the pointer, the critical path in red
uo_plan.ib_link_by_mouse = true
uo_plan.ib_critical_path = true

// event ue_link_requested of uo_plan : the chart adds nothing by itself
if this.of_add_dependency(/*from_keys*/ as_from_keys, /*to_keys*/ as_to_keys, /*type*/ as_type) = -5 then
	MessageBox("Plan", "This link cannot be added.")
end if

// event ue_dependency_clicked of uo_plan : a click on an arrow removes it
this.of_remove_dependency(/*from_keys*/ as_from_keys, /*to_keys*/ as_to_keys)

Ritrovare la disposizione al prossimo avvio #

// The layout stored at the last start, if any
uo_plan.of_set_layout(/*layout_json*/ ProfileString(gs_ini, "plan", "layout", ""))

// event ue_layout_changed of uo_plan : store every change
SetProfileString(gs_ini, "plan", "layout", as_layout_json)

Aprire un'attività nella vostra finestra #

// event ue_task_opened of uo_plan
// Local variables
long ll_row

// The row of the task in the DataStore, whatever key the task had to take
ll_row = this.of_task(/*keys*/ as_keys).of_row()

// A task added by hand has no row
if ll_row = 0 then return

// Edited in your window, then the task follows its row
OpenWithParm(w_task_edit, ll_row)
this.of_reload_row(/*row*/ ll_row)

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