PBToolboxAI v5 ← Site

gantt — u_pbt_gantt #

← Referência dos componentes · Índice do guia

gantt planeia um projeto: à esquerda uma grelha de tarefas (nome, início, fim, duração, progresso), à direita as suas barras numa escala de tempo — dia, semana, mês ou trimestre — com a linha de hoje (na cor de destaque) e os dias de folga sombreados. Uma tarefa que contém outras é uma tarefa de resumo, cujas datas e progresso são calculados; um marco é um losango de um dia; uma seta liga uma tarefa à que espera por ela, e o caminho crítico é desenhado a vermelho. O utilizador arrasta uma barra para a deslocar, o seu bordo final para mudar o seu fim, o pequeno triângulo por baixo para o seu progresso; ue_task_moved, ue_task_resized e ue_progress_changed dizem-lho. O plano preenche-se à mão ou a partir de um DataStore, que recebe as alterações.

▶ Ver ao vivo — Aplicação de demonstração, mosaico Gantt chart: a pré-visualização, o código que o produz e esta página, lado a lado.


Em resumo #

Userobjectu_pbt_gantt
Classe de itensn_pbt_gantt_task (of_task(keys))
Serve paraPlanear e acompanhar um projeto: fases, tarefas, marcos, ligações, atrasos
PrincípioUma tarefa designa-se pelo seu endereço ("build/design"); uma tarefa de resumo calcula as suas datas e o seu progresso a partir do que contém
Opções opt-inib_veto_changes, ib_write_back, ib_link_by_mouse, ib_critical_path, ib_show_late, ib_read_only

Início rápido #

// 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;

Tarefas, resumos e marcos #

Uma tarefa designa-se pelo seu endereço: a sua chave sob o seu pai, os níveis unidos por / — "build" em cima, "build/design" dentro da tarefa "build", acrescentada primeiro. Uma tarefa que contém outras torna-se uma tarefa de resumo: uma barra fina, as suas datas vão do primeiro início ao último dia do que contém, o seu progresso é a média deles ponderada pelas durações. Nem o utilizador nem o seu código escrevem as suas datas ou o seu progresso: são calculados. A sua seta, um duplo clique na sua linha ou ib_collapsed recolhem-na; segue-se ue_task_toggled.

As datas são dias inteiros, aaaa-mm-dd, o fim incluído: uma tarefa de 6 a 10 dura cinco dias, contados no calendário. of_add_task e of_add_milestone aceitam também dois date do PowerBuilder. Um marco não tem duração: um dia, um losango, nenhum progresso. Através do handle de uma tarefa (of_task(endereço)), escrever is_start desloca-a (a sua duração mantém-se), is_end muda o seu fim, id_progress o seu progresso; um valor escrito pelo seu código não levanta nada, como SetItem. O mesmo handle lê o que a tarefa é agora: as suas datas, a sua duração (of_duration), o seu lugar entre as irmãs a partir de 1 (of_position), o seu nível (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) + " %")

Ligações e caminho crítico #

of_add_dependency liga duas tarefas com uma seta. O tipo por omissão é fim a início (DEP_FS: a seguinte começa depois de a anterior terminar); DEP_SS (início a início), DEP_FF (fim a fim) e DEP_SF (início a fim) dão-se como terceiro argumento. Uma ligação que as datas quebram — a seguinte começa cedo demais — é desenhada a tracejado na cor de perigo. Uma ligação a si mesma, entre uma tarefa e o que ela contém, uma ligação já existente ou uma que fecharia um ciclo é recusada (-5). of_dependency_type lê o tipo de uma ligação, of_predecessors e of_successors do handle as tarefas ligadas.

Com ib_critical_path = true, o caminho crítico é desenhado na cor de perigo: as tarefas e as ligações sem folga, as que empurram o fim do projeto se escorregarem um dia. of_is_critical do handle lê-o, quer o caminho esteja desenhado quer não. Com ib_link_by_mouse = true, aparecem dois pontos de cada lado da barra sob o ponteiro: o utilizador arrasta um sobre outra tarefa, e ue_link_requested dá a ligação pedida — o seu tipo segue o ponto de partida e a metade da barra de destino. O diagrama não acrescenta nada por si: of_add_dependency depois de a sua aplicação concordar. Um clique numa seta levanta ue_dependency_clicked. A folga conta-se em dias úteis (is_work_days): uma tarefa que acaba numa sexta-feira seguida de outra que começa na segunda-feira não tem nenhuma. Um marco é um instante no fim do seu dia: colocado no dia em que acaba a tarefa que segue, a ligação é cumprida, e a tarefa seguinte começa no dia seguinte. Uma ligação que toca uma tarefa de resumo vincula as tarefas que contém; uma tarefa de resumo nunca é marcada, e uma seta só é vermelha entre duas barras vermelhas. Uma tarefa terminada (100 %) nunca é marcada: já não conduz nada. is_project_end conta a folga até um prazo em vez do último fim.


Calendário: feriados, desfasamentos, marcadores e atrasos #

Um projeto segue um calendário. is_work_days indica os dias úteis da semana; of_add_holiday acrescenta um feriado, um a um — sombreado como um fim de semana, nomeado na tooltip do seu dia na escala dia, não conta nem na folga do caminho crítico nem num desfasamento. Uma ligação pode levar um desfasamento em dias úteis: of_add_dependency("design", "build", DEP_FS, 2) deixa dois dias úteis entre o fim de uma e o início da outra (uma secagem, uma entrega); negativo, é uma antecipação. A regra da seta e o caminho crítico contam-no, of_dependency_lag relê-o, um DataStore escreve-o depois do tipo ("12:fs+2"). of_add_marker traça um marcador vertical no fim de um dia — um prazo contratual, o fim de um sprint — com a sua etiqueta em cima. Por fim, com ib_show_late = true, uma tarefa atrasada — o seu último dia já passou (is_today) e não está terminada — é desenhada a âmbar tracejado; of_is_late() do seu handle e o campo {late} dos modelos dizem-no em qualquer 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

O que o utilizador muda #

O utilizador arrasta uma barra para deslocar a tarefa, por dias inteiros (ue_task_moved), o seu bordo final para mudar o seu fim (ue_task_resized), o pequeno triângulo por baixo da barra para o seu progresso (ue_progress_changed); uma bolha mostra as datas ou a percentagem durante o arrasto, Esc cancela. Com o teclado, Ctrl + Esquerda / Direita desloca a tarefa selecionada um dia e Ctrl + Shift + Esquerda / Direita muda o seu fim. Os eventos chegam com a tarefa já no seu lugar. Só um gesto os levanta: uma data escrita pelo seu código é muda, como SetItem. Uma tarefa de resumo não se arrasta, nem uma tarefa ou um diagrama ib_read_only.

Com ib_veto_changes = true, ue_task_changing é colocado antes de cada uma destas três alterações, com as datas e o progresso que a tarefa tomaria: devolver FALSE deixa-a como estava. Delete na tarefa selecionada levanta ue_delete_requested: o diagrama não retira nada, of_remove_task depois de a sua aplicação concordar.


Escala, grelha e disposição #

A escala (is_scale) escolhe-se na barra de ferramentas (ib_toolbar, com o botão Hoje), com Ctrl + roda — o dia sob o ponteiro fica sob o ponteiro — ou pelo seu código; segue-se ue_scale_changed. Nas escalas dia e semana, os dias de folga (is_work_days) são sombreados. A grelha mostra as colunas de is_columns, pela sua ordem, com as datas escritas segundo is_date_format; o utilizador arrasta a linha entre grelha e diagrama (ii_grid_width) e o bordo de um cabeçalho de coluna para a sua largura. O que organizou — a escala, as larguras, os resumos recolhidos — lê-se com of_get_layout, devolve-se com of_set_layout, e cada alteração levanta ue_layout_changed com a disposição inteira: guarde-a e devolva-a no próximo arranque.


O texto das barras e das tooltips #

O texto ao lado de cada barra é escrito por um modelo, is_bar_template ("{label}" por omissão, vazio para nenhum), e a tooltip de uma barra por is_tooltip_title_template e is_tooltip_template: texto formatado com etiquetas onde {owner} é um campo da tarefa — um dos seus (of_set_field), uma coluna do DataStore de onde vem, ou um campo integrado (label, key, keys, start, end, duration, days, progress, percent, milestone, summary, critical, late, level, parent). {end:d mmm} escreve uma data com os símbolos d dd ddd dddd m mm mmm mmmm yy yyyy, {?owner}…{/owner} mantém um pedaço quando o campo diz alguma coisa, {!owner}…{/owner} quando não diz nada, {x:raw} mantém um valor como etiquetas, {{ }} são chavetas. {label} e {parent} são etiquetas, como na grelha; qualquer outro valor é mostrado tal como é, nunca lido como etiquetas. Um nome de campo integrado nunca é seu: of_set_field recusa-o, e uma coluna do DataStore com esse nome fica oculta por ele. Uma tarefa com uma tooltip própria (is_tooltip do seu handle) mostra essa.

// 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}"

A partir de um DataStore #

of_from_datastore faz uma tarefa de cada linha. A sua chave é o valor da coluna ROLE_KEY — um identificador — ou, sem ela, o RowID da linha; a coluna ROLE_PARENT nomeia a chave da tarefa que a contém (vazia: em cima; um pai não encontrado ou um ciclo põe a linha em cima). Uma coluna desempenha um papel quando tem o seu nome (key, parent, label, start, end, progress, milestone, color, predecessors) ou quando of_map o diz. ROLE_MILESTONE faz um marco de qualquer valor que diga sim; ROLE_COLOR colore a barra (um RGB() do PowerBuilder ou #rrggbb); ROLE_PREDECESSORS lista as tarefas esperadas, as suas chaves separadas por vírgulas, o tipo depois de : quando não é fim a início: "12, 14:ss". As datas são lidas na ordem regional do posto. Todas as colunas são campos dos modelos. As tarefas de um carregamento anterior saem (os seus handles são libertados), as acrescentadas à mão ficam. Duas linhas com a mesma chave: a segunda passa a key~RowID; uma chave que contém / ou | toma o RowID, e os seus filhos encontram-na pelo seu valor; uma chave que uma tarefa acrescentada à mão já tem passa a key~RowID, sob o mesmo pai — nenhuma linha é alguma vez posta de lado. Uma linha com o início vazio é uma tarefa não planeada: a grelha di-lo, não tem barra e nenhum gesto a desloca. Datas e decimais são lidos quaisquer que sejam as definições regionais (12,5 vale 12.5). of_from_datastore aceita também um DataWindow ou um DataWindowChild: as linhas que o utilizador vê ao lado do gráfico, reescritas aí. Depois de um Reset ou de um Retrieve do DataStore, volte a dá-lo: os seus RowID recomeçam.

Com ib_write_back = true, um gesto escreve na linha antes do seu evento: as datas de início e de fim para uma deslocação ou um novo fim, o progresso para o triângulo — cada valor no tipo da sua coluna. O evento lê o DataStore atualizado, o Update continua a ser consigo. Um valor que o DataStore recusa repõe a tarefa como estava, e também o que já estava escrito, e levanta ue_write_back_failed em vez do evento do gesto. Depois de alterar você mesmo uma linha, of_reload_row volta a enviá-la para o diagrama; uma linha inserida entretanto também chega. Uma tarefa que retira (of_remove_task) fica de fora até ao próximo of_from_datastore: of_map e o recarregamento de outra linha não a trazem de volta, of_reload_row da sua própria linha traz. Depois de of_clear, of_reload_row recusa (-5) até um novo carregamento.

// 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)

Propriedades #

PropriedadeTipoPredefiniçãoFunção
is_scalestring"week"A escala do tempo: SCALE_DAY, SCALE_WEEK, SCALE_MONTH, SCALE_QUARTER. Um valor desconhecido é recusado: o anterior fica, of_get_last_error diz porquê. A barra de ferramentas e Ctrl + roda também a mudam: lida em direto
is_todaystring""O dia da linha de hoje, na cor de destaque, aaaa-mm-dd; vazio: a data do posto. Uma data inválida é recusada: a anterior fica, of_get_last_error diz porquê
is_work_daysstring"1|2|3|4|5"Os dias úteis, números ISO unidos por | (1 = segunda-feira … 7 = domingo, 0 aceite para domingo); os outros são sombreados nas escalas dia e semana, e a folga do caminho crítico só conta estes. Não são os números de DayNumber(), onde 1 = domingo. Uma lista que não nomeia nenhum dia é recusada (of_get_last_error)
is_columnsstring"name|start|end|duration|progress"As colunas da grelha, pela sua ordem, unidas por |: COLUMN_NAME, COLUMN_START, COLUMN_END, COLUMN_DURATION, COLUMN_PROGRESS. Uma coluna desconhecida, ou nenhuma, é recusada: a lista anterior fica, of_get_last_error diz porquê
is_date_formatstring""Como a grelha escreve uma data, com os símbolos d dd ddd dddd m mm mmm mmmm yy yyyy; vazio: a data curta da língua de apresentação
is_bar_templatestring"{label}"O texto ao lado de cada barra, escrito por um modelo (ver acima); vazio: nenhum texto
is_tooltip_title_templatestring"{label}"O título da tooltip de uma barra, escrito por um modelo; vazio com is_tooltip_template vazio: nenhuma tooltip
is_tooltip_templatestring"{start} – {end} ({duration}){!milestone}{!summary}[br]{percent}{/summary}{/milestone}"O texto da tooltip de uma barra, escrito por um modelo: por omissão as datas, a duração e, exceto para um marco ou uma tarefa de resumo, o progresso; {percent} escreve o progresso em percentagem, como a língua de apresentação o escreve (50% em inglês)
ib_toolbarbooleantrueA barra de ferramentas por cima do diagrama: o botão Hoje e as quatro escalas
ib_read_onlybooleanfalseO utilizador não muda nada: nem arrastar, nem redimensionar, nem progresso, nem Ctrl + setas, nem Delete, nem ligação. Continua a selecionar, recolher, abrir e mudar de escala; o seu código continua a mudar as tarefas
ib_veto_changesbooleanfalseOpt-in: perguntar ue_task_changing antes de cada deslocação, novo fim ou progresso do utilizador. Desativado por omissão, como todo o evento cancelável da biblioteca
ib_write_backbooleanfalseUm diagrama alimentado por of_from_datastore: um gesto escreve as novas datas ou o novo progresso no DataStore antes do seu evento. Uma tarefa acrescentada à mão nunca é escrita. Uma coluna datetime mantém a sua hora: o diagrama desloca dias. Uma tarefa de um DataStore sem coluna de fim (ROLE_END) não tem pega de fim: o seu novo fim não poderia ser escrito
ib_link_by_mousebooleanfalseDois pontos de cada lado da barra sob o ponteiro: arrastar um sobre outra tarefa pede uma ligação (ue_link_requested)
ib_critical_pathbooleanfalseDesenha o caminho crítico na cor de perigo: as tarefas e as ligações sem folga, contada em dias úteis (is_work_days); uma ligação que toca uma tarefa de resumo vincula as tarefas que contém; uma tarefa terminada (100 %) nunca é marcada
is_project_endstring""O prazo do projeto, yyyy-mm-dd: a folga do caminho crítico conta-se até ao fim desse dia em vez do último fim do plano. Mais tarde, cada tarefa tem margem; mais cedo, as que acabam tarde demais são críticas. Vazio: o último fim. Uma data que não o é é recusada (of_get_last_error)
ib_show_latebooleanfalseDesenha as tarefas atrasadas a âmbar tracejado: uma tarefa — nem de resumo nem marco — cujo último dia é anterior a is_today e cujo progresso está abaixo de 100. of_is_late() e o campo {late} respondem quer seja desenhada quer não
ii_grid_widthinteger-1 (auto)A largura da grelha em píxeis. Automática por omissão (-1): tão larga como as colunas que mostra, e lida como essa largura (544 com as cinco colunas). 0 oculta-a, 2000 no máximo; outro valor é recusado (of_get_last_error). O utilizador arrasta a linha entre grelha e diagrama, ou desloca-a com as setas: lida em direto
ii_row_heightinteger30A altura de uma linha em píxeis, de 22 a 60; outro valor é recusado (of_get_last_error)
is_theme_stylestring""Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança
is_theme_modestring""Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque da aplicação, ou o do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido

Propriedades de uma tarefa — n_pbt_gantt_task #

O seu handle, através de of_task(endereço). Uma leitura pergunta ao diagrama o que a tarefa é agora; um valor escrito é mudo, como SetItem; ib_collapsed é uma ordem e lança ue_task_toggled. O seu of_count() conta as tarefas que contém e o seu of_keys_at(n) devolve o endereço da n-ésima.

PropriedadeTipoPredefiniçãoFunção
is_labelstring""O nome da tarefa, na grelha, ao lado da sua barra e na sua tooltip: texto formatado com etiquetas em todo o lado ([[1]] para um parêntese reto). Vazio, a tarefa mostra a sua chave
is_startstring—O primeiro dia, aaaa-mm-dd. Escrevê-lo desloca a tarefa: a sua duração mantém-se (escreva is_end depois para a mudar). Recusado para uma tarefa de resumo, que tira as suas datas do que contém, e para uma data inválida: of_get_last_error diz porquê
is_endstring—O último dia, incluído, aaaa-mm-dd: uma tarefa de 6 a 10 dura cinco dias. Recusado antes de is_start, para um marco (não tem fim próprio) e para uma tarefa de resumo
id_progressdouble0O progresso, em percentagem (de 0 a 100), desenhado na barra. Uma tarefa de resumo lê a média do que contém, ponderada pelas durações; escrevê-lo é recusado, também para um marco
ib_milestonebooleanfalsetrue: um marco, um dia desenhado como um losango, sem duração nem progresso. É um instante no fim do seu dia: ligado depois de uma tarefa que acaba nesse dia, a regra é cumprida; uma tarefa ligada depois dele começa no dia seguinte
ib_collapsedbooleanfalsetrue recolhe uma tarefa de resumo: as tarefas que contém saem da grelha. Segue-se ue_task_toggled, como num clique na sua seta. Só uma tarefa de resumo se recolhe: true numa tarefa que não contém nada é recusado (of_get_last_error). Lida em direto
ib_read_onlybooleanfalseO utilizador não pode nem arrastar esta tarefa, nem redimensioná-la, nem mudar o seu progresso, nem pedir a sua eliminação; o seu código continua a mudá-la
il_accentlong-1A cor da barra e do seu progresso, em RGB(r,g,b); prevalece sobre uma coluna ROLE_COLOR. -1 = o destaque do componente. Uma tarefa do caminho crítico desenhado mantém a cor de perigo
il_back_colorlong-1O fundo da tarefa: a sua linha na grelha e, como velatura pálida, a linha da sua barra no diagrama, em RGB(r,g,b). -1 = o do componente
il_text_colorlong-1A cor do texto da tarefa: na grelha e ao lado da sua barra. -1 = a do componente
il_back_color_hoverlong-1O fundo da linha da tarefa na grelha enquanto o ponteiro está por cima. -1 = o do componente
il_text_color_hoverlong-1A cor do texto da linha da tarefa na grelha enquanto o ponteiro está por cima. -1 = a do componente
of_duration ( ) → long——Devolve a sua duração em dias de calendário, o último dia incluído; 0 para um marco
of_is_summary ( ) → boolean——TRUE quando a tarefa contém outras: as suas datas e o seu progresso são calculados
of_is_critical ( ) → boolean——TRUE quando a tarefa está no caminho crítico: sem folga, um dia de atraso e o projeto acaba um dia depois. Responde quer ib_critical_path o desenhe quer não. A folga conta-se em dias úteis (is_work_days); uma tarefa de resumo nunca é crítica, as tarefas que contém podem sê-lo; uma tarefa terminada (100 %) nunca
of_position ( ) → long——Devolve o seu lugar entre as tarefas do seu pai, contado a partir de 1; 0 quando o diagrama não a contém
of_level ( ) → long——Devolve a sua profundidade: 1 para uma tarefa em cima, 2 para uma tarefa dentro dela…
of_predecessors ( ) → string——Os endereços das tarefas de que depende, unidos por |; vazio se não houver nenhuma
of_successors ( ) → string——Os endereços das tarefas que dependem dela, unidos por |; vazio se não houver nenhuma
of_is_late ( ) → boolean——Atrasada: o seu último dia é anterior a is_today e não está terminada (progresso abaixo de 100). Uma tarefa de resumo e um marco nunca o estão; responde quer ib_show_late o desenhe quer não
of_row ( ) → long——Devolve o número de linha de hoje, no DataStore de of_from_datastore, da linha de onde vem a tarefa — seja qual for a chave que teve de tomar, e após uma ordenação ou um filtro. 0 para uma tarefa acrescentada à mão ou cuja linha desapareceu
is_tooltipstring""Tooltip simples apresentado ao passar sobre o item
is_super_tooltip_titlestring""Título do tooltip enriquecido do item (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido do item (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido do item

Constantes #

ConstanteValorSignificado
SCALE_DAY"day"Uma coluna por dia
SCALE_WEEK"week"Uma coluna por semana — a escala por omissão
SCALE_MONTH"month"Uma coluna por mês
SCALE_QUARTER"quarter"Uma coluna por trimestre
COLUMN_NAME"name"O nome da tarefa, em árvore
COLUMN_START"start"O primeiro dia
COLUMN_END"end"O último dia
COLUMN_DURATION"duration"A duração em dias
COLUMN_PROGRESS"progress"O progresso em percentagem
DEP_FS"fs"Fim a início: a seguinte começa depois de a anterior terminar (a ligação habitual)
DEP_SS"ss"Início a início: começam juntas
DEP_FF"ff"Fim a fim: terminam juntas
DEP_SF"sf"Início a fim: a seguinte termina quando a anterior começa
CHANGE_MOVE"move"Uma deslocação: as duas datas
CHANGE_RESIZE"resize"Um novo fim
CHANGE_PROGRESS"progress"Um novo progresso
ROLE_KEY"key"A chave da tarefa (um identificador); sem ela, o RowID
ROLE_PARENT"parent"A chave da tarefa que a contém
ROLE_LABEL"label"O seu nome
ROLE_START"start"O seu primeiro dia
ROLE_END"end"O seu último dia (vazio: o primeiro)
ROLE_PROGRESS"progress"O seu progresso, de 0 a 100
ROLE_MILESTONE"milestone"Um marco quando o valor diz sim
ROLE_COLOR"color"A cor da sua barra
ROLE_PREDECESSORS"predecessors"As tarefas de que está à espera: "12, 14:ss, 15:fs+2" (um desfasamento em dias úteis escreve-se depois do tipo)

Métodos #

MétodoFunção
of_add_dependency (string as_from_keys, string as_to_keys)Acrescenta uma ligação fim a início: as_to_keys começa depois de as_from_keys terminar. Devolve 0 depois de acrescentada, -5 ou -2 como a forma de três argumentos
of_add_dependency (string as_from_keys, string as_to_keys, string as_type)Acrescenta uma ligação do tipo DEP_FS, DEP_SS, DEP_FF ou DEP_SF, desenhada como seta. Devolve 0 depois de acrescentada, -5 para uma tarefa desconhecida, uma ligação a si mesma ou entre uma tarefa e o que ela contém, uma ligação já existente (seja qual for o tipo), uma que fecharia um ciclo ou um tipo desconhecido, -2 quando o componente não está criado
of_add_dependency (string as_from_keys, string as_to_keys, string as_type, long al_lag)A mesma ligação com um desfasamento em dias úteis (is_work_days, menos os feriados): 2 deixa dois dias úteis entre o fim de uma e o início da outra, um número negativo é uma antecipação. A regra da seta e o caminho crítico contam-no. Devolve 0 depois de acrescentada, -5 como a forma de três argumentos ou para um desfasamento de mais de 999 dias, -2 quando o componente não está criado
of_add_holiday (string as_date)Acrescenta um feriado sem nome. Devolve 0 depois de acrescentado, -5 ou -2 como a forma de dois argumentos
of_add_holiday (string as_date, string as_label)Acrescenta um feriado, aaaa-mm-dd: um dia de folga diga o que disser is_work_days, sombreado como um fim de semana, nomeado por as_label na tooltip do seu dia na escala dia; a folga do caminho crítico e o desfasamento de uma ligação não o contam. Um a um; of_clear mantém-no, of_reset apaga-o. Devolve 0 depois de acrescentado, -5 para uma data inválida ou um dia já feriado, -2 quando o componente não está criado
of_add_holiday (date ad_date, string as_label)O mesmo a partir de uma date do PowerBuilder. Devolve 0 depois de acrescentado, -5 também para uma data nula
of_add_marker (string as_key, string as_date, string as_label)Acrescenta um marcador vertical na cor do texto atenuado. Devolve 0 depois de acrescentado, -5 ou -2 como a forma de quatro argumentos
of_add_marker (string as_key, string as_date, string as_label, long al_color)Acrescenta um marcador vertical: uma linha tracejada no fim do seu dia (um prazo vale até ao fim do seu dia, como um marco), a sua etiqueta — texto formatado com etiquetas — em cima do diagrama: um prazo contratual, o fim de um sprint, um congelamento. al_color é uma cor RGB(), -1 para a cor do texto atenuado. Devolve 0 depois de acrescentado, -5 para uma chave que não pode sê-lo (vazia, com / ou |), uma chave já usada ou uma data inválida, -2 quando o componente não está criado
of_add_milestone (string as_keys, string as_label, string as_date)Acrescenta um marco no seu endereço: um dia, um losango, sem duração. Devolve 0 depois de acrescentado, -5 como of_add_task, -2 quando o componente não está criado
of_add_milestone (string as_keys, string as_label, date ad_date)O mesmo a partir de uma date do PowerBuilder. Devolve 0 depois de acrescentado, -5 também para uma data nula
of_add_task (string as_keys, string as_label, string as_start, string as_end)Acrescenta uma tarefa no seu endereço: "phase1" em cima, "phase1/design" dentro da tarefa "phase1", acrescentada primeiro (torna-se uma tarefa de resumo). Datas aaaa-mm-dd, o fim incluído ("": um dia). Devolve 0 depois de acrescentada, -5 para um endereço com um nível vazio ou uma chave com |, um endereço já ocupado, um pai desconhecido, uma data inválida ou um fim antes do início, -2 quando o componente não está criado
of_add_task (string as_keys, string as_label, date ad_start, date ad_end)O mesmo a partir de dois date do PowerBuilder, sendo o fim o último dia, incluído. Devolve 0 depois de acrescentada, -5 também para um início nulo (um fim nulo: um dia)
of_clear ( )Esvazia o diagrama: tarefas, ligações, os seus handles e as linhas do DataStore (continua ligado, para um novo of_from_datastore; of_reload_row recusa até lá); as opções ficam. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_clear_dependencies ( )Retira todas as ligações; as tarefas ficam. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_clear_holidays ( )Retira todos os feriados: só is_work_days diz quais são os dias úteis. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_clear_markers ( )Retira todos os marcadores; of_clear mantém-nos, como os feriados. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_clear_selection ( )Não deixa nenhuma tarefa selecionada: segue-se ue_selection_changed com um endereço vazio; nada selecionado, nada é levantado. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_collapse_all ( )Recolhe todas as tarefas de resumo: segue-se ue_task_toggled para cada uma das que estavam abertas, depois ue_layout_changed uma vez. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_dependency_lag (string as_from_keys, string as_to_keys)Devolve o desfasamento da ligação de uma tarefa para outra, em dias úteis, lido em direto: negativo para uma antecipação, 0 sem desfasamento ou sem ligação
of_dependency_type (string as_from_keys, string as_to_keys)O tipo da ligação de uma tarefa para outra (DEP_FS…), vazio se não houver nenhuma. Lido em direto
of_expand_all ( )Abre todas as tarefas de resumo: segue-se ue_task_toggled para cada uma das que estavam recolhidas, depois ue_layout_changed uma vez. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_from_datastore (datastore ads)Faz uma tarefa de cada linha do DataStore (ver acima). As tarefas de um carregamento anterior saem, as acrescentadas à mão ficam, e os seus handles também. Devolve 0 depois de carregado, -5 quando o DataStore não é válido ou não tem colunas, -2 quando o componente não está criado
of_from_datastore (datawindow adw)O mesmo a partir das linhas de um DataWindow — o que o utilizador vê ao lado: ib_write_back escreve neste DataWindow. Um DataWindow que não pode partilhar os seus dados é recusado. Devolve 0 depois de carregado, -5 quando o DataWindow não é válido, não tem colunas ou não se partilha, -2 quando o componente não está criado
of_from_datastore (datawindowchild adwc)O mesmo a partir das linhas de um DataWindowChild (uma lista pendente DataWindow, um relatório aninhado), reescrito por ib_write_back. Devolve 0 depois de carregado, -5 quando não é válido, não tem colunas ou não se partilha, -2 quando o componente não está criado
of_get_field (string as_keys, string as_field)Lê um campo de uma tarefa, em direto: um dos seus, uma coluna do seu DataStore ou um campo integrado (duration, critical…) — que devolve o texto mostrado e oculta uma coluna com o mesmo nome. Uma cadeia vazia quando não o tem
of_get_last_error ( )Porque foi recusada a última escrita de uma propriedade (uma data inválida, as datas de uma tarefa de resumo, uma escala ou uma coluna desconhecida); caso contrário, o último erro da biblioteca
of_get_layout ( )O que o utilizador organizou, em JSON: {"scale":"week","gridWidth":-1,"columns":[{"key":"name","width":200},...],"collapsed":["phase2"]} — a escala, a largura da grelha e de cada coluna, os resumos recolhidos. Para guardar e depois devolver a of_set_layout. Lido em direto
of_holidays ( )Os feriados, lidos em direto: aaaa-mm-dd unidos por |, por ordem de data; vazio se não houver nenhum
of_map (string as_role, string as_column)Dá um papel a uma coluna do DataStore (ROLE_KEY, ROLE_PARENT, ROLE_LABEL, ROLE_START, ROLE_END, ROLE_PROGRESS, ROLE_MILESTONE, ROLE_COLOR, ROLE_PREDECESSORS), antes ou depois de of_from_datastore: depois, as linhas são relidas. Uma coluna vazia devolve o papel à coluna que tem o seu nome. O que foi definido nas tarefas fica (recolha, só de leitura, campos, cores, ligações acrescentadas pelo código). Um novo ROLE_KEY ou ROLE_PARENT dá novos endereços às tarefas das linhas: os seus handles são libertados, os das tarefas acrescentadas à mão ficam. Devolve 0 depois de definido, -5 para um papel desconhecido ou uma coluna que o DataStore não tem, -2 quando o componente não está criado
of_markers ( )As chaves dos marcadores, lidas em direto, pela sua ordem, unidas por |; vazio se não houver nenhum
of_reload_row (long al_row)Volta a enviar para o diagrama uma linha do DataStore de of_from_datastore, relida agora, depois de o seu código a ter alterado (SetItem, uma janela de edição); al_row é o seu número de linha hoje. A tarefa segue a sua linha no lugar: o que foi definido nela (recolha, só de leitura, campos, cores, ligações acrescentadas pelo código) fica, um arrasto em curso continua, nada é levantado. Uma linha cuja chave ou cujo pai mudou desloca a sua tarefa, com o que foi definido nela; uma linha inserida entretanto também chega. Devolve 0 depois de enviada, -5 quando nenhum DataStore está ligado, o diagrama não tem linhas desde of_clear ou a linha não existe (of_get_last_error diz qual), -2 quando o componente não está criado
of_remove_dependency (string as_from_keys, string as_to_keys)Retira a ligação de uma tarefa para outra. Devolve 0 depois de retirada, -5 para uma ligação que o diagrama não tem, -2 quando o componente não está criado
of_remove_holiday (string as_date)O dia volta a ser útil. Devolve 0 depois de retirado, -5 para um dia que não é feriado deste diagrama, -2 quando o componente não está criado
of_remove_marker (string as_key)Retira um marcador. Devolve 0 depois de retirado, -5 para uma chave que este diagrama não tem, -2 quando o componente não está criado
of_remove_task (string as_keys)Retira uma tarefa, tudo o que ela contém e cada ligação que as toca, e liberta os seus handles; retirar a tarefa selecionada esvazia a seleção. A tarefa de uma linha de DataStore fica de fora até ao próximo of_from_datastore; of_reload_row da sua linha trá-la de volta. Devolve 0 depois de retirada, -5 para um endereço que o diagrama não tem, -2 quando o componente não está criado
of_reset ( )Esvazia o diagrama, esquece o DataStore e repõe cada propriedade no seu valor por omissão, cada coluna na sua largura. Devolve 0 depois de aplicado, -2 quando o componente não está criado
of_scroll_to_date (string as_date)Desloca o eixo do tempo até esse dia (aaaa-mm-dd), colocado no primeiro terço da vista. Devolve 0 depois de aplicado, -5 para uma data inválida, -2 quando o componente não está criado
of_scroll_to_task (string as_keys)Mostra uma tarefa: as tarefas de resumo que a contêm abrem-se (ue_task_toggled para cada uma), depois o diagrama desloca-se até à sua linha e à sua barra. Devolve 0 depois de aplicado, -5 para uma tarefa que o diagrama não tem, -2 quando o componente não está criado
of_select_task (string as_keys)Seleciona uma tarefa como um clique, sem deslocar a vista (como SelectRow de um DataWindow), e segue-se ue_selection_changed. Devolve 0 depois de selecionada (ou já selecionada: nada é levantado), -5 para uma tarefa desconhecida ou não desenhada (dentro de uma tarefa de resumo recolhida, para lá do limite de demonstração), -2 quando o componente não está criado
of_selected_key ( )O endereço da tarefa selecionada, seja quem for que a selecionou; vazio se nenhuma. Lido em direto
of_set_field (string as_keys, string as_field, string as_value)Dá a uma tarefa um campo seu, para os modelos; prevalece sobre uma coluna do DataStore com o mesmo nome. Um nome de campo: letras, algarismos e _, sem algarismo inicial. Devolve 0 depois de definido, -5 para uma tarefa desconhecida, um nome inválido ou o nome de um campo integrado (label, start…), -2 quando o componente não está criado
of_set_layout (string as_layout_json)Devolve uma disposição lida com of_get_layout ou recebida por ue_layout_changed: a escala, as larguras e quais os resumos recolhidos (os que não nomeia abrem-se); uma coluna ou uma tarefa desconhecida do diagrama é ignorada. ue_layout_changed é levantado uma vez se algo mudou (nem ue_task_toggled nem ue_scale_changed: repõe um estado). Devolve 0 depois de aplicada, -5 quando o texto está vazio ou não é um objeto JSON, -2 quando o componente não está criado
of_task (string as_keys)Devolve o handle de uma tarefa, pelo seu endereço (criado no primeiro acesso, libertado quando a tarefa é retirada)

Eventos #

EventoAcionado quando
ue_task_moved (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)O utilizador deslocou uma tarefa: a sua barra arrastada, ou Ctrl + Esquerda / Direita. as_start e as_end são os seus novos dias, as_old_start e as_old_end os que tinha, aaaa-mm-dd — o que um registo ou uma anulação precisa. A tarefa já está no seu lugar; com ib_write_back, o DataStore já está escrito. Uma data escrita pelo seu código não levanta nada
ue_task_resized (string as_keys, string as_start, string as_end, string as_old_start, string as_old_end)O utilizador mudou o fim de uma tarefa: o bordo final da sua barra arrastado, ou Ctrl + Shift + Esquerda / Direita. Os dias anteriores vêm com os novos
ue_progress_changed (string as_keys, double ad_progress, double ad_old_progress)O utilizador mudou o progresso de uma tarefa: o pequeno triângulo por baixo da sua barra arrastado, ou Ctrl + Cima / Baixo (10 pontos). ad_progress é o novo, em percentagem, ad_old_progress o que tinha
ue_task_changing (string as_keys, string as_kind, string as_start, string as_end, double ad_progress) → booleanCancelável, colocado antes de uma deslocação, um novo fim ou um progresso do utilizador, só quando ib_veto_changes = true. as_kind diz qual: CHANGE_MOVE, CHANGE_RESIZE ou CHANGE_PROGRESS; os valores são os que a tarefa tomaria. Devolver FALSE deixa-a como estava
ue_task_clicked (string as_keys)Uma tarefa foi clicada (e selecionada): a sua linha na grelha ou a sua barra. Não no fim de um arrasto
ue_task_opened (string as_keys)Duplo clique numa tarefa, ou Enter: abra o seu editor. Um duplo clique na linha de uma tarefa de resumo recolhe-a ou abre-a em vez disso
ue_task_rclicked (string as_keys, long al_x, long al_y)Clique direito numa tarefa (selecionada primeiro), ou a tecla Menu (Shift + F10) na tarefa selecionada. al_x, al_y são píxeis do ecrã; para um menu PowerBuilder, PopMenu(PointerX(), PointerY()) da sua janela
ue_selection_changed (string as_from_keys, string as_keys)A tarefa selecionada mudou: clique, teclado, o seu código (of_select_task, of_clear_selection), ou a tarefa selecionada saiu da grelha (retirada, dentro de uma tarefa de resumo recolhida: as_keys fica então vazio)
ue_task_toggled (string as_keys, boolean ab_collapsed)Uma tarefa de resumo recolheu-se (ab_collapsed = TRUE) ou abriu-se: a sua seta, um duplo clique na sua linha, o teclado, o seu ib_collapsed definido pelo seu código, of_expand_all, of_collapse_all, of_scroll_to_task
ue_delete_requested (string as_keys)Delete foi premida na tarefa selecionada. O diagrama não retira nada: of_remove_task depois de a sua aplicação concordar. Nunca numa tarefa ou num diagrama só de leitura
ue_link_requested (string as_from_keys, string as_to_keys, string as_type)O utilizador traçou uma ligação de uma tarefa para outra (ib_link_by_mouse); as_type é uma das constantes DEP_. O diagrama não acrescenta nada: of_add_dependency depois de a sua aplicação concordar
ue_dependency_clicked (string as_from_keys, string as_to_keys, string as_type)Uma seta entre duas tarefas foi clicada
ue_scale_changed (string as_scale)A escala mudou: a barra de ferramentas, Ctrl + roda, ou is_scale definido pelo seu código
ue_layout_changed (string as_layout_json)A disposição mudou: a escala, a largura da grelha ou de uma coluna, um resumo recolhido ou aberto (pelo utilizador ou pelo seu código), ou of_set_layout. as_layout_json é a disposição inteira, tal como of_get_layout a devolve: guarde-a
ue_write_back_failed (string as_keys, string as_col, string as_value, string as_reason)ib_write_back: o DataStore recusou um novo valor de uma tarefa (um tipo que a sua coluna não aceita, uma linha eliminada desde o carregamento). A tarefa voltou a como estava, e o evento do gesto não é levantado
ue_ready ( )O componente terminou o carregamento; tudo o que foi enviado antes foi reproduzido
ue_runtime_missing ( )O runtime WebView2 está ausente: o componente permanece vazio
ue_bg_color (long al_color)O componente calculou a cor de fundo do respetivo tema; o userobject já a adotou (backcolor)

Teclado e rato #


Exemplos #

Regras de planeamento #

// 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

Ligações traçadas com o rato #

// 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)

Reencontrar a disposição no próximo arranque #

// 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)

Abrir uma tarefa na sua janela #

// 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)

Boas práticas #

Herdado da base comum #

Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.

MembrosFunçãoDetalhado em
of_count · of_keys_at · of_hasPercorrer o que o componente contém3.2 Os items
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades
is_accessible_name · is_accessible_descriptionO nome e a descrição que um leitor de ecrã diz3.4 Propriedades e eventos opcionais

Duas ajudas não são herdadas: of_icon e of_escape_markup vivem em n_pbt_utils. Declare um — n_pbt_utils lnv_utils, nada a criar — e chame-as nele.

← Referência dos componentes · Índice do guia