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

sgcPlanner, Scheduler, Gantt e Kanban per Delphi, C++ Builder e .NET

Tre viste dello stesso piano. Mostralo come calendario per il team, come diagramma di Gantt per il project manager e come board Kanban per chi lavora, tutto collegato a un unico oggetto dati. Trascina una card in Done e la barra del Gantt e il colore del calendario la seguono subito.

VCL, FireMonkey, WinForms, WPF, Avalonia10.000 attività pianificate automaticamente in 11 ms su Win64Edizione .NET Community gratuitaIncluso in sgcUI Enterprise
Demo ProjectPlanner: le stesse attività su una board Kanban, un diagramma di Gantt e uno Scheduler

Un piano, tre viste

Tredici funzionalità per il team, il project manager e chi lavora. Le funzionalità contrassegnate come Registered non sono nell'edizione .NET Community gratuita.

Un unico modello dati

Ogni vista legge e scrive lo stesso TsgcPlannerData.

Un unico modello dati

Tre viste, un oggetto dati, sempre sincronizzati

Un calendario, un diagramma di progetto e una board delle attività non dovrebbero mai essere in disaccordo. sgcPlanner collega un numero qualsiasi di viste a un unico oggetto dati: una card trascinata in Done sulla board viene disegnata con il colore Done nel Gantt e nello Scheduler allo stesso istante, una barra spostata nel Gantt sposta l'evento nel calendario e un evento creato nello Scheduler diventa una card. Ogni modifica è un singolo aggiornamento, quindi ogni vista si ridisegna una sola volta per ogni rilascio.

  • TsgcPlannerData contiene il piano e ogni vista lo raggiunge tramite Data
  • BarColorMode pbcStatus colora le barre del Gantt in base allo stato, come fa la board
  • SyncSelection condivide l'elemento selezionato tramite SelectedId
  • Lo stesso modello funziona senza alcuna vista, in un servizio o in uno unit test
  • Da destra a sinistra per arabo ed ebraico: le colonne di Scheduler e Kanban scorrono da destra, la griglia delle attività del Gantt passa a destra, e MirrorTimeline fa scorrere da destra anche l'asse temporale del Gantt
Leggi l'argomento della guida
Demo DataSetPlanner: righe del dataset e viste del piano collegate

Un unico modello dati

Collega un TDataSet, salva JSON, genera PNG

Il tuo piano vive già in un database e sgcPlanner lo incontra lì. Una sorgente dataset collega l'oggetto dati a qualsiasi TDataSet, come FireDAC, TClientDataSet o dbExpress, carica elementi, risorse e dipendenze, segue le modifiche dei dataset e riscrive le modifiche fatte nelle viste. La persistenza JSON funziona in ogni edizione e su ogni piattaforma, e il renderer headless disegna qualsiasi vista in PNG o SVG su un server, Linux64 incluso.

  • TsgcPlannerSource_DataSet mappa i nomi dei tuoi campi tramite ItemFields
  • SaveToFile e LoadFromFile scrivono e leggono il formato JSON documentato
  • TsgcPlannerRenderer disegna lo Scheduler, il Gantt o il Kanban senza una finestra
  • Usa solo l'unit DB, quindi funziona in applicazioni VCL, FireMonkey e console
Leggi l'argomento della guida

Un unico modello dati

Annulla e ripeti ogni modifica al piano

Un trascinamento sbagliato non dovrebbe costare a chi pianifica il suo pomeriggio. L'oggetto dati registra ogni aggiunta, eliminazione, modifica di proprietà e spostamento di un elemento, di una risorsa, di uno stato o di una dipendenza, chiunque la faccia: un trascinamento in una vista, una modifica sul posto, Smart Paste, il motore di pianificazione o il tuo codice. Tutte le viste collegate ai dati condividono una sola cronologia, e un gruppo di modifiche, come un intero passaggio di ripianificazione, si annulla in un solo passo.

  • Data.Undo con Undo, Redo, CanUndo e CanRedo
  • BeginGroup e EndGroup riuniscono molte modifiche in un solo passo
  • UndoCaption e RedoCaption danno un nome al passo successivo per una voce di menu o un suggerimento
  • Limit limita la cronologia, e OnChange aggiorna i pulsanti
Leggi l'argomento della guida

Un unico modello dati

Digita il titolo direttamente sulla vista

Aprire una finestra di dialogo per rinominare un elemento rallenta le persone. Con la modifica sul posto, F2 modifica il titolo dell'elemento selezionato in un piccolo editor posto sopra di esso, e un appuntamento creato trascinando su uno spazio vuoto dello Scheduler apre subito il proprio editor del titolo, così l'utente trascina e digita. Funziona allo stesso modo nello Scheduler, nel Gantt e nella board Kanban, e ogni modifica viene registrata dalla cronologia di annullamento.

  • InplaceEdit la attiva, è disattivata per impostazione predefinita
  • F2 modifica l'elemento selezionato, Invio accetta ed Esc annulla
  • BeginEdit apre l'editor da una tua voce di menu
  • IsEditing dice ai tasti del form, come Ctrl+Z, di attendere mentre l'utente digita
Leggi l'argomento della guida

Scheduler: riunioni, persone e sale

TsgcVCLScheduler e TsgcFMXScheduler, e le stesse viste in .NET.

Vista giorno di TsgcVCLScheduler
Vista settimana lavorativa di TsgcVCLScheduler
Vista settimana di TsgcVCLScheduler
Vista mese di TsgcVCLScheduler
Vista agenda di TsgcVCLScheduler
Vista timeline delle risorse di TsgcVCLScheduler

Scheduler: riunioni, persone e sale

Sette viste calendario, persone e sale affiancate

Gli utenti sanno già come deve comportarsi un calendario, quindi lo Scheduler offre le viste che si aspettano: giorno, settimana lavorativa, settimana, mese, anno, agenda e una timeline delle risorse. La vista anno mostra dodici mini mesi con ogni giorno sfumato in base a quanto è occupato, e un doppio clic apre quel giorno. Aggiungi persone, sale o macchine come risorse con il loro colore e raggruppa il giorno o la settimana per risorsa, così una clinica vede ogni medico in una colonna e un'officina vede ogni postazione. Orario di lavoro, intervallo di giorni visibile e navigazione sono proprietà e chiamate di una riga.

  • View: psvDay, psvWorkWeek, psvWeek, psvMonth, psvYear, psvAgenda, psvTimeline
  • AddResource con un colore, e Options.GroupByResource per una colonna ciascuna
  • DayStartHour, DayEndHour e SlotMinutes definiscono la griglia oraria
  • GoToday, Prior, Next e ScrollToTime servono per spostarsi

La vista Timeline delle risorse è Registered; in Community quella vista mostra un avviso.

Leggi l'argomento della guida

Scheduler: riunioni, persone e sale

Trascina per creare, spostare e ridimensionare

Prenotare una riunione dovrebbe somigliare a disegnarla. Trascina sugli slot vuoti e lo Scheduler crea un evento, mentre il tuo gestore OnItemCreate ne imposta il titolo o rifiuta lo slot. Trascina un evento su un altro orario, giorno o colonna di risorsa, oppure tira un bordo per cambiarne la durata, e ogni spostamento si aggancia alla dimensione dello slot. Gli stessi gesti funzionano nelle altre viste: le barre si spostano e si ridimensionano nel Gantt, e le card si spostano tra le colonne della board.

  • OnItemCreate assegna un nome a un nuovo evento o lo rifiuta
  • Spostamenti e ridimensionamenti si agganciano a Options.SlotMinutes
  • Un'anteprima segue il puntatore, la vista scorre ai bordi e Esc annulla
  • Mouse, penna e touch; OnCardMoving può bloccare uno spostamento sulla board
Leggi l'argomento della guida
Vista mese con uno stand-up settimanale ogni martedì

Scheduler: riunioni, persone e sale Solo Registered

Riunioni ricorrenti da regole standard

Uno stand-up settimanale o una revisione mensile vanno inseriti una volta sola. Assegna a un elemento una RRULE iCalendar e lo Scheduler mostra ogni occorrenza in qualsiasi vista e per qualsiasi periodo. La regola è nel formato RFC 5545 usato da Google Calendar, Outlook e Apple Calendar, quindi gli eventi ricorrenti mantengono la loro regola nell'importazione o nell'esportazione di file .ics, e il tuo codice può chiedere all'oggetto dati le occorrenze di qualsiasi intervallo di date, ad esempio per controllare i conflitti di una sala.

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' si ripete ogni martedì
  • Start e Finish dell'elemento sono la prima occorrenza
  • GetOccurrences restituisce le occorrenze di qualsiasi periodo
  • Importato ed esportato con file iCalendar

Community mostra un elemento ricorrente una sola volta e ne conserva la regola.

Leggi l'argomento della guida
Demo ICalSubscription con un calendario delle festività unito allo Scheduler

Scheduler: riunioni, persone e sale Solo Registered

Google Calendar, Outlook, CalDAV e .ics in ingresso e in uscita

Gli appuntamenti dei tuoi utenti vivono già in altri calendari. TsgcPlannerICalendar importa ed esporta file .ics, il formato di Google Calendar, Outlook e Apple Calendar. Con il ponte sgcPlannerWS, una sottoscrizione segue qualsiasi URL .ics in sola lettura, come un elenco di festività o un calendario condiviso, e tre componenti di sincronizzazione mantengono allineato un piano, in entrambe le direzioni, con un Google Calendar, con un calendario Outlook di Microsoft 365 o Outlook.com tramite Microsoft Graph, oppure con un calendario CalDAV di Nextcloud, iCloud, Fastmail, Radicale o qualsiasi altro server CalDAV. Ognuno legge solo le modifiche dall'ultima sincronizzazione e ha una regola chiara sui conflitti.

  • TsgcPlannerICalendar con ImportFromFile e ExportToFile
  • TsgcPlannerICalSubscription con URL e RefreshInterval, che usa ETag e If-Modified-Since
  • TsgcPlannerGoogleSync con CalendarId, Direction e AutoSyncInterval
  • TsgcPlannerGraphSync con CalendarId e un AccessToken OAuth2, che usa la delta query di Graph
  • TsgcPlannerCalDAVSync con CalendarURL, UserName e Password, che usa sync token ed ETag
  • In caso di conflitto vince la modifica più recente, e OnConflict può decidere diversamente

Edizione Registered. I componenti ponte richiedono anche sgcWebSockets registrato; in .NET sono in esegece.sgcPlanner.sgcWebSockets.

Leggi l'argomento della guida

Scheduler: riunioni, persone e sale

Promemoria con posticipa e ignora

Una riunione che nessuno ricorda è una riunione a cui nessuno partecipa. Assegna a un elemento un promemoria in minuti prima dell'inizio, e TsgcPlannerReminders trova i promemoria in scadenza e genera un evento per ciascuno. La tua applicazione lo chiama da un proprio timer e decide come mostrare il promemoria: un popup, un toast o un suono. Un elemento ricorrente ricorda di nuovo a ogni occorrenza, e un promemoria può essere posticipato o ignorato.

  • ReminderMinutes dell'elemento: -1 per nessuno, 0 all'inizio
  • Check genera OnReminder per ogni promemoria in scadenza
  • Snooze e Dismiss per l'occorrenza corrente o la successiva
  • Salvato in JSON e registrato dalla cronologia di annullamento
Leggi l'argomento della guida

Scheduler: riunioni, persone e sale

Fusi orari per elemento

I team distribuiti su più sedi fissano le riunioni nel proprio orario locale. Ogni elemento può avere il proprio fuso orario, quindi una chiamata fissata alle 10:00 a New York resta alle 10:00 ora di New York, mentre le viste mostrano ogni elemento in un unico fuso di visualizzazione. Se cambi il fuso di visualizzazione, gli elementi passano all'ora locale del nuovo fuso, mentre gli elementi flottanti e di tutto il giorno restano dove sono.

  • Item.TimeZone è il fuso di Start e Finish, vuoto per un elemento flottante
  • Data.DisplayTimeZone è il fuso mostrato dalle viste, vuoto per il fuso locale
  • La conversione avviene solo quando gli elementi vengono mostrati
  • Anche i promemoria funzionano nel fuso di visualizzazione
Leggi l'argomento della guida

Gantt: pianifica i progetti e segui il percorso critico

TsgcVCLGantt e TsgcFMXGantt: attività, collegamenti, una scala temporale e un motore di pianificazione.

Demo ProjectGantt: albero WBS con collegamenti fine-inizio e inizio-inizio

Gantt: pianifica i progetti e segui il percorso critico Solo Registered

Diagrammi di Gantt con dipendenze e ritardo

Il Gantt mostra un albero WBS con righe di riepilogo, milestone e avanzamento su ogni barra, e disegna i collegamenti tra le attività come frecce. Collega le attività nel codice o trascinando dalla fine di una barra a un'altra, scegli fine-inizio, inizio-inizio, fine-fine o inizio-fine, e aggiungi un ritardo in tempo lavorativo. La scala temporale va da 5 minuti ad anni.

  • WBS tramite ParentId, aggregata con UpdateSummaries
  • AddDependency con TsgcPlannerDependencyKind: pdkFS, pdkSS, pdkFF, pdkSF
  • Lag calcolato sul calendario di lavoro
  • Milestone e Progress su ogni elemento, TimeScale per lo zoom

Community memorizza e salva i collegamenti ma non li disegna, e il trascinamento per collegare è Registered.

Leggi l'argomento della guida
Gantt con il percorso critico evidenziato e le festività ombreggiate dal calendario di lavoro

Gantt: pianifica i progetti e segui il percorso critico Solo Registered

Pianificazione automatica e percorso critico

Quando un'attività slitta, il project manager ha bisogno subito della nuova data di fine, non dopo un pomeriggio passato a spostare barre. Il motore di pianificazione colloca ogni attività il prima possibile dopo le sue predecessori sul calendario di lavoro, saltando giorni non lavorativi e festività, calcola lo slack di ogni attività e marca il percorso critico, la catena di attività che stabilisce la fine del progetto. Eseguilo su richiesta, dopo ogni modifica o su un oggetto dati senza alcuna vista.

  • Schedule esegue il motore, AutoSchedule lo esegue dopo ogni modifica
  • ShowCriticalPath evidenzia le attività che determinano la data di fine
  • TotalSlack indica i minuti lavorativi di cui un'attività può slittare
  • Il calendario di lavoro imposta WorkDays, WorkTime e Holidays

In Community, Schedule solleva EsgcPlannerError e ShowCriticalPath non ha effetto.

Leggi l'argomento della guida
Gantt con barre grigie della baseline sotto le barre attuali e due attività in ritardo

Gantt: pianifica i progetti e segui il percorso critico Solo Registered

Le baseline mostrano subito lo scostamento

Gli stakeholder raramente chiedono qual è il piano; chiedono quanto si è spostato. Salva una baseline quando il piano viene approvato e il Gantt la disegna come una barra sottile sotto ogni barra attuale, così un'attività in ritardo si vede senza leggere una sola data. Le date della baseline sono memorizzate con gli elementi, salvate in JSON e scambiate con Microsoft Project XML, e il tuo codice può leggerle per costruire un proprio report degli scostamenti.

  • SetBaseline copia Start e Finish di ogni elemento in un solo aggiornamento
  • ShowBaseline disegna le barre della baseline
  • BaselineStart e BaselineFinish su ogni elemento
  • Salvata in JSON e letta da Microsoft Project XML

Community memorizza e salva le date della baseline ma non le disegna; SetBaseline solleva EsgcPlannerError.

Leggi l'argomento della guida

Gantt: pianifica i progetti e segui il percorso critico Solo Registered

Scambia piani con Microsoft Project

Gli uffici di progetto ricevono piani da Microsoft Project e li rimandano indietro. TsgcPlannerMSProject importa ed esporta Microsoft Project XML (MSPDI), il formato XML che Project apre e salva, con attività, collegamenti, calendario, risorse, assegnazioni e baseline. Un'importazione può sostituire il piano o unirsi ad esso, e un documento non ben formato solleva un errore con il numero di riga. L'importazione di 10.000 attività con 15.000 collegamenti ha richiesto 264 ms in una misurazione di sviluppo su Win64. Risorse e assegnazioni arrivano insieme alle attività.

  • ImportFromFile, ImportFromStream e ImportFromString
  • ExportToFile scrive l'XML che Microsoft Project apre
  • ImportMode: pmiReplace (predefinito) o pmiMerge
  • Un XML malformato solleva EsgcPlannerError con il numero di riga

Non presente nell'edizione Community, dove il formato di file è JSON.

Leggi l'argomento della guida

Gantt: pianifica i progetti e segui il percorso critico

Una scala temporale a tre livelli e un istogramma delle risorse

I piani lunghi si leggono meglio con più contesto nell'intestazione, e le persone sovraccariche dovrebbero essere visibili prima che il piano venga pubblicato. La scala temporale del Gantt può mostrare un terzo livello, per esempio il mese sopra le settimane sopra i giorni. Un pannello istogramma in fondo al grafico disegna, per ogni tacca, quanto lavoro ha ciascuna risorsa rispetto al proprio tempo di lavoro, e la parte oltre il 100% viene dipinta con il colore critico.

  • TimeScale.TierCount 3 aggiunge un livello superiore, con TopFormat per le sue etichette
  • ShowHistogram e HistogramHeight mostrano il pannello
  • HistogramResourceId mostra una sola risorsa, oppure tutte le risorse impilate ciascuna nel proprio colore
  • Il pannello segue lo scorrimento e lo zoom del grafico
Leggi l'argomento della guida

Kanban: board che seguono il piano

TsgcVCLKanban e TsgcFMXKanban: una colonna per stato, sugli stessi dati del Gantt.

Board Kanban con cinque colonne di stato, tag, iniziali dei responsabili, scadenze e barre di avanzamento

Kanban: board che seguono il piano

Una board delle attività da cui il team può lavorare

Chi lavora vuole una board, non un diagramma. La vista Kanban costruisce una colonna per stato, con un badge del conteggio e una freccia di chiusura, e ogni card mostra titolo, tag, iniziali della risorsa, scadenza e avanzamento. Rilasciare una card su un'altra colonna ne cambia stato e posizione nei dati condivisi, quindi il Gantt e lo Scheduler si aggiornano subito, e il tuo codice può bloccare qualsiasi spostamento prima che avvenga. La board segue lo stesso tema chiaro o scuro delle altre viste.

  • ColumnSource costruisce le colonne dagli stati, o dalle tue Columns
  • CardOptions sceglie cosa mostra una card
  • OnCardMoving accetta o rifiuta un rilascio
  • Larghezze delle colonne e chiusura funzionano in ogni edizione
Leggi l'argomento della guida
Demo TaskBoard: cinque colonne, tre swimlane per risorsa e una colonna oltre il limite

Kanban: board che seguono il piano Solo Registered

Swimlane e limiti WIP mantengono il lavoro fluido

Le swimlane lo dividono in fasce orizzontali per risorsa, attività padre o tag, così ogni persona o epic ha una riga, e i limiti di work in progress mettono un tetto a ogni colonna, contando tra tutte le corsie. In modalità warn una colonna oltre il limite viene marcata; in modalità block una card che supererebbe il limite non può essere rilasciata. Il layout di 5.000 card in 8 colonne e 6 corsie ha richiesto 5 ms su Win64.

  • SwimlaneBy: pslResource, pslParent o pslTag
  • WIPLimit per voce di colonna, 0 per nessun limite
  • WIPMode: pwmWarn marca la colonna, pwmBlock rifiuta il rilascio
  • Corsie e limiti funzionano sugli stessi dati delle altre viste

Community ignora SwimlaneBy e i limiti WIP; colonne, larghezze e chiusura funzionano.

Leggi l'argomento della guida

Accessibilità

UI Automation per screen reader, tastiera e alto contrasto, senza alcuna configurazione.

Accessibilità

Ogni vista del planner, leggibile e utilizzabile senza mouse

sgcPlanner espone le viste Scheduler, Timeline, Gantt e Kanban a Microsoft UI Automation: giorni, corsie e colonne, gli elementi con i loro orari e le dipendenze del Gantt. Tutto ciò che si trascina con il mouse si può fare anche con la tastiera.

  • Scheduler e Timeline: Ins aggiunge un elemento nello slot con il focus, Del lo elimina, Ctrl+Frecce spostano l'elemento e Ctrl+Maiusc+Frecce ne cambiano la fine
  • Gantt: Ctrl+Sinistra e Ctrl+Destra spostano l'attività di un tick, Ctrl+K avvia una dipendenza, Ctrl+Maiusc+K scorre le dipendenze dell'attività con il focus
  • Kanban: Ctrl+Sinistra e Ctrl+Destra spostano la scheda nella colonna adiacente, Ctrl+Su e Ctrl+Giù la riordinano
  • Con un tema Windows ad alto contrasto i colori degli elementi dell'applicazione sono sostituiti da colori di sistema con contorni, quindi nessuna informazione dipende dal solo colore

L'accessibilità è attiva per impostazione predefinita in tutte le edizioni, compresa l'edizione Community gratuita, su VCL in ogni versione di Delphi e C++Builder da Delphi 7 a Delphi 13, su FireMonkey su Windows e su WinForms, WPF e Avalonia. In Delphi e C++Builder, AccessibleName e AccessibleDescription impostano il nome e la descrizione esposti a UI Automation, e in .NET il nome accessibile e il testo della guida standard di ciascun framework fanno lo stesso. Vedi i report di conformità sull'accessibilità.

Leggi l'argomento della guida

Guarda sgcPlanner all'opera

sgcPlanner nelle demo della suite sgcUI: applicazioni complete che funzionano offline con dati simulati integrati.

Misurato su carichi di lavoro reali

Misurazioni di sviluppo di build release Win64 a 1920 x 1080. Win32 è circa 1,5 a 1,7 volte più lento.

MisurazioneRisultatoCondizioni
Pianificazione automatica di 10.000 attività (1.000 riepiloghi, 3 livelli) con 15.000 collegamenti e 30 festività, percorso critico incluso11 msBuild release Win64
Frame del Gantt durante lo scorrimento di 10.000 attività con 15.000 collegamenti11 msBuild release Win64, 1920 x 1080
Layout Kanban di 5.000 card in 8 colonne e 6 corsie5 msBuild release Win64
Layout della vista settimana dello Scheduler con 2.000 elementi con orario1 msBuild release Win64
Importazione di 10.000 attività con 15.000 collegamenti da MS Project XML264 msBuild release Win64

Fonte: l'argomento della guida che documenta questi numeri.

Chi sviluppa con sgcPlanner

Software per progetti e ingegneria

Uffici di progetto e studi di ingegneria

Pianifica un progetto come una WBS, collega le attività e lascia che il motore le pianifichi sul calendario aziendale mentre il percorso critico mostra cosa determina la data di fine. Salva una baseline all'approvazione e lo scostamento si vede sotto ogni barra. I piani arrivano da Microsoft Project e tornano a esso come XML, e le stesse attività compaiono su una board per il team.

  • Gantt con dipendenze
  • Pianificazione automatica e percorso critico
  • Baseline
  • MS Project XML
Esegui la demo ProjectGantt

Sistemi di prenotazione e appuntamenti

Cliniche, officine e prenotazione di sale

Mostra ogni medico, postazione o sala riunioni come una colonna a sé e lascia che il personale prenoti trascinando sugli slot liberi. Gli appuntamenti ricorrenti nascono da regole standard, le festività arrivano tramite una sottoscrizione .ics e il ponte Google Calendar mantiene allineato il calendario personale di un professionista. La sorgente dataset riscrive ogni prenotazione direttamente nelle tue tabelle. Il personale vede le stesse prenotazioni in ogni vista.

  • Viste e risorse dello Scheduler
  • Ricorrenza
  • Collegamento a DataSet
  • Sincronizzazione con Google Calendar
Esegui la demo TeamScheduler

Strumenti di task tracking e help desk

Team agili e service desk

Offri al team una board Kanban con una swimlane per persona e limiti di work in progress per colonna, e al responsabile un Gantt degli stessi ticket. Spostare una card in Done ricolora subito la barra e l'evento del calendario, perché tutte e tre le viste condividono un unico oggetto dati. Le immagini di stato per un'email notturna possono essere generate headless su un server.

  • Kanban
  • Swimlane e limiti WIP
  • Viste sincronizzate
  • Rendering headless
Esegui la demo TaskBoard

Uno Scheduler di team in poche righe

La stessa API in Delphi, C++ Builder e C#: due persone, uno stand-up giornaliero da una regola di ricorrenza e una vista settimana che permette agli utenti di trascinare nuove riunioni.

Uno Scheduler VCL settimanale: due persone come risorse, uno stand-up giornaliero da una regola di ricorrenza, trascinamento per creare.

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.

Leggi l'argomento della guida →

Lo stesso 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));
}

Leggi l'argomento della guida →

La versione C# per 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

Leggi l'argomento della guida →

Gantt in Delphi

Tre attività, due collegamenti, una baseline, il percorso critico e il motore di pianificazione (le funzionalità Gantt qui mostrate sono dell'edizione Registered).

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.

Le regole di ricorrenza e le chiamate Schedule e SetBaseline del Gantt sono funzionalità dell'edizione Registered. L'edizione Community gratuita mostra un elemento ricorrente una sola volta.

Esegui le demo di sgcPlanner

Gli eseguibili delle demo compilate sono in sgcUI_bin.zip, senza nulla da installare. Il sorgente di ogni demo è incluso nel pacchetto, per Delphi, C++ Builder e .NET.

ProjectPlanner

ProjectPlanner

Gantt, Kanban e Scheduler su un unico oggetto dati, sempre sincronizzati.

TeamScheduler

TeamScheduler

Sette viste con la vista anno, gruppi di risorse, riunioni ricorrenti, promemoria, fusi orari, annulla e ripeti e modifica sul posto.

Solo Registered ProjectGantt

Collegamenti, pianificazione automatica, percorso critico, baseline, Microsoft Project XML, una scala temporale a tre livelli e l'istogramma delle risorse.

Solo Registered TaskBoard

Colonne di stato, swimlane per risorsa e limiti WIP su una board Kanban.

DataSetPlanner

DataSetPlanner

Elementi, risorse e dipendenze collegati a TDataSet, con le modifiche riscritte.

Solo Registered ICalendarSync

Importa ed esporta file .ics.

ICalSubscription

Solo Registered ICalSubscription

Segui un URL .ics in sola lettura, come un elenco di festività.

Solo Registered GoogleCalendarSync

Sincronizzazione bidirezionale con un Google Calendar tramite sgcWebSockets.

Solo Registered OutlookCalendarSync

Sincronizzazione bidirezionale con un calendario Outlook di Microsoft 365 o Outlook.com tramite Microsoft Graph.

Solo Registered CalDAVSync

Sincronizzazione bidirezionale con un calendario CalDAV, come Nextcloud, iCloud, Fastmail o Radicale.

HeadlessReport

Genera le viste in file immagine senza una finestra.

PlannerFMX

Le tre viste in un'applicazione FireMonkey.

Demo compilate

Eseguibili pronti all'uso di ogni prodotto sgcUI, senza nulla da installare.

Scarica sgcUI_bin.zip →

Dove è incluso sgcPlanner

sgcPlanner fa parte di sgcUI Enterprise ed è venduto anche separatamente. sgcPlanner è incluso anche nel bundle All-Access.

sgcPlanner come pacchetto singolo

€249 / sviluppatore, codice sorgente completo, 1 anno di aggiornamenti.

Acquista sgcPlanner → Vedi i prezzi →

sgcUI Enterprise

Tutti i 14 prodotti sgcUI, da €699.

Vedi Enterprise →

.NET

L'edizione .NET ha lo stesso prezzo. Un'edizione Community gratuita è disponibile su NuGet come esegece.sgcPlanner.Community.

Vedi i prezzi →

L'edizione Community gratuita è esegece.sgcPlanner.Community su NuGet. La tabella mostra cosa include.

FunzionalitàCommunity (gratuita)Registered
Viste giorno, settimana lavorativa, settimana, mese e agenda dello Scheduler✓✓
Albero attività del Gantt, riepiloghi, milestone e avanzamento✓✓
Colonne Kanban, chiusura e opzioni delle card✓✓
Drag and drop in ogni vista✓✓
Collegamento a DataSet, JSON, temi e PNG e SVG headless✓✓
Vista Anno dello Scheduler✓✓
Promemoria e fusi orari per elemento✓✓
Annulla e ripeti, modifica sul posto✓✓
Scala temporale del Gantt a tre livelli e istogramma delle risorse✓✓
Ricorrenza−✓
Vista Timeline delle risorse dello Scheduler−✓
Frecce di dipendenza e trascinamento per collegare−✓
Pianificazione automatica, percorso critico e baseline−✓
Swimlane e limiti WIP−✓
iCalendar e Microsoft Project XML−✓
Sincronizzazione con Google Calendar, Outlook e CalDAV e sottoscrizione iCal (sgcPlannerWS)−✓

Framework e piattaforme supportati

Componenti di sgcPlanner

ComponenteCosa fa
TsgcPlannerDataIl modello condiviso: elementi, risorse, stati, dipendenze e calendario di lavoro.
TsgcVCLScheduler, TsgcFMXSchedulerViste giorno, settimana lavorativa, settimana, mese, anno, agenda e timeline.
TsgcVCLGantt, TsgcFMXGanttAlbero attività, barre, collegamenti, motore di pianificazione, percorso critico e baseline.
TsgcVCLKanban, TsgcFMXKanbanColonne di stato, card, swimlane e limiti WIP.
TsgcPlannerSource_DataSetPiano da un TDataSet.
TsgcPlannerICalendar, TsgcPlannerMSProjectLettura e scrittura di file iCalendar .ics e Microsoft Project XML (Registered).
TsgcPlannerRendererOutput PNG e SVG headless.
TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS)Sincronizzazione bidirezionale con Google Calendar, con Outlook e Microsoft 365 tramite Microsoft Graph e con i server CalDAV, e sottoscrizioni iCal, tramite sgcWebSockets. Solo Registered.
DestinazioneComponentePiattaforme
Da Delphi 7 a 13, VCLScheduler, Gantt, KanbanWin32 e Win64
Da Delphi XE6 a 13, FireMonkeyTsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanbanWindows, macOS, iOS e Android
C++ Builder da 2007 a 13Viste VCL e FMXHeader .hpp generati e librerie statiche
Da Delphi 10.2 a 13, indipendente dal frameworkDati, motori, JSON, iCalendar, Microsoft Project, rendererLinux64, ad esempio per generare piani su un server
.NET Framework 4.7.2, .NET 8, 9 e 10TsgcWinFormsScheduler, Gantt and Kanban, e i corrispettivi WPF e AvaloniaWinForms, WPF, Avalonia, PNG e SVG headless

Domande frequenti

Sì, nell'edizione Registered. TsgcPlannerMSProject legge e scrive Microsoft Project XML (MSPDI) con attività, collegamenti, calendario, risorse, assegnazioni e baseline. Il formato supportato è l'XML, quindi salva il piano come XML in Project.

Sì, in entrambe le direzioni. Google Calendar si sincronizza tramite TsgcPlannerGoogleSync, i calendari Outlook di Microsoft 365 e Outlook.com si sincronizzano tramite Microsoft Graph con TsgcPlannerGraphSync, e i calendari CalDAV, come Nextcloud, iCloud, Fastmail o Radicale, si sincronizzano con TsgcPlannerCalDAVSync. Qualsiasi altro calendario che pubblichi un URL .ics possono essere seguiti in sola lettura con TsgcPlannerICalSubscription, e i file .ics si importano ed esportano con TsgcPlannerICalendar. I ponti richiedono l'edizione Registered e sgcWebSockets.

La guida pubblica le misurazioni di sviluppo di build release Win64: la pianificazione automatica di 10.000 attività con 15.000 collegamenti ha richiesto 11 ms, e un frame durante lo scorrimento delle stesse 10.000 attività ha richiesto 11 ms. Un layout Kanban di 5.000 card ha richiesto 5 ms. Win32 è circa 1,5 a 1,7 volte più lento.

Le tre viste con drag and drop, riepiloghi, milestone, avanzamento, calendario di lavoro, collegamento a DataSet, JSON e output headless. Ricorrenza, pianificazione automatica, dipendenze disegnate, percorso critico, baseline, vista Timeline, swimlane, limiti WIP, iCalendar, Microsoft Project XML e i ponti sono Registered.

Sì. TsgcPlannerSource_DataSet collega l'oggetto dati a qualsiasi TDataSet, come FireDAC, TClientDataSet o dbExpress. Carica elementi, risorse e dipendenze tramite mappe dei campi, segue le modifiche dei dataset e riscrive le modifiche fatte nelle viste.

Sì, tramite FireMonkey: TsgcFMXScheduler, TsgcFMXGantt e TsgcFMXKanban funzionano da Delphi XE6 su Windows, macOS, iOS e Android. Su Linux64 il modello dati, i motori, JSON, iCalendar, Microsoft Project XML e il renderer si compilano da Delphi 10.2.

Sì. TsgcPlannerRenderer disegna lo Scheduler, il Gantt o il Kanban di un oggetto dati in PNG o SVG senza una finestra, su Windows o Linux64, nel tema chiaro o scuro.

Guida di sgcPlanner

3,000+Sviluppatori
20+Anni
761+Componenti
30+Integrazioni API
5Piattaforme
Garanzia soddisfatti o rimborsati di 30 giorniNon sei soddisfatto? Richiedi un rimborso completo entro 30 giorni dall'acquisto. Vedi la politica di rimborso

Prova sgcPlanner oggi

Il trial di sgcUI include sgcPlanner e ogni altro prodotto sgcUI.