Delphi, C++ Builder & .NET Teil von sgcUI

sgcPlanner, Terminplaner, Gantt & Kanban für Delphi, C++ Builder & .NET

Drei Ansichten desselben Plans. Zeige ihn als Kalender für das Team, als Gantt-Diagramm für die Projektleitung und als Kanban-Board für alle, die die Arbeit erledigen, alles an ein Datenobjekt gebunden. Ziehe eine Karte nach Erledigt, und der Gantt-Balken und die Kalenderfarbe folgen sofort.

VCL, FireMonkey, WinForms, WPF, Avalonia10.000 Aufgaben in 11 ms automatisch terminiert (Win64)Kostenlose .NET-Community-EditionEnthalten in sgcUI Enterprise
ProjectPlanner-Demo: dieselben Aufgaben als Kanban-Board, Gantt-Diagramm und Terminplaner

Ein Plan, drei Ansichten

Dreizehn Features für das Team, die Projektleitung und alle, die die Arbeit erledigen. Mit Registered gekennzeichnete Features sind nicht in der kostenlosen .NET-Community-Edition enthalten.

Ein Datenmodell

Jede Ansicht liest und schreibt dasselbe TsgcPlannerData.

Ein Datenmodell

Drei Ansichten, ein Datenobjekt, immer synchron

Ein Kalender, ein Projektdiagramm und ein Aufgabenboard sollten sich nie widersprechen. sgcPlanner bindet beliebig viele Ansichten an ein Datenobjekt: Eine auf dem Board nach Erledigt gezogene Karte wird im Gantt und im Terminplaner sofort in der Farbe für Erledigt gezeichnet, ein im Gantt verschobener Balken verschiebt den Termin im Kalender, und ein im Terminplaner angelegter Termin wird zur Karte. Jede Änderung ist ein einziges Update, sodass jede Ansicht pro Ablegen nur einmal neu zeichnet.

  • TsgcPlannerData hält den Plan, und jede Ansicht verweist über Data darauf
  • BarColorMode pbcStatus färbt die Gantt-Balken nach Status ein, wie es das Board tut
  • SyncSelection teilt das ausgewählte Element über SelectedId
  • Dasselbe Modell funktioniert ohne jede Ansicht, in einem Dienst oder einem Unit-Test
  • Rechts nach links für Arabisch und Hebräisch: Scheduler- und Kanban-Spalten fließen von rechts, das Gantt-Aufgabengrid wandert nach rechts, und MirrorTimeline lässt auch die Gantt-Zeitachse von rechts laufen
Hilfethema lesen
DataSetPlanner-Demo: DataSet-Zeilen und die daran gebundenen Planansichten

Ein Datenmodell

TDataSet binden, JSON speichern, PNG rendern

Dein Plan liegt schon in einer Datenbank, und sgcPlanner holt ihn dort ab. Eine DataSet-Quelle bindet das Datenobjekt an jedes TDataSet, etwa FireDAC, TClientDataSet oder dbExpress, lädt Elemente, Ressourcen und Abhängigkeiten, folgt den Änderungen der DataSets und schreibt die in den Ansichten vorgenommenen Änderungen zurück. Die JSON-Persistenz funktioniert in jeder Edition und auf jeder Plattform, und der Headless-Renderer zeichnet jede Ansicht auf einem Server als PNG oder SVG, auch unter Linux64.

  • TsgcPlannerSource_DataSet ordnet deine Feldnamen über ItemFields zu
  • SaveToFile und LoadFromFile schreiben und lesen das dokumentierte JSON-Format
  • TsgcPlannerRenderer zeichnet den Terminplaner, das Gantt oder das Kanban ohne Fenster
  • Nutzt nur die Unit DB und funktioniert daher in VCL, FireMonkey und Konsolenanwendungen
Hilfethema lesen

Ein Datenmodell

Jede Änderung am Plan rückgängig machen und wiederholen

Eine falsche Ablage sollte niemandem den Nachmittag kosten. Das Datenobjekt zeichnet jedes Hinzufügen, Löschen, jede Eigenschaftsänderung und jedes Verschieben eines Elements, einer Ressource, eines Status oder einer Abhängigkeit auf, egal wer es auslöst: ein Ziehen in einer Ansicht, eine Bearbeitung an Ort und Stelle, Smart Paste, die Terminierungs-Engine oder dein eigener Code. Alle an die Daten gebundenen Ansichten teilen einen Verlauf, und eine Gruppe von Änderungen, etwa ein ganzer Neuterminierungslauf, wird in einem Schritt rückgängig gemacht.

  • Data.Undo mit Undo, Redo, CanUndo und CanRedo
  • BeginGroup und EndGroup machen aus vielen Änderungen einen Schritt
  • UndoCaption und RedoCaption benennen den nächsten Schritt für einen Menüeintrag oder einen Hinweis
  • Limit begrenzt den Verlauf, und OnChange aktualisiert die Schaltflächen
Hilfethema lesen

Ein Datenmodell

Den Titel direkt in der Ansicht eintippen

Ein Dialog zum Umbenennen eines Elements bremst die Leute aus. Mit der Bearbeitung an Ort und Stelle ändert F2 den Titel des ausgewählten Elements in einem kleinen Editor direkt darüber, und ein Termin, der im Terminplaner durch Ziehen auf freier Fläche entsteht, öffnet sofort seinen Titel-Editor, sodass der Nutzer zieht und tippt. Das funktioniert im Terminplaner, im Gantt und im Kanban-Board gleich, und jede Bearbeitung wird vom Rückgängig-Verlauf aufgezeichnet.

  • InplaceEdit schaltet es ein, standardmäßig ist es aus
  • F2 bearbeitet das ausgewählte Element, Enter übernimmt und Escape bricht ab
  • BeginEdit öffnet den Editor aus deinem eigenen Menüeintrag
  • IsEditing sagt den Formulartasten, etwa Strg+Z, dass sie warten sollen, während der Nutzer tippt
Hilfethema lesen

Terminplaner: Besprechungen, Personen und Räume

TsgcVCLScheduler und TsgcFMXScheduler, und dieselben Ansichten in .NET.

TsgcVCLScheduler Tagesansicht
TsgcVCLScheduler Arbeitswochenansicht
TsgcVCLScheduler Wochenansicht
TsgcVCLScheduler Monatsansicht
TsgcVCLScheduler Agendaansicht
TsgcVCLScheduler Ressourcen-Zeitachsenansicht

Terminplaner: Besprechungen, Personen und Räume

Sieben Kalenderansichten, Personen und Räume nebeneinander

Nutzer wissen bereits, wie sich ein Kalender verhalten soll, deshalb bietet der Terminplaner die erwarteten Ansichten: Tag, Arbeitswoche, Woche, Monat, Jahr, Agenda und eine Ressourcen-Zeitachse. Die Jahresansicht zeigt zwölf Mini-Monate, jeden Tag nach Auslastung schattiert, und ein Doppelklick öffnet diesen Tag. Füge Personen, Räume oder Maschinen als Ressourcen mit eigener Farbe hinzu und gruppiere den Tag oder die Woche nach Ressource, sodass eine Praxis jeden Arzt in einer Spalte sieht und eine Werkstatt jeden Stellplatz. Arbeitszeiten, der sichtbare Tagesbereich und die Navigation sind Eigenschaften und Einzeiler.

  • View: psvDay, psvWorkWeek, psvWeek, psvMonth, psvYear, psvAgenda, psvTimeline
  • AddResource mit einer Farbe, und Options.GroupByResource für je eine Spalte
  • DayStartHour, DayEndHour und SlotMinutes bestimmen das Zeitraster
  • GoToday, Prior, Next und ScrollToTime navigieren

Die Ressourcen-Zeitachsenansicht ist Registered; in Community zeigt diese Ansicht einen Hinweis.

Hilfethema lesen

Terminplaner: Besprechungen, Personen und Räume

Ziehen zum Anlegen, Verschieben und Ändern der Größe

Eine Besprechung zu buchen sollte sich anfühlen wie sie zu zeichnen. Ziehe über freie Zeitfenster, und der Terminplaner legt einen Termin an; dein OnItemCreate-Handler setzt den Titel oder lehnt das Zeitfenster ab. Ziehe einen Termin auf eine andere Zeit, einen anderen Tag oder eine andere Ressourcenspalte, oder ziehe an einem Rand, um die Dauer zu ändern, und jede Bewegung rastet an der Zeitfenstergröße ein. Dieselben Gesten funktionieren in den anderen Ansichten: Balken lassen sich im Gantt verschieben und in der Größe ändern, und Karten wandern auf dem Board zwischen den Spalten.

  • OnItemCreate benennt einen neuen Termin oder lehnt ihn ab
  • Verschieben und Größenänderungen rasten an Options.SlotMinutes ein
  • Eine Vorschau folgt dem Zeiger, die Ansicht scrollt an den Rändern, und Escape bricht ab
  • Maus, Stift und Touch; OnCardMoving kann ein Verschieben auf dem Board verhindern
Hilfethema lesen
Monatsansicht mit einem wöchentlichen Dienstags-Stand-up an jedem Dienstag

Terminplaner: Besprechungen, Personen und Räume Nur Registered

Wiederkehrende Besprechungen aus Standardregeln

Ein wöchentliches Stand-up oder eine monatliche Review sollte nur einmal erfasst werden. Gib einem Element eine iCalendar-RRULE, und der Terminplaner zeigt jedes Vorkommen in jeder Ansicht und jedem Zeitraum. Die Regel hat das RFC-5545-Format, das Google Calendar, Outlook und Apple Kalender verwenden, sodass wiederkehrende Termine ihre Regel bei Import und Export von .ics-Dateien behalten, und dein Code kann beim Datenobjekt die Vorkommen eines beliebigen Datumsbereichs abfragen, etwa um einen Raum auf Konflikte zu prüfen.

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' wiederholt sich jeden Dienstag
  • Start und Finish des Elements sind das erste Vorkommen
  • GetOccurrences liefert die Vorkommen eines beliebigen Zeitraums
  • Mit iCalendar-Dateien importiert und exportiert

Community zeigt ein wiederkehrendes Element einmal an und behält seine Regel.

Hilfethema lesen
ICalSubscription-Demo mit einem in den Terminplaner eingeblendeten Feiertagskalender

Terminplaner: Besprechungen, Personen und Räume Nur Registered

Google Calendar, Outlook, CalDAV und .ics, rein und raus

Die Termine deiner Nutzer liegen schon in anderen Kalendern. TsgcPlannerICalendar importiert und exportiert .ics-Dateien, das Format von Google Calendar, Outlook und Apple Kalender. Mit der Brücke sgcPlannerWS folgt ein Abonnement jeder schreibgeschützten .ics-URL, etwa einer Feiertagsliste oder einem geteilten Kalender, und drei Sync-Komponenten halten einen Plan in beide Richtungen auf demselben Stand mit einem Google Calendar, einem Outlook-Kalender von Microsoft 365 oder Outlook.com über Microsoft Graph oder einem CalDAV-Kalender von Nextcloud, iCloud, Fastmail, Radicale oder jedem anderen CalDAV-Server. Jede liest nur die Änderungen seit der letzten Synchronisierung und hat eine klare Konfliktregel.

  • TsgcPlannerICalendar mit ImportFromFile und ExportToFile
  • TsgcPlannerICalSubscription mit URL und RefreshInterval, mit ETag und If-Modified-Since
  • TsgcPlannerGoogleSync mit CalendarId, Direction und AutoSyncInterval
  • TsgcPlannerGraphSync mit CalendarId und einem OAuth2-AccessToken, mit der Graph-Delta-Abfrage
  • TsgcPlannerCalDAVSync mit CalendarURL, UserName und Password, mit Sync-Tokens und ETags
  • Die spätere Änderung gewinnt einen Konflikt, und OnConflict kann anders entscheiden

Registered Edition. Die Brückenkomponenten brauchen außerdem ein registriertes sgcWebSockets; in .NET liegen sie in esegece.sgcPlanner.sgcWebSockets.

Hilfethema lesen

Terminplaner: Besprechungen, Personen und Räume

Erinnerungen mit Schlummern und Verwerfen

Eine Besprechung, an die sich niemand erinnert, besucht niemand. Gib einem Element eine Erinnerung in Minuten vor dem Beginn, und TsgcPlannerReminders findet die fälligen Erinnerungen und löst für jede ein Ereignis aus. Deine Anwendung ruft es aus einem eigenen Timer auf und entscheidet, wie die Erinnerung angezeigt wird: als Popup, als Toast oder als Ton. Ein wiederkehrendes Element erinnert bei jedem Vorkommen erneut, und eine Erinnerung kann geschlummert oder verworfen werden.

  • ReminderMinutes des Elements: -1 für keine, 0 zum Beginn
  • Check löst OnReminder für jede fällige Erinnerung aus
  • Snooze und Dismiss für das aktuelle oder nächste Vorkommen
  • In JSON gespeichert und vom Rückgängig-Verlauf aufgezeichnet
Hilfethema lesen

Terminplaner: Besprechungen, Personen und Räume

Zeitzonen pro Element

Teams an verschiedenen Standorten buchen Besprechungen in ihrer Ortszeit. Jedes Element kann eine eigene Zeitzone tragen, sodass ein Anruf um 10:00 Uhr in New York auf 10:00 Uhr New Yorker Zeit bleibt, während die Ansichten jedes Element in einer Anzeigezone zeigen. Ändere die Anzeigezone, und die Elemente wandern auf ihre Uhrzeit in der neuen Zone, während schwebende und ganztägige Elemente bleiben, wo sie sind.

  • Item.TimeZone ist die Zone von Start und Finish, leer für ein schwebendes Element
  • Data.DisplayTimeZone ist die Zone, die die Ansichten zeigen, leer für die lokale Zone
  • Die Umrechnung geschieht erst beim Anzeigen der Elemente
  • Erinnerungen laufen ebenfalls in der Anzeigezone
Hilfethema lesen

Gantt: Projekte planen und dem kritischen Pfad folgen

TsgcVCLGantt und TsgcFMXGantt: Aufgaben, Verknüpfungen, eine Zeitskala und eine Terminierungs-Engine.

ProjectGantt-Demo: Projektstrukturbaum mit Ende-Anfang- und Anfang-Anfang-Verknüpfungen

Gantt: Projekte planen und dem kritischen Pfad folgen Nur Registered

Gantt-Diagramme mit Abhängigkeiten und Vorlauf

Das Gantt zeigt einen Projektstrukturbaum mit Sammelzeilen, Meilensteinen und Fortschritt auf jedem Balken und zeichnet die Verknüpfungen zwischen Aufgaben als Pfeile. Verknüpfe Aufgaben im Code oder durch Ziehen vom Ende eines Balkens zu einem anderen, wähle Ende-Anfang, Anfang-Anfang, Ende-Ende oder Anfang-Ende und füge einen Vorlauf in Arbeitszeit hinzu. Die Zeitskala zoomt von 5 Minuten bis zu Jahren.

  • Projektstruktur über ParentId, mit UpdateSummaries aufsummiert
  • AddDependency mit TsgcPlannerDependencyKind: pdkFS, pdkSS, pdkFF, pdkSF
  • Lag auf dem Arbeitskalender gezählt
  • Milestone und Progress an jedem Element, TimeScale für den Zoom

Community speichert die Verknüpfungen, zeichnet sie aber nicht, und Ziehen zum Verknüpfen ist Registered.

Hilfethema lesen
Gantt mit hervorgehobenem kritischem Pfad und aus dem Arbeitskalender schattierten Feiertagen

Gantt: Projekte planen und dem kritischen Pfad folgen Nur Registered

Automatisch terminieren und den kritischen Pfad sehen

Wenn eine Aufgabe sich verzögert, braucht die Projektleitung sofort den neuen Endtermin, nicht erst nach einem Nachmittag mit Balkenschieben. Die Terminierungs-Engine setzt jede Aufgabe so früh wie möglich nach ihren Vorgängern auf den Arbeitskalender, überspringt arbeitsfreie Tage und Feiertage, berechnet den Puffer jeder Aufgabe und markiert den kritischen Pfad, die Aufgabenkette, die das Projektende bestimmt. Starte sie auf Abruf, nach jeder Änderung oder an einem Datenobjekt ohne Ansicht.

  • Schedule startet die Engine, AutoSchedule startet sie nach jeder Änderung
  • ShowCriticalPath hebt die Aufgaben hervor, die den Endtermin bestimmen
  • TotalSlack nennt die Arbeitsminuten, um die eine Aufgabe sich verzögern darf
  • Der Arbeitskalender legt WorkDays, WorkTime und Holidays fest

In Community löst Schedule EsgcPlannerError aus, und ShowCriticalPath hat keine Wirkung.

Hilfethema lesen
Gantt mit grauen Basisplan-Balken unter den aktuellen Balken und zwei verspäteten Aufgaben

Gantt: Projekte planen und dem kritischen Pfad folgen Nur Registered

Basispläne zeigen die Verschiebung auf einen Blick

Stakeholder fragen selten, wie der Plan aussieht; sie fragen, wie weit er sich bewegt hat. Speichere einen Basisplan, wenn der Plan genehmigt wird, und das Gantt zeichnet ihn als dünnen Balken unter jedem aktuellen Balken, sodass eine verspätete Aufgabe zu sehen ist, ohne ein einziges Datum zu lesen. Die Basisplan-Daten werden mit den Elementen gespeichert, in JSON abgelegt und mit Microsoft-Project-XML ausgetauscht, und dein Code kann sie lesen, um einen eigenen Abweichungsbericht zu erstellen.

  • SetBaseline kopiert Start und Finish jedes Elements in einem Update
  • ShowBaseline zeichnet die Basisplan-Balken
  • BaselineStart und BaselineFinish an jedem Element
  • In JSON gespeichert und aus Microsoft-Project-XML gelesen

Community speichert die Basisplan-Daten, zeichnet sie aber nicht; SetBaseline löst EsgcPlannerError aus.

Hilfethema lesen

Gantt: Projekte planen und dem kritischen Pfad folgen Nur Registered

Pläne mit Microsoft Project austauschen

Projektbüros erhalten Pläne aus Microsoft Project und schicken sie zurück. TsgcPlannerMSProject importiert und exportiert Microsoft-Project-XML (MSPDI), das XML-Format, das Project öffnet und speichert, mit Aufgaben, Verknüpfungen, Kalender, Ressourcen, Zuweisungen und Basisplänen. Ein Import kann den Plan ersetzen oder in ihn einfließen, und ein nicht wohlgeformtes Dokument löst einen Fehler mit seiner Zeilennummer aus. Der Import von 10.000 Aufgaben mit 15.000 Verknüpfungen dauerte in einer Win64-Entwicklungsmessung 264 ms. Ressourcen und Zuweisungen kommen mit den Aufgaben mit.

  • ImportFromFile, ImportFromStream und ImportFromString
  • ExportToFile schreibt das XML, das Microsoft Project öffnet
  • ImportMode: pmiReplace (Standard) oder pmiMerge
  • Fehlerhaftes XML löst EsgcPlannerError mit der Zeilennummer aus

Nicht in der Community Edition, dort ist JSON das Dateiformat.

Hilfethema lesen

Gantt: Projekte planen und dem kritischen Pfad folgen

Eine Zeitskala mit drei Ebenen und ein Ressourcen-Histogramm

Lange Pläne lesen sich besser mit mehr Kontext in der Kopfzeile, und überbuchte Personen sollten sichtbar sein, bevor der Plan veröffentlicht wird. Die Gantt-Zeitskala kann eine dritte Ebene zeigen, zum Beispiel den Monat über den Wochen über den Tagen. Ein Histogramm-Bereich am unteren Rand des Diagramms zeichnet für jeden Teilstrich, wie viel Arbeit jede Ressource im Verhältnis zu ihrer Arbeitszeit hat, und der Teil über 100 % wird in der kritischen Farbe gemalt.

  • TimeScale.TierCount 3 fügt eine obere Ebene hinzu, mit TopFormat für ihre Beschriftungen
  • ShowHistogram und HistogramHeight zeigen den Bereich
  • HistogramResourceId zeigt eine Ressource oder alle Ressourcen gestapelt in ihrer eigenen Farbe
  • Der Bereich folgt dem Scrollen und dem Zoom des Diagramms
Hilfethema lesen

Kanban: Boards, die dem Plan folgen

TsgcVCLKanban und TsgcFMXKanban: eine Spalte pro Status, auf denselben Daten wie das Gantt.

Kanban-Board mit fünf Statusspalten, Tags, Initialen der Verantwortlichen, Fälligkeitsdaten und Fortschrittsbalken

Kanban: Boards, die dem Plan folgen

Ein Aufgabenboard, mit dem dein Team arbeiten kann

Wer die Arbeit erledigt, will ein Board, kein Diagramm. Die Kanban-Ansicht baut eine Spalte pro Status mit Zähler-Badge und Einklapp-Pfeil, und jede Karte zeigt Titel, Tags, Ressourcen-Initialen, Fälligkeitsdatum und Fortschritt. Eine auf eine andere Spalte abgelegte Karte ändert Status und Rang in den gemeinsamen Daten, sodass Gantt und Terminplaner sofort nachziehen, und dein Code kann jede Verschiebung vorher ablehnen. Das Board folgt demselben hellen oder dunklen Theme wie die anderen Ansichten.

  • ColumnSource baut die Spalten aus den Status oder aus deinen eigenen Columns
  • CardOptions bestimmen, was eine Karte zeigt
  • OnCardMoving akzeptiert oder verweigert ein Ablegen
  • Spaltenbreiten und Einklappen funktionieren in jeder Edition
Hilfethema lesen
TaskBoard-Demo: fünf Spalten, drei Swimlanes nach Ressource und eine Spalte über ihrem Limit

Kanban: Boards, die dem Plan folgen Nur Registered

Swimlanes und WIP-Limits halten die Arbeit im Fluss

Swimlanes teilen es nach Ressource, übergeordneter Aufgabe oder Tag in horizontale Bänder, sodass jede Person oder jedes Epic eine Zeile bekommt, und Work-in-Progress-Limits begrenzen jede Spalte, über alle Lanes gezählt. Im Warnmodus wird eine Spalte über ihrem Limit markiert; im Blockmodus lässt sich eine Karte, die das Limit sprengen würde, nicht ablegen. Das Layout von 5.000 Karten in 8 Spalten und 6 Lanes dauerte unter Win64 5 ms.

  • SwimlaneBy: pslResource, pslParent oder pslTag
  • WIPLimit pro Spalteneintrag, 0 für kein Limit
  • WIPMode: pwmWarn markiert die Spalte, pwmBlock verweigert das Ablegen
  • Lanes und Limits arbeiten auf denselben Daten wie die anderen Ansichten

Community ignoriert SwimlaneBy und die WIP-Limits; Spalten, Breiten und Einklappen funktionieren.

Hilfethema lesen

Barrierefreiheit

UI Automation für Screenreader, Tastatur und hohen Kontrast, ohne Einrichtung.

Barrierefreiheit

Jede Ansicht des Planers, lesbar und ohne Maus bedienbar

sgcPlanner stellt die Ansichten Scheduler, Timeline, Gantt und Kanban über Microsoft UI Automation bereit: Tage, Bahnen und Spalten, die Einträge mit ihren Zeiten und die Gantt-Abhängigkeiten. Alles, was mit der Maus gezogen wird, lässt sich auch mit der Tastatur erledigen.

  • Scheduler und Timeline: Einfg fügt einen Eintrag am fokussierten Slot hinzu, Entf löscht ihn, Strg+Pfeiltasten verschieben den Eintrag, und Strg+Umschalt+Pfeiltasten ändern sein Ende
  • Gantt: Strg+Links und Strg+Rechts verschieben die Aufgabe um einen Teilstrich, Strg+K startet eine Abhängigkeit, Strg+Umschalt+K wechselt durch die Abhängigkeiten der fokussierten Aufgabe
  • Kanban: Strg+Links und Strg+Rechts verschieben die Karte in die benachbarte Spalte, Strg+Auf und Strg+Ab ändern ihre Reihenfolge
  • Unter einem Windows-Kontrastdesign werden die Eintragsfarben der Anwendung durch Systemfarben mit Umrissen ersetzt, sodass keine Information allein von der Farbe abhängt

Barrierefreiheit ist in jeder Edition standardmäßig aktiv, auch in der kostenlosen Community-Edition, unter VCL in jeder Delphi- und C++Builder-Version von Delphi 7 bis Delphi 13, in FireMonkey unter Windows sowie unter WinForms, WPF und Avalonia. In Delphi und C++Builder legen AccessibleName und AccessibleDescription den Namen und die Beschreibung fest, die über UI Automation bereitgestellt werden, und unter .NET leisten der Standardname und der Standard-Hilfetext des jeweiligen Frameworks dasselbe. Siehe die Konformitätsberichte zur Barrierefreiheit.

Hilfethema lesen

sgcPlanner in Aktion erleben

sgcPlanner in den sgcUI-Suite-Demos: vollständige Anwendungen, die offline mit integrierten Simulationsdaten laufen.

Gemessen an echten Workloads

Entwicklungsmessungen von Win64-Release-Builds bei 1920 x 1080. Win32 ist etwa 1,5- bis 1,7-mal langsamer.

MessungErgebnisBedingungen
10.000 Aufgaben (1.000 Sammelaufgaben, 3 Ebenen) mit 15.000 Verknüpfungen und 30 Feiertagen automatisch terminieren, kritischer Pfad inklusive11 msWin64-Release-Build
Gantt-Frame beim Scrollen von 10.000 Aufgaben mit 15.000 Verknüpfungen11 msWin64-Release-Build, 1920 x 1080
Kanban-Layout von 5.000 Karten in 8 Spalten und 6 Lanes5 msWin64-Release-Build
Terminplaner-Wochenansicht mit 2.000 zeitgebundenen Elementen, Layout1 msWin64-Release-Build
10.000 Aufgaben mit 15.000 Verknüpfungen aus MS-Project-XML importieren264 msWin64-Release-Build

Quelle: das Hilfethema, das diese Zahlen dokumentiert.

Wer mit sgcPlanner baut

Projekt- und Engineering-Software

Projektbüros und Ingenieurbüros

Plane ein Projekt als Projektstruktur, verknüpfe die Aufgaben und lass die Engine sie auf dem Firmenkalender terminieren, während der kritische Pfad zeigt, was den Endtermin bestimmt. Speichere bei der Genehmigung einen Basisplan, und die Verschiebung zeigt sich unter jedem Balken. Pläne kommen aus Microsoft Project und gehen als XML dorthin zurück, und dieselben Aufgaben erscheinen für das Team auf einem Board.

  • Gantt mit Abhängigkeiten
  • Automatische Terminierung und kritischer Pfad
  • Basispläne
  • MS-Project-XML
Demo ProjectGantt ausführen

Buchungs- und Terminsysteme

Praxen, Werkstätten und Raumbuchung

Zeige jeden Arzt, jeden Stellplatz oder jeden Besprechungsraum als eigene Spalte und lass Mitarbeiter durch Ziehen über freie Zeitfenster buchen. Wiederkehrende Termine kommen aus Standardregeln, gesetzliche Feiertage kommen über ein .ics-Abonnement, und die Google-Calendar-Brücke hält den eigenen Kalender einer Fachkraft auf dem gleichen Stand. Die DataSet-Quelle schreibt jede Buchung direkt in deine Tabellen zurück. Mitarbeiter sehen in jeder Ansicht dieselben Buchungen.

  • Terminplaner-Ansichten und Ressourcen
  • Wiederholung
  • DataSet-Bindung
  • Google-Calendar-Synchronisierung
Demo TeamScheduler ausführen

Aufgabenverfolgung und Helpdesk-Tools

Agile Teams und Service-Desks

Gib dem Team ein Kanban-Board mit einer Swimlane pro Person und Work-in-Progress-Limits pro Spalte, und gib der Leitung ein Gantt derselben Tickets. Eine nach Erledigt verschobene Karte färbt Balken und Kalendertermin sofort um, weil alle drei Ansichten ein Datenobjekt teilen. Statusbilder für eine nächtliche E-Mail lassen sich headless auf einem Server rendern.

  • Kanban
  • Swimlanes und WIP-Limits
  • Synchronisierte Ansichten
  • Headless-Rendering
Demo TaskBoard ausführen

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.

Hilfethema lesen →

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

Hilfethema lesen →

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

Hilfethema lesen →

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.

Die sgcPlanner-Demos ausführen

Kompilierte Demo-Programme findest du in sgcUI_bin.zip, ohne Installation. Der Quellcode jeder Demo liegt dem Paket bei, für Delphi, C++ Builder und .NET.

ProjectPlanner

ProjectPlanner

Gantt, Kanban und Terminplaner auf einem Datenobjekt, immer synchron.

TeamScheduler

TeamScheduler

Sieben Ansichten mit der Jahresansicht, Ressourcengruppen, wiederkehrende Besprechungen, Erinnerungen, Zeitzonen, Rückgängig und Wiederholen sowie Bearbeitung an Ort und Stelle.

Nur Registered ProjectGantt

Verknüpfungen, automatische Terminierung, kritischer Pfad, Basispläne, Microsoft-Project-XML, eine Zeitskala mit drei Ebenen und das Ressourcen-Histogramm.

Nur Registered TaskBoard

Statusspalten, Swimlanes nach Ressource und WIP-Limits auf einem Kanban-Board.

DataSetPlanner

DataSetPlanner

An TDataSets gebundene Elemente, Ressourcen und Abhängigkeiten, mit zurückgeschriebenen Änderungen.

Nur Registered ICalendarSync

.ics-Dateien importieren und exportieren.

ICalSubscription

Nur Registered ICalSubscription

Einer schreibgeschützten .ics-URL folgen, etwa einer Feiertagsliste.

Nur Registered GoogleCalendarSync

Zwei-Wege-Synchronisierung mit einem Google Calendar über sgcWebSockets.

Nur Registered OutlookCalendarSync

Zwei-Wege-Synchronisierung mit einem Outlook-Kalender von Microsoft 365 oder Outlook.com über Microsoft Graph.

Nur Registered CalDAVSync

Zwei-Wege-Synchronisierung mit einem CalDAV-Kalender, etwa Nextcloud, iCloud, Fastmail oder Radicale.

HeadlessReport

Rendert die Ansichten ohne Fenster in Bilddateien.

PlannerFMX

Die drei Ansichten in einer FireMonkey-Anwendung.

Kompilierte Demos

Sofort lauffähige Programme jedes sgcUI-Produkts, nichts zu installieren.

sgcUI_bin.zip herunterladen →

Wo sgcPlanner enthalten ist

sgcPlanner ist Teil von sgcUI Enterprise und wird auch einzeln verkauft. sgcPlanner ist außerdem im All-Access-Bundle enthalten.

sgcPlanner Einzelpaket

€249 / Entwickler, voller Quellcode, 1 Jahr Updates.

sgcPlanner kaufen → Preise ansehen →

sgcUI Enterprise

Alle 14 sgcUI-Produkte, ab €699.

Enterprise ansehen →

.NET

Die .NET-Edition kostet gleich viel. Eine kostenlose Community Edition gibt es auf NuGet als esegece.sgcPlanner.Community.

Preise ansehen →

Die kostenlose Community Edition ist esegece.sgcPlanner.Community auf NuGet. Die Tabelle zeigt, was sie enthält.

FunktionCommunity (kostenlos)Registered
Terminplaner-Ansichten Tag, Arbeitswoche, Woche, Monat und Agenda✓✓
Gantt-Aufgabenbaum, Sammelaufgaben, Meilensteine und Fortschritt✓✓
Kanban-Spalten, Einklappen und Kartenoptionen✓✓
Drag and Drop in jeder Ansicht✓✓
DataSet-Bindung, JSON, Themes sowie headless PNG und SVG✓✓
Terminplaner-Jahresansicht✓✓
Erinnerungen und Zeitzonen pro Element✓✓
Rückgängig und Wiederholen, Bearbeitung an Ort und Stelle✓✓
Gantt-Zeitskala mit drei Ebenen und Ressourcen-Histogramm✓✓
Wiederholung−✓
Terminplaner-Ressourcen-Zeitachsenansicht−✓
Abhängigkeitspfeile und Ziehen zum Verknüpfen−✓
Automatische Terminierung, kritischer Pfad und Basispläne−✓
Swimlanes und WIP-Limits−✓
iCalendar und Microsoft-Project-XML−✓
Zwei-Wege-Synchronisierung mit Google Calendar, Outlook und CalDAV sowie iCal-Abonnement (sgcPlannerWS)−✓

Unterstützte Frameworks und Plattformen

Komponenten in sgcPlanner

KomponenteWas sie tut
TsgcPlannerDataDas gemeinsame Modell: Elemente, Ressourcen, Status, Abhängigkeiten und Arbeitskalender.
TsgcVCLScheduler, TsgcFMXSchedulerAnsichten für Tag, Arbeitswoche, Woche, Monat, Jahr, Agenda und Zeitachse.
TsgcVCLGantt, TsgcFMXGanttAufgabenbaum, Balken, Verknüpfungen, Terminierungs-Engine, kritischer Pfad und Basispläne.
TsgcVCLKanban, TsgcFMXKanbanStatusspalten, Karten, Swimlanes und WIP-Limits.
TsgcPlannerSource_DataSetPlan aus einem TDataSet.
TsgcPlannerICalendar, TsgcPlannerMSProjectiCalendar-.ics-Dateien und Microsoft-Project-XML lesen und schreiben (Registered).
TsgcPlannerRendererHeadless-Ausgabe als PNG und SVG.
TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS)Zwei-Wege-Synchronisierung mit Google Calendar, mit Outlook und Microsoft 365 über Microsoft Graph und mit CalDAV-Servern sowie iCal-Abonnements über sgcWebSockets. Nur Registered.
ZielKomponentePlattformen
Delphi 7 bis 13, VCLTerminplaner, Gantt, KanbanWin32 und Win64
Delphi XE6 bis 13, FireMonkeyTsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanbanWindows, macOS, iOS und Android
C++ Builder 2007 bis 13VCL- und FMX-AnsichtenGenerierte .hpp-Header und statische Bibliotheken
Delphi 10.2 bis 13, frameworkneutralDaten, Engines, JSON, iCalendar, Microsoft Project, RendererLinux64, zum Beispiel um Pläne auf einem Server zu rendern
.NET Framework 4.7.2, .NET 8, 9 und 10TsgcWinFormsScheduler, Gantt und Kanban, und die WPF- und Avalonia-PendantsWinForms, WPF, Avalonia, headless PNG und SVG

Häufig gestellte Fragen

Ja, in der Registered Edition. TsgcPlannerMSProject liest und schreibt Microsoft-Project-XML (MSPDI) mit Aufgaben, Verknüpfungen, Kalender, Ressourcen, Zuweisungen und Basisplänen. Unterstützt wird das XML-Format, speichere den Plan in Project also als XML.

Ja, in beide Richtungen. Google Calendar wird über TsgcPlannerGoogleSync synchronisiert, Outlook-Kalender von Microsoft 365 und Outlook.com werden über Microsoft Graph mit TsgcPlannerGraphSync synchronisiert, und CalDAV-Kalender, etwa Nextcloud, iCloud, Fastmail oder Radicale, mit TsgcPlannerCalDAVSync. Jeder andere Kalender, der eine .ics-URL veröffentlicht, lassen sich mit TsgcPlannerICalSubscription schreibgeschützt verfolgen, und .ics-Dateien werden mit TsgcPlannerICalendar importiert und exportiert. Die Brücken brauchen die Registered Edition und sgcWebSockets.

Die Hilfe veröffentlicht Entwicklungsmessungen von Win64-Release-Builds: Das automatische Terminieren von 10.000 Aufgaben mit 15.000 Verknüpfungen dauerte 11 ms, und ein Frame beim Scrollen derselben 10.000 Aufgaben dauerte 11 ms. Ein Kanban-Layout von 5.000 Karten dauerte 5 ms. Win32 ist etwa 1,5- bis 1,7-mal langsamer.

Die drei Ansichten mit Drag and Drop, Sammelaufgaben, Meilensteine, Fortschritt, den Arbeitskalender, DataSet-Bindung, JSON und Headless-Ausgabe. Wiederholung, automatische Terminierung, gezeichnete Abhängigkeiten, kritischer Pfad, Basispläne, die Zeitachsenansicht, Swimlanes, WIP-Limits, iCalendar, Microsoft-Project-XML und die Brücken sind Registered.

Ja. TsgcPlannerSource_DataSet bindet das Datenobjekt an jedes TDataSet, etwa FireDAC, TClientDataSet oder dbExpress. Es lädt Elemente, Ressourcen und Abhängigkeiten über Feldzuordnungen, folgt den Änderungen der DataSets und schreibt die in den Ansichten vorgenommenen Änderungen zurück.

Ja, über FireMonkey: TsgcFMXScheduler, TsgcFMXGantt und TsgcFMXKanban laufen ab Delphi XE6 unter Windows, macOS, iOS und Android. Unter Linux64 kompilieren das Datenmodell, die Engines, JSON, iCalendar, Microsoft-Project-XML und der Renderer ab Delphi 10.2.

Ja. TsgcPlannerRenderer zeichnet den Terminplaner, das Gantt oder das Kanban eines Datenobjekts ohne Fenster als PNG oder SVG, unter Windows oder Linux64, im hellen oder dunklen Theme.

sgcPlanner Hilfe

3,000+Entwickler
20+Jahre
761+Komponenten
30+API-Integrationen
5Plattformen
30 Tage Geld-zurück-GarantieNicht zufrieden? Fordere innerhalb von 30 Tagen nach dem Kauf eine vollständige Rückerstattung an. Rückerstattungsrichtlinie ansehen

sgcPlanner heute testen

Die sgcUI-Testversion enthält sgcPlanner und jedes andere sgcUI-Produkt.