Programmierung

GanttGraph (Teil 2)

Der GanttGraph ist ein Objekt in CONZEPT 16, welches zum Erstellen von Gantt-Diagrammen benutzt wird. Den Aufbau und die Funktionsweise eines Gantt-Diagramms habe ich in meinem letzten Artikel beschreiben. In diesem Artikel möchte ich speziell auf die Bearbeitung der Achsen eines GanttGraph-Objektes eingehen.


Die Verwendung des GanttGraph-Objekts teilt sich grob in zwei Bereiche auf, die Bearbeitung der Achsen und die Bearbeitung der Intervalle. Während Intervalle nur zur Laufzeit mit den Befehlen WinGanttIvlAdd() und WinGanttIvlRemove() hinzugefügt bzw. gelöscht werden können, können die Achsen bereits im Designer mit Hilfe des GanttGraph-Editors statisch bearbeitet werden. Der GanttGraph-Editor kann im Kontextmenü des GanttGraph-Objekts über den Menüeintrag Achsen bearbeiten… oder mit einem Doppelklicken auf das Objekt aufgerufen werden.

Die Achsen des GanttGraph-Objekts

Der GanttGraph besitzt mindestens eine horizontale und eine vertikale Achse. Diesen Achsen können weitere Achsen untergeordnet werden um z.B. eine Gruppierung zu ermöglichen. Eine Achse besteht aus einem Titel und einer Skala. Den Zellen innerhalb der Skala können über die Eigenschaft wpScalaLabels Beschriftungen zugeordnet werden.

Gantt-Diagramm in CONZEPT 16

In der Eigenschaft wpSubDivisions der übergeordneten Achse kann angegeben werden, wie viele Zellen der untergeordneten Achse einer Zelle der übergeordneten Achse zugehören. Ein Wert von 4 bedeutet zum Beispiel, dass vier Zellen der untergeordneten Achse zu einer Zelle der übergeordneten Achse gehören (siehe Bild Y-Achse). Die Beschriftung der Zellen einer Skala kann über die Eigenschaft wpScalalabels gesetzt werden.

Kommaseparierte Liste

Es gibt zwei Möglichkeiten innerhalb des Designers die Eigenschaft wpScalaLabels zu setzen. Die erste ist in die Eigenschaft eine kommaseparierte Liste von Anzeigetexten einzutragen. Dies könnte wie folgt aussehen:

'Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag'

Dabei bekommt die erste Zelle den Text Montag, die zweite Zelle den Text Dienstag, die Dritte den Text Mittwoch usw. zugeordnet. Sind die Elemente am Ende der Liste angekommen. Fängt diese wieder von vorne an. Also nach dem Sonntag würde es wieder mit dem Montag beginnen. Dies würde theoretisch unendlich gehen. Um zu verhindern, dass sich die Liste nach dem letzten Element wiederholt kann man ihr am Ende eine Tilde hinzufügen:

'Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag~'

Dadurch würde jedes Listenelement nur einmal zur Beschriftung verwendet werden, die darauf folgenden Zellen der Skala sind dann leer.

Makros

Die zweite Möglichkeit die Eigenschaft wpScalaLabels zu setzen ist über Makros. Ein Makro wird wie folgt angegeben:

$(<Datentyp>, <Startwert>, <Endwert>, <Schrittweite>, opt <Darstellungsformat>)

Als Datentyp können INT, TIME und DATE angegeben werden. Erst mal für einen Datentyp entschieden, verhält sich dieser Makro im Prinzip wie eine for-Schleife.

$(INT, 0, 100, 5)

Dieser Ausdruck würde eine Beschriftung von 0 bis 100 in 5er Schritten bewirken, also:

0, 5, 10, 15…

Bei den Datentypen TIME und DATE kann optional ein Darstellungsformat angegeben werden:

a) $(TIME, 10:00, 17:00, 1:00, HH:MM)
b) $(DATE, 1.1.2012, 31.12.2012, 31, MM/yy)

Die Beschriftung in den Zellen würde wie folgt aussehen:

a) 10:00, 11:00, 12:00 …
b) 01/12 02/12 03/12 …

Bei dem Datentyp Date ist zu beachten, dass immer die Anzahl der Tage erhöht wird. In meinem Beispiel wird diese Anzahl immer um 31 erhöht, wodurch sich im angegebenen Darstellungsformat der Monat immer um 1 erhöht. Das tatsächliche Datum weicht über die Zeit immer weiter ab, da einige Monate weniger als 31 Tage besitzen (1.1.2000, 1.2.2000, 3.3.2000, 3.4.2000, 4.5.2000 usw.).

Indizes

Zur Laufzeit gibt es weiterhin die Möglichkeit einzelne Zellen der Skala, sogenannte Indizes, anzusprechen. Dabei funktionieren die Indizes wie ein Index der Eigenschaft wpScalaLabels. Der Index beginnt bei der ersten Zelle mit dem Wert 0. Dieser Wert erhöht sich von Zelle zu Zelle jeweils um 1, bei der X-Achse von links nach rechts und bei der Y-Achse von oben nach unten (siehe Bild).

Möchten wir also beispielsweise den Text der dritten Indize verändern geht das wie folgt:

$axsSample->wpScalaLabels(3) # 'Raum 3';

Auf diese Weise können bis zu 30000 Skalenbeschriftungen pro Achse erzeugt werden. Um die Indizes verwenden zu können muss vorher die maximale Anzahl der möglichen Skalenbeschriftungen in der Eigenschaft wpScalaLabelCount gesetzt werden.


In meinem nächsten und abschließenden Artikel dieser Reihe werde ich auf die Erstellung und Verwendung der Intervalle im GanttGraph-Objekt an Hand eines Beispiels eingehen.

2 Kommentare

2 Kommentare “GanttGraph (Teil 2)”

  1. @Th.Eichele

    – Werte, die von einem Makro erstellt wurden, verhalten sich wie im selektierten bzw. über die Eigenschaft wpLocale gesetzten Locale-Objekt beschrieben. Ist kein extra Locale-Objekt selektiert oder gesetzt, werden die Einstellungen des Betriebssystems verwendet.

    – Um eine Beschriftung MM/yy über mehrere Jahre zu ermöglichen, können Sie, wie Sie bereits geschrieben haben, die Achse in eine übergeordnete Achse für die Jahre und eine untergeordnete Achse für die Monate aufteilen. Weiterhin können Sie die Indizes zur Laufzeit ansprechen und so den Anzeige-Wert über die Eigenschaft wpScalaLabels dynamisch setzen.

  2. – Wie erzeugt das Makro Int-Werte > 1000 ? Mit Tausenderpunkt oder ohne ?
    – Eine korrekte Beschriftung MM/JJ über mehr als 4 Jahre kann also nur zu Fuß erzeugt werden ? (oder indem man nur die 12 Monate ausgibt, die sich wiederholen, und das Jahr in eine übergeordnete Achse schreibt)

Kommentar abgeben