Delphi, C++ Builder & .NET Parte do sgcUI

sgcPlanner, Agenda, Gantt e Kanban para Delphi, C++ Builder & .NET

Três visões do mesmo plano. Mostre-o como um calendário para a equipe, como um gráfico de Gantt para o gerente de projeto e como um quadro Kanban para quem faz o trabalho, todas vinculadas a um único objeto de dados. Arraste um cartão para Concluído e a barra do Gantt e a cor do calendário o acompanham de imediato.

VCL, FireMonkey, WinForms, WPF, Avalonia10.000 tarefas com agendamento automático em 11 ms no Win64Edição .NET Community gratuitaIncluído no sgcUI Enterprise
Demo ProjectPlanner: as mesmas tarefas em um quadro Kanban, em um gráfico de Gantt e em uma agenda

Um plano, três visões

Treze recursos para a equipe, o gerente de projeto e quem faz o trabalho. Os recursos marcados como Registrada não estão na edição .NET Community gratuita.

Um modelo de dados

Todas as visões leem e gravam o mesmo TsgcPlannerData.

Um modelo de dados

Três visões, um objeto de dados, sempre sincronizados

Um calendário, um gráfico de projeto e um quadro de tarefas nunca devem se contradizer. O sgcPlanner vincula qualquer número de visões a um único objeto de dados: um cartão arrastado para Concluído no quadro é desenhado na cor de Concluído no Gantt e na agenda de imediato, uma barra movida no Gantt move o evento no calendário e um evento criado na agenda vira um cartão. Cada edição é uma única atualização, então cada visão é redesenhada uma só vez por soltura.

  • TsgcPlannerData guarda o plano, e cada visão aponta para ele por meio de Data
  • BarColorMode pbcStatus colore as barras do Gantt por status, como faz o quadro
  • SyncSelection compartilha o item selecionado por meio de SelectedId
  • O mesmo modelo funciona sem nenhuma visão, em um serviço ou em um teste de unidade
  • Da direita para a esquerda para árabe e hebraico: as colunas do Scheduler e do Kanban fluem a partir da direita, o grid de tarefas do Gantt passa para a direita, e MirrorTimeline faz o eixo de tempo do Gantt correr também a partir da direita
Ler o tópico da ajuda
Demo DataSetPlanner: linhas de dataset e as visões do plano vinculadas a elas

Um modelo de dados

Vincule um TDataSet, salve JSON, renderize PNG

Seu plano já está em um banco de dados, e o sgcPlanner o encontra ali. Uma fonte DataSet vincula o objeto de dados a qualquer TDataSet, como FireDAC, TClientDataSet ou dbExpress, carrega itens, recursos e dependências, acompanha as alterações dos datasets e grava de volta as edições feitas nas visões. A persistência em JSON funciona em todas as edições e em todas as plataformas, e o renderizador headless desenha qualquer visão em PNG ou SVG em um servidor, inclusive no Linux64.

  • TsgcPlannerSource_DataSet mapeia os nomes dos seus campos por meio de ItemFields
  • SaveToFile e LoadFromFile gravam e leem o formato JSON documentado
  • TsgcPlannerRenderer desenha a agenda, o Gantt ou o Kanban sem uma janela
  • Usa apenas a unit DB, então funciona em VCL, FireMonkey e aplicativos de console
Ler o tópico da ajuda

Um modelo de dados

Desfaça e refaça cada alteração do plano

Um arrastar errado nunca deveria custar a tarde de um planejador. O objeto de dados registra cada inclusão, exclusão, alteração de propriedade e movimentação de um item, de um recurso, de um status ou de uma dependência, quem quer que a faça: um arrastar em uma visão, uma edição no local, o Smart Paste, o motor de agendamento ou o seu próprio código. Todas as visões vinculadas aos dados compartilham um único histórico, e um grupo de alterações, como uma passada inteira de reagendamento, é desfeito em um só passo.

  • Data.Undo com Undo, Redo, CanUndo e CanRedo
  • BeginGroup e EndGroup transformam muitas alterações em um só passo
  • UndoCaption e RedoCaption nomeiam o próximo passo para um item de menu ou uma dica
  • Limit limita o histórico, e OnChange atualiza os botões
Ler o tópico da ajuda

Um modelo de dados

Digite o título direto na visão

Abrir uma caixa de diálogo para renomear um item atrasa as pessoas. Com a edição no local, F2 edita o título do item selecionado em um pequeno editor colocado sobre ele, e um compromisso criado arrastando sobre um espaço vazio da agenda abre o seu editor de título na hora, de modo que o usuário arrasta e digita. Funciona da mesma forma na agenda, no Gantt e no quadro Kanban, e cada edição é registrada pelo histórico de desfazer.

  • InplaceEdit o ativa, e ele vem desativado por padrão
  • F2 edita o item selecionado, Enter aceita e Escape cancela
  • BeginEdit abre o editor a partir de um item de menu seu
  • IsEditing avisa as teclas do formulário, como Ctrl+Z, para esperarem enquanto o usuário digita
Ler o tópico da ajuda

Agenda: reuniões, pessoas e salas

TsgcVCLScheduler e TsgcFMXScheduler, e as mesmas visões no .NET.

Visão de dia do TsgcVCLScheduler
Visão de semana útil do TsgcVCLScheduler
Visão de semana do TsgcVCLScheduler
Visão de mês do TsgcVCLScheduler
Visão de pauta do TsgcVCLScheduler
Visão de linha do tempo de recursos do TsgcVCLScheduler

Agenda: reuniões, pessoas e salas

Sete visões de calendário, pessoas e salas lado a lado

Os usuários já sabem como um calendário deve se comportar, então a agenda oferece as visões que eles esperam: dia, semana útil, semana, mês, ano, pauta e uma linha do tempo de recursos. A visão de ano mostra doze mini meses com cada dia sombreado conforme o quanto está ocupado, e um clique duplo abre esse dia. Adicione pessoas, salas ou máquinas como recursos, cada um com a sua cor, e agrupe o dia ou a semana por recurso, de modo que uma clínica veja cada médico em uma coluna e uma oficina veja cada baia. O horário de trabalho, o intervalo de dias visível e a navegação são propriedades e chamadas de uma linha.

  • View: psvDay, psvWorkWeek, psvWeek, psvMonth, psvYear, psvAgenda, psvTimeline
  • AddResource com uma cor, e Options.GroupByResource para uma coluna cada
  • DayStartHour, DayEndHour e SlotMinutes definem a grade de horários
  • GoToday, Prior, Next e ScrollToTime permitem navegar

A visão Timeline de recursos é Registrada; na Community essa visão mostra um aviso.

Ler o tópico da ajuda

Agenda: reuniões, pessoas e salas

Arraste para criar, mover e redimensionar

Marcar uma reunião deve ser como desenhá-la. Arraste sobre horários vazios e a agenda cria um evento, e o seu manipulador OnItemCreate define o título ou recusa o horário. Arraste um evento para outro horário, dia ou coluna de recurso, ou puxe uma borda para mudar a duração, e cada movimento se ajusta ao tamanho do intervalo. Os mesmos gestos funcionam nas outras visões: as barras se movem e se redimensionam no Gantt, e os cartões passam de uma coluna a outra no quadro.

  • OnItemCreate nomeia ou recusa um novo evento
  • Movimentos e redimensionamentos se ajustam a Options.SlotMinutes
  • Uma prévia acompanha o ponteiro, a visão rola nas bordas e Esc cancela
  • Mouse, caneta e toque; OnCardMoving pode vetar um movimento no quadro
Ler o tópico da ajuda
Visão de mês com uma reunião diária semanal em todas as terças-feiras

Agenda: reuniões, pessoas e salas Somente Registrada

Reuniões recorrentes a partir de regras padrão

Uma reunião diária semanal ou uma revisão mensal deve ser cadastrada uma só vez. Dê a um item uma RRULE do iCalendar e a agenda mostra cada ocorrência em qualquer visão e em qualquer período. A regra segue o formato RFC 5545 que o Google Calendar, o Outlook e o Apple Calendar usam, de modo que os eventos recorrentes mantêm a regra ao importar ou exportar arquivos .ics, e o seu código pode pedir ao objeto de dados as ocorrências de qualquer intervalo de datas, por exemplo para verificar conflitos em uma sala.

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' repete toda terça-feira
  • O Start e o Finish do item são a primeira ocorrência
  • GetOccurrences retorna as ocorrências de qualquer período
  • Importado e exportado com arquivos iCalendar

A Community mostra um item recorrente uma só vez e mantém a sua regra.

Ler o tópico da ajuda
Demo ICalSubscription com um calendário de feriados mesclado na agenda

Agenda: reuniões, pessoas e salas Somente Registrada

Google Calendar, Outlook, CalDAV e .ics de entrada e de saída

Os compromissos dos seus usuários já estão em outros calendários. O TsgcPlannerICalendar importa e exporta arquivos .ics, o formato do Google Calendar, do Outlook e do Apple Calendar. Com a ponte sgcPlannerWS, uma assinatura acompanha qualquer URL .ics somente leitura, como uma lista de feriados ou um calendário compartilhado, e três componentes de sincronização mantêm um plano alinhado nos dois sentidos com um Google Calendar, com um calendário do Outlook do Microsoft 365 ou do Outlook.com por meio do Microsoft Graph, ou com um calendário CalDAV do Nextcloud, do iCloud, do Fastmail, do Radicale ou de qualquer outro servidor CalDAV. Cada um lê somente as alterações desde a última sincronização e tem uma regra clara de conflito.

  • TsgcPlannerICalendar com ImportFromFile e ExportToFile
  • TsgcPlannerICalSubscription com URL e RefreshInterval, usando ETag e If-Modified-Since
  • TsgcPlannerGoogleSync com CalendarId, Direction e AutoSyncInterval
  • TsgcPlannerGraphSync com CalendarId e um AccessToken OAuth2, usando a consulta delta do Graph
  • TsgcPlannerCalDAVSync com CalendarURL, UserName e Password, usando tokens de sincronização e ETags
  • A alteração mais recente vence um conflito, e OnConflict pode decidir de outra forma

Edição Registrada. Os componentes de ponte também exigem um sgcWebSockets registrado; no .NET eles estão em esegece.sgcPlanner.sgcWebSockets.

Ler o tópico da ajuda

Agenda: reuniões, pessoas e salas

Lembretes com adiar e dispensar

Uma reunião de que ninguém se lembra é uma reunião a que ninguém comparece. Dê a um item um lembrete em minutos antes do início, e o TsgcPlannerReminders encontra os lembretes que venceram e dispara um evento para cada um. O seu aplicativo o chama a partir de um timer próprio e decide como o lembrete é mostrado, um popup, um toast ou um som. Um item recorrente lembra de novo em cada ocorrência, e um lembrete pode ser adiado ou dispensado.

  • ReminderMinutes do item: -1 para nenhum, 0 no início
  • Check dispara OnReminder para cada lembrete vencido
  • Snooze e Dismiss para a ocorrência atual ou a próxima
  • Salvo em JSON e registrado pelo histórico de desfazer
Ler o tópico da ajuda

Agenda: reuniões, pessoas e salas

Fusos horários por item

Equipes espalhadas por escritórios marcam reuniões no seu próprio horário local. Cada item pode ter o seu próprio fuso horário, de modo que uma chamada marcada para as 10:00 em Nova York continua às 10:00 no horário de Nova York, enquanto as visões mostram todos os itens em um único fuso de exibição. Mude o fuso de exibição e os itens passam para o horário de relógio do novo fuso, enquanto os itens flutuantes e de dia inteiro ficam onde estão.

  • Item.TimeZone é o fuso de Start e Finish, vazio para um item flutuante
  • Data.DisplayTimeZone é o fuso que as visões mostram, vazio para o fuso local
  • A conversão acontece somente quando os itens são mostrados
  • Os lembretes também rodam no fuso de exibição
Ler o tópico da ajuda

Gantt: planeje projetos e siga o caminho crítico

TsgcVCLGantt e TsgcFMXGantt: tarefas, vínculos, uma escala de tempo e um motor de agendamento.

Demo ProjectGantt: árvore de EAP com vínculos de término para início e de início para início

Gantt: planeje projetos e siga o caminho crítico Somente Registrada

Gráficos de Gantt com dependências e defasagem

O Gantt mostra uma árvore de EAP com linhas de resumo, marcos e o progresso em cada barra, e desenha os vínculos entre as tarefas como setas. Vincule tarefas no código ou arrastando do fim de uma barra até outra, escolha término para início, início para início, término para término ou início para término, e adicione uma defasagem em tempo útil. A escala de tempo faz zoom de 5 minutos a anos.

  • EAP por meio de ParentId, consolidada com UpdateSummaries
  • AddDependency com TsgcPlannerDependencyKind: pdkFS, pdkSS, pdkFF, pdkSF
  • Lag contado no calendário de trabalho
  • Milestone e Progress em cada item, TimeScale para o zoom

A Community guarda e salva os vínculos, mas não os desenha, e arrastar para vincular é Registrada.

Ler o tópico da ajuda
Gantt com o caminho crítico destacado e feriados sombreados a partir do calendário de trabalho

Gantt: planeje projetos e siga o caminho crítico Somente Registrada

Agende automaticamente e veja o caminho crítico

Quando uma tarefa atrasa, o gerente de projeto precisa da nova data de término agora, e não depois de uma tarde movendo barras. O motor de agendamento posiciona cada tarefa o mais cedo possível após as suas predecessoras no calendário de trabalho, pulando dias não úteis e feriados, calcula a folga de cada tarefa e marca o caminho crítico, a cadeia de tarefas que define o fim do projeto. Execute-o sob demanda, após cada edição, ou sobre um objeto de dados sem nenhuma visão.

  • Schedule executa o motor, AutoSchedule o executa após cada edição
  • ShowCriticalPath destaca as tarefas que determinam a data de término
  • TotalSlack informa os minutos úteis que uma tarefa pode atrasar
  • O calendário de trabalho define WorkDays, WorkTime e Holidays

Na Community, Schedule gera EsgcPlannerError e ShowCriticalPath não tem efeito.

Ler o tópico da ajuda
Gantt com barras cinzas de linha de base sob as barras atuais e duas tarefas atrasadas

Gantt: planeje projetos e siga o caminho crítico Somente Registrada

As linhas de base mostram o atraso de relance

As partes interessadas raramente perguntam qual é o plano; perguntam o quanto ele se moveu. Salve uma linha de base quando o plano for aprovado e o Gantt a desenha como uma barra fina sob cada barra atual, de modo que uma tarefa atrasada fica visível sem ler uma única data. As datas da linha de base são guardadas com os itens, salvas em JSON e trocadas com o Microsoft Project XML, e o seu código pode lê-las para montar o seu próprio relatório de variação.

  • SetBaseline copia Start e Finish de cada item em uma única atualização
  • ShowBaseline desenha as barras da linha de base
  • BaselineStart e BaselineFinish em cada item
  • Salvas em JSON e lidas do Microsoft Project XML

A Community guarda e salva as datas da linha de base, mas não as desenha; SetBaseline gera EsgcPlannerError.

Ler o tópico da ajuda

Gantt: planeje projetos e siga o caminho crítico Somente Registrada

Troque planos com o Microsoft Project

Os escritórios de projetos recebem planos do Microsoft Project e os devolvem. O TsgcPlannerMSProject importa e exporta o Microsoft Project XML (MSPDI), o formato XML que o Project abre e salva, com tarefas, vínculos, o calendário, recursos, atribuições e linhas de base. Uma importação pode substituir o plano ou mesclar-se a ele, e um documento malformado gera um erro com o número da linha. Importar 10.000 tarefas com 15.000 vínculos levou 264 ms em uma medição de desenvolvimento no Win64. Recursos e atribuições vêm junto com as tarefas.

  • ImportFromFile, ImportFromStream e ImportFromString
  • ExportToFile grava o XML que o Microsoft Project abre
  • ImportMode: pmiReplace (padrão) ou pmiMerge
  • XML malformado gera EsgcPlannerError com o número da linha

Não está na edição Community, onde o JSON é o formato de arquivo.

Ler o tópico da ajuda

Gantt: planeje projetos e siga o caminho crítico

Uma escala de tempo de três níveis e um histograma de recursos

Planos longos se leem melhor com mais contexto no cabeçalho, e pessoas sobrecarregadas devem ficar visíveis antes de o plano ser publicado. A escala de tempo do Gantt pode mostrar um terceiro nível, por exemplo o mês sobre as semanas sobre os dias. Um painel de histograma na parte inferior do gráfico desenha, para cada marcação, quanto trabalho cada recurso tem em relação ao seu tempo de trabalho, e a parte acima de 100% é pintada na cor crítica.

  • TimeScale.TierCount 3 adiciona um nível superior, com TopFormat para os seus rótulos
  • ShowHistogram e HistogramHeight mostram o painel
  • HistogramResourceId mostra um recurso, ou todos os recursos empilhados, cada um na sua cor
  • O painel acompanha a rolagem e o zoom do gráfico
Ler o tópico da ajuda

Kanban: quadros que seguem o plano

TsgcVCLKanban e TsgcFMXKanban: uma coluna por status, sobre os mesmos dados do Gantt.

Quadro Kanban com cinco colunas de status, etiquetas, iniciais dos responsáveis, datas de entrega e barras de progresso

Kanban: quadros que seguem o plano

Um quadro de tarefas em que a sua equipe pode trabalhar

Quem faz o trabalho quer um quadro, não um gráfico. A visão Kanban cria uma coluna por status, com um selo de contagem e uma seta de recolher, e cada cartão mostra o título, as etiquetas, as iniciais do recurso, a data de entrega e o progresso. Soltar um cartão em outra coluna muda o status e a posição dele nos dados compartilhados, então o Gantt e a agenda se atualizam de imediato, e o seu código pode vetar qualquer movimento antes que aconteça. O quadro segue o mesmo tema claro ou escuro das outras visões.

  • ColumnSource cria as colunas a partir dos status, ou a partir das suas próprias Columns
  • CardOptions escolhe o que um cartão mostra
  • OnCardMoving aceita ou recusa uma soltura
  • A largura das colunas e o recolhimento funcionam em todas as edições
Ler o tópico da ajuda
Demo TaskBoard: cinco colunas, três raias por recurso e uma coluna acima do limite

Kanban: quadros que seguem o plano Somente Registrada

Raias e limites de WIP mantêm o trabalho fluindo

As raias dividem o quadro em faixas horizontais por recurso, tarefa pai ou etiqueta, de modo que cada pessoa ou épico tenha uma linha, e os limites de trabalho em andamento limitam cada coluna, contados em todas as raias. No modo de aviso, uma coluna acima do limite é marcada; no modo de bloqueio, um cartão que ultrapassaria o limite não pode ser solto. Dispor 5.000 cartões em 8 colunas e 6 raias levou 5 ms no Win64.

  • SwimlaneBy: pslResource, pslParent ou pslTag
  • WIPLimit por entrada de coluna, 0 para sem limite
  • WIPMode: pwmWarn marca a coluna, pwmBlock recusa a soltura
  • As raias e os limites funcionam sobre os mesmos dados das outras visões

A Community ignora SwimlaneBy e os limites de WIP; as colunas, as larguras e o recolhimento funcionam.

Ler o tópico da ajuda

Acessibilidade

UI Automation para leitores de tela, o teclado e o alto contraste, sem nenhuma configuração.

Acessibilidade

Todas as visões do planejador, legíveis e operáveis sem um mouse

O sgcPlanner expõe as visões Scheduler, Timeline, Gantt e Kanban ao Microsoft UI Automation: dias, raias e colunas, os itens com seus horários e as dependências do Gantt. Tudo o que se arrasta com o mouse também pode ser feito com o teclado.

  • Scheduler e Timeline: Ins adiciona um item no intervalo com foco, Del o exclui, Ctrl+Setas movem o item e Ctrl+Shift+Setas mudam seu fim
  • Gantt: Ctrl+Left e Ctrl+Right movem a tarefa um tique, Ctrl+K inicia uma dependência, Ctrl+Shift+K percorre as dependências da tarefa com foco
  • Kanban: Ctrl+Left e Ctrl+Right movem o cartão para a coluna adjacente, Ctrl+Up e Ctrl+Down o reordenam
  • Sob um tema de alto contraste do Windows, as cores dos itens da aplicação são substituídas por cores do sistema com contornos, de modo que nenhuma informação depende apenas da cor

A acessibilidade vem ativada por padrão em todas as edições, inclusive a edição Community gratuita, no VCL em todas as versões do Delphi e do C++Builder do Delphi 7 ao Delphi 13, no FireMonkey no Windows e no WinForms, WPF e Avalonia. No Delphi e no C++Builder, AccessibleName e AccessibleDescription definem o nome e a descrição expostos ao UI Automation, e no .NET o nome acessível e o texto de ajuda padrão de cada framework fazem o mesmo. Veja os relatórios de conformidade de acessibilidade.

Leia o tópico da ajuda

Veja o sgcPlanner em ação

sgcPlanner dentro das demos da suíte sgcUI: aplicações completas que rodam offline com dados simulados integrados.

Medido em cargas de trabalho reais

Medições de desenvolvimento de compilações release Win64 a 1920 x 1080. O Win32 é cerca de 1,5 a 1,7 vez mais lento.

MediçãoResultadoCondições
Agendamento automático de 10.000 tarefas (1.000 resumos, 3 níveis) com 15.000 vínculos e 30 feriados, caminho crítico incluído11 msCompilação release Win64
Quadro do Gantt ao rolar 10.000 tarefas com 15.000 vínculos11 msCompilação release Win64, 1920 x 1080
Layout do Kanban de 5.000 cartões em 8 colunas e 6 raias5 msCompilação release Win64
Visão de semana da agenda com 2.000 itens com horário, layout1 msCompilação release Win64
Importar 10.000 tarefas com 15.000 vínculos do MS Project XML264 msCompilação release Win64

Fonte: o tópico da ajuda que documenta estes números.

Quem cria com o sgcPlanner

Software de projetos e engenharia

Escritórios de projetos e empresas de engenharia

Planeje um projeto como uma EAP, vincule as tarefas e deixe o motor agendá-las no calendário da empresa enquanto o caminho crítico mostra o que determina a data de término. Salve uma linha de base na aprovação e o atraso aparece sob cada barra. Os planos chegam do Microsoft Project e voltam para ele como XML, e as mesmas tarefas aparecem em um quadro para a equipe.

  • Gantt com dependências
  • Agendamento automático e caminho crítico
  • Linhas de base
  • MS Project XML
Execute o demo ProjectGantt

Sistemas de reservas e agendamentos

Clínicas, oficinas e reserva de salas

Mostre cada médico, baia ou sala de reunião como uma coluna própria e deixe a equipe reservar arrastando sobre os horários livres. Os compromissos recorrentes vêm de regras padrão, os feriados chegam por uma assinatura .ics e a ponte com o Google Calendar mantém o calendário do próprio profissional alinhado. A fonte DataSet grava cada reserva direto nas suas tabelas. A equipe vê as mesmas reservas em todas as visões.

  • Visões da agenda e recursos
  • Recorrência
  • Vínculo com DataSet
  • Sincronização com o Google Calendar
Execute o demo TeamScheduler

Ferramentas de acompanhamento de tarefas e help desk

Equipes ágeis e service desks

Dê à equipe um quadro Kanban com uma raia por pessoa e limites de trabalho em andamento por coluna, e dê ao gerente um Gantt dos mesmos chamados. Mover um cartão para Concluído recolore a barra e o evento do calendário de imediato, porque as três visões compartilham um único objeto de dados. Imagens de status para um e-mail noturno podem ser renderizadas em modo headless em um servidor.

  • Kanban
  • Raias e limites de WIP
  • Visões sincronizadas
  • Renderização headless
Execute o demo TaskBoard

A Team Scheduler in a Few Lines

The same API in Delphi, C++ Builder and C#: two people, a daily stand-up from a recurrence rule, and a week view that lets users drag new meetings.

A VCL week Scheduler: two people as resources, a daily stand up from a recurrence rule, drag to create.

unit frmTeam;

interface

uses
  Classes, Controls, Forms, SysUtils,
  sgcUICore_Theme, sgcPlanner_Data, sgcPlanner_Scheduler,
  sgcPlanner_Scheduler_VCL;

type
  TFormTeam = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FData: TsgcPlannerData;
    FScheduler: TsgcVCLScheduler;
    procedure DoItemCreate(Sender: TObject; const aStart, aFinish: TDateTime;
      const aResourceId: string; var aTitle: string; var aAccept: Boolean);
  end;

implementation

procedure TFormTeam.FormCreate(Sender: TObject);
var
  vItem: TsgcPlannerItem;
  vMonday: TDateTime;
begin
  vMonday := Date - DayOfWeek(Date) + 2;
  FData := TsgcPlannerData.Create(Self);
  FData.Resources.AddResource('ana', 'Ana').Color := $FF2563EB;
  FData.Resources.AddResource('luis', 'Luis').Color := $FF0F766E;
  // a daily stand-up from an iCalendar recurrence rule
  vItem := FData.AddItem('standup');
  vItem.Title := 'Daily stand-up';
  vItem.Start := vMonday + EncodeTime(9, 0, 0, 0);
  vItem.Finish := vMonday + EncodeTime(9, 15, 0, 0);
  vItem.RecurrenceRule := 'FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR';
  vItem.Resources := 'ana,luis';
  vItem := FData.AddItem('review');
  vItem.Title := 'Design review';
  vItem.Start := vMonday + 1 + EncodeTime(14, 0, 0, 0);
  vItem.Finish := vMonday + 1 + EncodeTime(15, 30, 0, 0);
  vItem.Resources := 'ana';

  FScheduler := TsgcVCLScheduler.Create(Self);
  FScheduler.Parent := Self;
  FScheduler.Align := alClient;
  FScheduler.Data := FData;
  FScheduler.Theme := utDark;
  FScheduler.View := psvWeek;
  FScheduler.Options.DayStartHour := 8;
  FScheduler.Options.DayEndHour := 18;
  FScheduler.Options.GroupByResource := True;
  FScheduler.OnItemCreate := DoItemCreate;
  FScheduler.ScrollToTime(vMonday + EncodeTime(8, 0, 0, 0));
end;

procedure TFormTeam.DoItemCreate(Sender: TObject; const aStart,
  aFinish: TDateTime; const aResourceId: string; var aTitle: string;
  var aAccept: Boolean);
begin
  // the user dragged an empty slot: name the new meeting
  aTitle := 'New meeting';
  aAccept := True;
end;

end.

Ler o tópico da ajuda →

The same scheduler in C++ Builder.

#include <vcl.h>
#pragma hdrstop
#include <System.DateUtils.hpp>
#include "sgcUICore_Theme.hpp"
#include "sgcPlanner_Data.hpp"
#include "sgcPlanner_Scheduler.hpp"
#include "sgcPlanner_Scheduler_VCL.hpp"

class TTeamHandlers : public TObject
{
public:
	// the user dragged an empty slot: name the new meeting
	void __fastcall ItemCreate(TObject *Sender, const TDateTime aStart,
		const TDateTime aFinish, const UnicodeString aResourceId,
		UnicodeString &aTitle, bool &aAccept)
	{
		aTitle = "New meeting";
		aAccept = true;
	}
};

void __fastcall BuildTeamScheduler(TForm *Form)
{
	static TTeamHandlers *vHandlers = new TTeamHandlers();
	TDateTime vMonday = Date() - DayOfWeek(Date()) + 2;
	TsgcPlannerData *vData = new TsgcPlannerData(Form);
	vData->Resources->AddResource("ana", "Ana")->Color = 0xFF2563EB;
	vData->Resources->AddResource("luis", "Luis")->Color = 0xFF0F766E;
	// a daily stand-up from an iCalendar recurrence rule
	TsgcPlannerItem *vItem = vData->AddItem("standup");
	vItem->Title = "Daily stand-up";
	vItem->Start = vMonday + EncodeTime(9, 0, 0, 0);
	vItem->Finish = vMonday + EncodeTime(9, 15, 0, 0);
	vItem->RecurrenceRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR";
	vItem->Resources = "ana,luis";
	vItem = vData->AddItem("review");
	vItem->Title = "Design review";
	vItem->Start = vMonday + 1 + EncodeTime(14, 0, 0, 0);
	vItem->Finish = vMonday + 1 + EncodeTime(15, 30, 0, 0);
	vItem->Resources = "ana";

	TsgcVCLScheduler *vScheduler = new TsgcVCLScheduler(Form);
	vScheduler->Parent = Form;
	vScheduler->Align = alClient;
	vScheduler->Data = vData;
	vScheduler->Theme = utDark;
	vScheduler->View = psvWeek;
	vScheduler->Options->DayStartHour = 8;
	vScheduler->Options->DayEndHour = 18;
	vScheduler->Options->GroupByResource = true;
	vScheduler->OnItemCreate = vHandlers->ItemCreate;
	vScheduler->ScrollToTime(vMonday + EncodeTime(8, 0, 0, 0));
}

Ler o tópico da ajuda →

The C# version for WinForms.

using System;
using System.Windows.Forms;
using esegece.sgcPlanner;
using esegece.sgcUICore;

namespace TeamPlanner
{
    internal class MainForm : Form
    {
        public MainForm()
        {
            Text = "Team scheduler";
            DateTime monday = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek + 6) % 7));

            var data = new TsgcPlannerData();
            data.Resources.AddResource("ana", "Ana").Color = 0xFF2563EB;
            data.Resources.AddResource("luis", "Luis").Color = 0xFF0F766E;

            // a daily stand-up from an iCalendar recurrence rule
            var item = data.AddItem("standup");
            item.Title = "Daily stand-up";
            item.Start = monday.AddHours(9);
            item.Finish = monday.AddHours(9).AddMinutes(15);
            item.RecurrenceRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR";
            item.Resources = "ana,luis";

            item = data.AddItem("review");
            item.Title = "Design review";
            item.Start = monday.AddDays(1).AddHours(14);
            item.Finish = monday.AddDays(1).AddHours(15.5);
            item.Resources = "ana";

            var scheduler = new TsgcWinFormsScheduler { Dock = DockStyle.Fill, Data = data, Theme = TsgcUITheme.utDark };
            scheduler.View = TsgcPlannerSchedulerViewKind.psvWeek;
            scheduler.Options.DayStartHour = 8;
            scheduler.Options.DayEndHour = 18;
            scheduler.Options.GroupByResource = true;
            // the user dragged an empty slot: name the new meeting
            scheduler.OnItemCreate = (object sender, DateTime start, DateTime finish, string resourceId,
                ref string title, ref bool accept) => { title = "New meeting"; accept = true; };
            Controls.Add(scheduler);
            scheduler.ScrollToTime(monday.AddHours(8));
        }

        [STAThread]
        static void Main() { Application.EnableVisualStyles(); Application.Run(new MainForm()); }
    }
}
dotnet add package esegece.sgcPlanner.WinForms

Ler o tópico da ajuda →

Gantt in Delphi

Three tasks, two links, a baseline, the critical path and the schedule engine (the Gantt features here are Registered edition features).

unit frmGantt;

interface

uses
  Classes, Controls, Forms, SysUtils,
  sgcUICore_Theme, sgcPlanner_Data, sgcPlanner_Gantt, sgcPlanner_Gantt_VCL;

type
  TFormGantt = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

implementation

procedure TFormGantt.FormCreate(Sender: TObject);
var
  vData: TsgcPlannerData;
  vGantt: TsgcVCLGantt;
  vItem: TsgcPlannerItem;
  vStart: TDateTime;
begin
  vStart := Date + EncodeTime(8, 0, 0, 0);
  vData := TsgcPlannerData.Create(Self);
  vData.ProjectStart := vStart;
  vItem := vData.AddItem('1');
  vItem.Title := 'Design';
  vItem.Start := vStart;
  vItem.Finish := vStart + 3 + EncodeTime(9, 0, 0, 0);
  vItem.Progress := 100;
  vItem := vData.AddItem('2');
  vItem.Title := 'Build';
  vItem.Start := vStart;
  vItem.Finish := vStart + 6 + EncodeTime(9, 0, 0, 0);
  vItem.Progress := 40;
  vItem := vData.AddItem('3');
  vItem.Title := 'Release';
  vItem.Start := vStart;
  vItem.Finish := vStart;
  vItem.Milestone := True;
  // Build starts when Design finishes, Release when Build finishes
  vData.Dependencies.AddDependency('1', '2');
  vData.Dependencies.AddDependency('2', '3');

  vGantt := TsgcVCLGantt.Create(Self);
  vGantt.Parent := Self;
  vGantt.Align := alClient;
  vGantt.Data := vData;
  vGantt.Theme := utDark;
  vGantt.ShowCriticalPath := True;
  vGantt.SetBaseline;
  // the schedule engine moves the tasks to honour the links
  vGantt.Schedule;
end;

end.

Recurrence rules and the Gantt Schedule and SetBaseline calls are Registered edition features. The free Community edition shows a recurring item once.

Execute os demos do sgcPlanner

Os executáveis dos demos compilados estão em sgcUI_bin.zip, sem nada para instalar. O código-fonte de cada demo acompanha o pacote, para Delphi, C++ Builder e .NET.

ProjectPlanner

ProjectPlanner

Gantt, Kanban e agenda sobre um único objeto de dados, sempre sincronizados.

TeamScheduler

TeamScheduler

Sete visões com a visão de ano, grupos de recursos, reuniões recorrentes, lembretes, fusos horários, desfazer e refazer e edição no local.

Somente Registrada ProjectGantt

Vínculos, agendamento automático, caminho crítico, linhas de base, Microsoft Project XML, uma escala de tempo de três níveis e o histograma de recursos.

Somente Registrada TaskBoard

Colunas de status, raias por recurso e limites de WIP em um quadro Kanban.

DataSetPlanner

DataSetPlanner

Itens, recursos e dependências vinculados a TDataSets, com as edições gravadas de volta.

Somente Registrada ICalendarSync

Importe e exporte arquivos .ics.

ICalSubscription

Somente Registrada ICalSubscription

Acompanhe uma URL .ics somente leitura, como uma lista de feriados.

Somente Registrada GoogleCalendarSync

Sincronização nos dois sentidos com um Google Calendar por meio do sgcWebSockets.

Somente Registrada OutlookCalendarSync

Sincronização nos dois sentidos com um calendário do Outlook do Microsoft 365 ou do Outlook.com por meio do Microsoft Graph.

Somente Registrada CalDAVSync

Sincronização nos dois sentidos com um calendário CalDAV, como o Nextcloud, o iCloud, o Fastmail ou o Radicale.

HeadlessReport

Renderiza as visões em arquivos de imagem sem uma janela.

PlannerFMX

As três visões em um aplicativo FireMonkey.

Demos compilados

Executáveis prontos para rodar de todos os produtos sgcUI, sem nada para instalar.

Baixar sgcUI_bin.zip →

Onde o sgcPlanner está incluído

O sgcPlanner faz parte do sgcUI Enterprise e também é vendido separadamente. O sgcPlanner também está incluído no pacote All-Access.

sgcPlanner pacote individual

€249 / desenvolvedor, código-fonte completo, 1 ano de atualizações.

Comprar o sgcPlanner → Ver preços →

sgcUI Enterprise

Todos os 14 produtos sgcUI, a partir de €699.

Ver Enterprise →

.NET

A edição .NET tem o mesmo preço. Uma edição Community gratuita está no NuGet como esegece.sgcPlanner.Community.

Ver preços →

A edição Community gratuita é o esegece.sgcPlanner.Community no NuGet. A tabela mostra o que ela inclui.

RecursoCommunity (gratuita)Registrada
Visões da agenda: dia, semana útil, semana, mês e pauta✓✓
Árvore de tarefas do Gantt, resumos, marcos e progresso✓✓
Colunas do Kanban, recolhimento e opções de cartão✓✓
Arrastar e soltar em todas as visões✓✓
Vínculo com DataSet, JSON, temas e PNG e SVG headless✓✓
Visão de ano da agenda✓✓
Lembretes e fusos horários por item✓✓
Desfazer e refazer, edição no local✓✓
Escala de tempo de três níveis do Gantt e histograma de recursos✓✓
Recorrência−✓
Visão Timeline de recursos da agenda−✓
Setas de dependência e arrastar para vincular−✓
Agendamento automático, caminho crítico e linhas de base−✓
Raias e limites de WIP−✓
iCalendar e Microsoft Project XML−✓
Sincronização com o Google Calendar, o Outlook e o CalDAV e assinatura de iCal (sgcPlannerWS)−✓

Frameworks e plataformas suportados

Componentes do sgcPlanner

ComponenteO que faz
TsgcPlannerDataO modelo compartilhado: itens, recursos, status, dependências e calendário de trabalho.
TsgcVCLScheduler, TsgcFMXSchedulerVisões de dia, semana útil, semana, mês, ano, pauta e linha do tempo.
TsgcVCLGantt, TsgcFMXGanttÁrvore de tarefas, barras, vínculos, motor de agendamento, caminho crítico e linhas de base.
TsgcVCLKanban, TsgcFMXKanbanColunas de status, cartões, raias e limites de WIP.
TsgcPlannerSource_DataSetPlano a partir de um TDataSet.
TsgcPlannerICalendar, TsgcPlannerMSProjectLê e grava arquivos iCalendar .ics e Microsoft Project XML (Registrada).
TsgcPlannerRendererSaída PNG e SVG headless.
TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS)Sincronização nos dois sentidos com o Google Calendar, com o Outlook e o Microsoft 365 por meio do Microsoft Graph e com servidores CalDAV, e assinaturas de iCal, por meio do sgcWebSockets. Somente Registrada.
DestinoComponentePlataformas
Delphi 7 a 13, VCLAgenda, Gantt, KanbanWin32 e Win64
Delphi XE6 a 13, FireMonkeyTsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanbanWindows, macOS, iOS e Android
C++ Builder 2007 a 13Visões VCL e FMXCabeçalhos .hpp gerados e bibliotecas estáticas
Delphi 10.2 a 13, neutro quanto ao frameworkDados, motores, JSON, iCalendar, Microsoft Project, renderizadorLinux64, por exemplo para renderizar planos em um servidor
.NET Framework 4.7.2, .NET 8, 9 e 10TsgcWinFormsScheduler, Gantt e Kanban, e os equivalentes WPF e AvaloniaWinForms, WPF, Avalonia, PNG e SVG headless

Perguntas frequentes

Sim, na edição Registrada. O TsgcPlannerMSProject lê e grava o Microsoft Project XML (MSPDI) com tarefas, vínculos, o calendário, recursos, atribuições e linhas de base. O formato XML é o suportado, então salve o plano como XML no Project.

Sim, nos dois sentidos. O Google Calendar sincroniza por meio do TsgcPlannerGoogleSync, os calendários do Outlook do Microsoft 365 e do Outlook.com sincronizam por meio do Microsoft Graph com o TsgcPlannerGraphSync, e os calendários CalDAV, como o Nextcloud, o iCloud, o Fastmail ou o Radicale, sincronizam com o TsgcPlannerCalDAVSync. Qualquer outro calendário que publique uma URL .ics pode ser acompanhados somente para leitura com o TsgcPlannerICalSubscription, e os arquivos .ics são importados e exportados com o TsgcPlannerICalendar. As pontes exigem a edição Registrada e o sgcWebSockets.

A ajuda publica medições de desenvolvimento de compilações release Win64: o agendamento automático de 10.000 tarefas com 15.000 vínculos levou 11 ms, e um quadro ao rolar essas mesmas 10.000 tarefas levou 11 ms. Um layout Kanban de 5.000 cartões levou 5 ms. O Win32 é cerca de 1,5 a 1,7 vez mais lento.

As três visões com arrastar e soltar, resumos, marcos, progresso, o calendário de trabalho, vínculo com DataSet, JSON e saída headless. Recorrência, agendamento automático, dependências desenhadas, caminho crítico, linhas de base, a visão Timeline, raias, limites de WIP, iCalendar, Microsoft Project XML e as pontes são Registrada.

Sim. O TsgcPlannerSource_DataSet vincula o objeto de dados a qualquer TDataSet, como FireDAC, TClientDataSet ou dbExpress. Ele carrega itens, recursos e dependências por meio de mapas de campos, acompanha as alterações dos datasets e grava de volta as edições feitas nas visões.

Sim, por meio do FireMonkey: TsgcFMXScheduler, TsgcFMXGantt e TsgcFMXKanban funcionam a partir do Delphi XE6 em Windows, macOS, iOS e Android. No Linux64, o modelo de dados, os motores, JSON, iCalendar, Microsoft Project XML e o renderizador compilam a partir do Delphi 10.2.

Sim. O TsgcPlannerRenderer desenha a agenda, o Gantt ou o Kanban de um objeto de dados em PNG ou SVG sem uma janela, no Windows ou no Linux64, no tema claro ou escuro.

Ajuda do sgcPlanner

3,000+Desenvolvedores
20+Anos
761+Componentes
30+Integrações de API
5Plataformas
Garantia de reembolso de 30 diasNão ficou satisfeito? Solicite o reembolso total em até 30 dias após a compra. Ver política de reembolso

Experimente o sgcPlanner hoje

A avaliação do sgcUI inclui o sgcPlanner e todos os outros produtos sgcUI.