Programmierung

GanttGraph (Teil 3)

In meinem ersten Artikel bin ich auf den Aufbau und die Funktionsweise eines Gantt-Diagramms eingegangen. In meinem zweiten Artikel lag der Hauptfokus auf den Achsen des GanttGraph-Objektes. In diesem abschließenden Artikel der Reihe geht es um die Erstellung von Objekten innerhalb eines GanttGraphen.


Ein Gantt-Diagramm ist eine der effektivsten Methoden um die zeitliche Abfolge von Aktivitäten darzustellen, doch sagt ein Gantt-Diagramm wenig aus, wenn nur die Achsen beschriftet sind. Was ein Gantt-Diagramm wirklich ausmacht sind die Daten zwischen den Achsen. Um diese darzustellen, gibt es drei Objekte von CONZEPT 16, die in den GanttGraph eingefügt werden können:

Das Intervall-Objekt

Das meist gebräuchlichste Objekt, das in einen GanttGraph eingefügt wird, ist das Intervall. Dieses Objekt kann zur Laufzeit mit dem Befehl WinGanttIvlAdd() innerhalb des GanttGraphen erzeugt werden. Im ersten Parameter wird dabei der Deskriptor des GanttGraph übergeben. Als Rückgabewert wird der Deskriptor des Intervall-Objektes zurückgeliefert. In den zweiten und dritten Parameter wird die Position, an dem das Intervall-Objekt erzeugt werden soll, angegeben. Dabei wird erst die Zelle der X-Achse angegeben, dann die der Y-Achse. Die Länge des Intervalls muss im vierten Parameter angegeben werden. Optional kann man dem Intervall noch einen Namen und einen Titel geben. Mit dem Befehl WinGanttIvlRemove() kann ein Intervall aus dem GanttGraph gelöscht werden.

// Erzeugt ein Intervall in der 5. Zeile von der 3. bis zur 4. Spalte
tIvl # aGantt->WinGanttIvlAdd(3, 5, 2);

// Erzeugt ein Intervall in der 3. Zeile von der 1. bis zur 5. Spalte
tIvl # aGantt->WinGanttIvlAdd(1, 3, 5);

// Erzeugt das gleiche Intervall mit Titel
tIvl # aGantt->WinGanttIvlAdd(1, 3, 5, '', 'Intervall');

// Erzeugt das gleiche Intervall mit Name und Titel
tIvl # aGantt->WinGanttIvlAdd(1, 3, 5, 'ivl', 'Intervall');

// Entfernt das Intervall
tIvl->WinGanttIvlRemove();

Nach dem das Objekt erzeugt wurde, kann das Objekt über die Eigenschaften individualisiert werden. So kann beispielsweise über die Eigenschaft wpStyleIvl bestimmt werden wie das Objekt im GanttGraph dargestellt werden soll. Es gibt folgende Darstellungsmöglichkeiten:

_WinStyleIvlStandard (Darstellung mit Pfeilen)
_WinStyleIvlRound (Die Enden des Intervalls sind abgerundet)
_WinStyleIvlHexagon (Die Enden des Intervalls sind spitz)
_WinStyleIvlNoArrows (Darstellung ohne Pfeile)
_WinStyleIvlOpenEnd | _WinStyleIvlRound (Zeichnet ein links offenes Intervall)
_WinStyleIvlOpenStart | _WinStyleIvlStandard (Zeichnet ein rechts offenes Intervall)

Es gibt öfters mal den Fall, dass sich zwei Objekte innerhalb des GanttGraphen überschneiden. Um nun entscheiden zu können welches Objekt davon über das andere gezeichnet wird, gibt es die Eigenschaft wpZOrder. Ein Objekt wird dann über ein anderes Objekt gezeichnet, wenn es einen höheren Wert in der Eigenschaft wpZOrder hat. Sollten zwei Intervalle den gleichen Wert besitzen, kommt das Intervall in den Vordergrund, das den kleineren horizontalen Endpunkt besitzt.


Das Box-Objekt

Das Box-Objekt mag für den Anwender nicht unbedingt wie ein eigenständiges Objekt wirken, da es oft nur wie ein andersfarbiger Bereich aussieht. Doch viel mehr ist es auch nicht. Es kann über den Befehl WinGanttBoxAdd() dem GanttGraph-Objekt hinzugefügt werden. Dabei wird als erster Parameter wieder der Deskriptor des GanttGraphen angegeben. Als Rückgabewert erhält man den Deskriptor der Box. Im zweiten Parameter werden die Koordinaten in Form eines rect‘s übergeben. Die Angabe erfolgt in Zellkooridnaten. Optional können noch Füllfarbe, Name und Caption der Box gesetzt werden. Die Box kann ebenfalls über den Befehl WinGanttIvlRemove() entfernt werden.

// Erzeugt eine schwarze Box in der ersten Zeile und ersten Spalte
// mit drei Zellen Breite und 2 Zellen Höhe
tBox # aGantt->WinGanttBoxAdd(RectMake(0, 0, 3, 2), _WinColBlack);

// Erzeugt die gleiche Box in gelb mit Namen und Caption
tBox # aGantt->WinGanttBoxAdd(RectMake(0, 0, 3, 2),
                              _WinColYellow, 'boxYellow', 'gelbe Box');

// Erzeugt eine Box in der dritten Zeile und dritten Spalte
// mit fünf Zellen Breite und einer Zelle Höhe
// wird keine Farbe angegeben wird die Farbe _WinColHighLight verwendet
tBox # aGantt->WinGanttBoxAdd(RectMake(2, 2, 5, 2));

// Entfernt die Box aus dem GanttGraph
tBox->WinGanttIvlRemove();

Von den Eigenschaften her gibt es keine großen Unterschiede zwischen Box und Intervall. Ein Intervall besitzt eine eindeutige wpID, die beispielsweise bei dem Event EvtMouseItem des GanttGraph-Objektes übergeben wird. Dies besitzt die Box nicht. Dafür besitzt die Box die Eigenschaft wpWordBreak wodurch mehr Text angezeigt werden kann. Die Eigenschaft wpStyleIvl verhält sich auch ein wenig anders als die des Intervalls. Durch das Setzen der Eigenschaft bei einem Box-Objekt kann statt einer Fläche eine Linie gezeichnet werden. Die Linie wird in der Hintergrundfarbe des Box-Objektes gezeichnet. In der Eigenschaft können folgende Werte eingetragen werden:

_WinStyleIvlStandard (Es wird eine Fläche gezeichnet)
_WinStyleIvlBoxHorz (Zeichnen einer horizontalen Linie)
_WinStyleIvlBoxVert (Zeichnen einer vertikalen Linie)

Die Linie wird am oberen oder linken Rand des Box-Objekts auf das Grid gezeichnet. Standardmäßig wird das Grid nach der Box gezeichnet und überdeckt somit die Linie.


Das Line-Objekt

Zusätzlich zu den oben beschriebenen Objekten kann in den GanttGraphen eine Hilfslinie eingefügt werden. Diese kann als Separator angesehen werden, da die Größe nicht bestimmt werden kann. Hinzugefügt wird diese Linie über den Befehl WinGanttLineAdd(), dabei wird wieder der Deskriptor des GanttGraphen als ersten Parameter übergeben. Der zweite Parameter ist abhängig vom Vierten. Im vierten Parameter wird angegeben ob eine horizontale Linie (true) oder eine vertikale Linie (false) gezeichnet werden soll. Je nachdem wird im zweiten Parameter angegeben in welcher Zeile (true) oder Spalte (false) die Hilfslinie gezeichnet werden soll. Optional kann im dritten Parameter die Farbe der Linie angegeben werden. Auch ein Name kann optional angegeben werden. So wie die anderen Objekte auch kann die Linie mittels WinGanttIvlRemove() entfernt werden.

// Rote Hilfslinie in der dritten Spalte zeichnen
tLine # aGantt->WinGanttLineAdd(3, _WinColRed, false);

// Gelbe Hilfslinie in der fünften Zeile zeichnen
tLine # aGantt->WinGanttLineAdd(5, _WinColYellow, true);

// Hilfslinie entfernen
tLine->WinGanttIvlRemove();

Fazit

Mit Hilfe des GanttGraphen kann auf einfache Weise ein Gantt-Diagramm erstellt werden. Durch die Vielzahl an Elementen, Objekten und dessen Eigenschaften ist es aber auch ein sehr präzises Werkzeug das viele Möglichkeiten zur Darstellung bietet.

3 Kommentare

3 Kommentare “GanttGraph (Teil 3)”

  1. Was zurzeit leider nicht möglich ist, aber äusserst wünschenswert wäre, ist das Darstellen von in der Höhe variierbaren Intervall-Objekten. Während die Breite beliebig wählbar ist, ist die Höhe auf 1 Zeile beschränkt.

Kommentar abgeben