 |
So verwenden Sie benutzerdefinierte Datenfelder
Mit iGrafx Professional haben Sie die Möglichkeit, Objekte mit Daten zu hinterlegen - der Prozeßmodus erlaubt alle Angaben bezüglich der Dauer, der Art und der jeweiligen Ressourcen einer Aktivität. Durch einen Doppelklick auf ein Symbol blenden Sie das »Eigenschaften«-Fenster ein.
Der Befehl »Verknüpfungen« befindet sich im Menü »Einfügen | Verknüpfungen«. Hier bestimmen Sie die Art der Verknüpfung und legen im Register »Benutzerdefinierte Daten« über »Einrichten« neue benutzerdefinierte Felder an. Diese Felder können allerdings nur per VBA ausgelesen werden. Zudem können Sie mit einigen Kommandos die Feldinhalte in einer Textdatei speichern und diese Datei etwa in eine Datenbank importieren.
Starten Sie iGrafx und wählen Sie ein neues »Basic Diagram«. Öffnen Sie das »Tools«-Menü und wählen darin »Visual Basic | Visual Basic Editor«. Das Aussehen des VBA-Editors entspricht dem in Word oder Excel.
In der linken oberen Ecke befindet sich ein Bereich, in dem die einzelnen Projekte aufgelistet sind. Mit einem Doppelklick auf »Diagram1« öffnen Sie die Arbeitsfläche. Hier können Sie nun für das geöffnete Dokument Formulare und VBA-Code erzeugen. Im linken unteren Bereich des VBA-Fensters sehen Sie die Eigenschaften der ge- rade bearbeiteten Ebene.
Zuerst definieren Sie die einzelnen Variablen. Dies erledigen die »DIM«-Befehle im ersten Block des Listings im Kasten. Die folgenden »Set«-Befehle aktivieren das benutzte Diagramm und rufen die »CustomDataDefinitions« auf, was eine Liste mit den Werten der benutzerdefinierten Daten ist.
Die nächsten Methoden, »CreateObject« und »CreateTextFile«, legen den Text an. Wenn Sie die Textdatei nicht in »C:\Temp« anlegen wollen, ändern Sie den Pfad. Mit der letzten Set-Anweisung wird festgelegt, daß Daten in die Textdatei geschrieben werden können. Diese Daten müssen aus den benutzerdefinierten Daten ausgelesen werden.
Der »Write«-Befehl im nächsten Befehlsblock legt Spaltenüberschriften an und bereitet den Text zum Import in die Datenbank vor. Die erste Spalte bekommt den Titel »Name«. Dieses Feld enthält den Text des Objekts. Die Namen der benutzerdefinierten Felder werden global innerhalb eines Dokuments verwaltet, jedes Objekt erhält die gleichen Felder, kann aber mit unterschiedlichen Werten belegt werden.
Daher ist eine genaue Identifikation notwendig. Die Bezeichnungen der benutzerdefinierten Felder werden über das Objekt »AnObject.Name« ausgelesen. Abschließend liest das Makro die Objektinformation aus und schreibt sie in die Textdatei. Dafür werden per Schleife so lange die Inhalte der Felder abgefragt, bis alle Felder ausgelesen sind. Dies geschieht mit der »Count«-Methode des »CustomDataDefinitions«-Objekts. Außerdem sollen nur Shapes ausgelesen werden, nicht Linien oder andere Objekte. Dies wird durch eine If-Then-Abfrage gewährleistet.
Die einzelnen Werte sind auch hier mittels Komma getrennt in die Textdatei geschrieben. Am Ende jeder Zeile wird dann noch ein Zeilenumbruch eingefügt. Tragen Sie nun Werte in die benutzerdefinierten Felder ein.
Listing »igrafx«
Dim igxDocumentAs igrafx3.Document
Dim igxDiagram As Diagram
Dim igxShape As Shape
Dim igxCustomDataDef As CustomDataDefinitions
Dim line As Recordset
Dim AnObject As Object
Dim i As Integer '
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Dim defvol As CustomDataValue
Set igxDocument = Application.ActiveDocument
Set igxDiagram = Application ActiveDocument.ActiveDiagram
Set igxCustomDataDef = igxDocument.CustomDataDefinitions
Set fs = CreateObject ("Scripting.FileSystemObject")
fs.CreateTextFile "C:\temp\test1.txt"
Set f = fs.GetFile ("C:\temp\test1.txt")
Set ts = f.OpenAsTextStream (ForWriting, TristateUseDefault)
ts.write "Name"
For Each AnObject In igxDocument.CustomDataDefinitions
ts.write ", " & AnObject.Name
Next
ts.write vbCrLf Leerzeile nach Spaltenkopf
ts.write vbCrLf
For Each AnObject In igxDiagram.DiagramObjects
If AnObject.Type = ixObjectShape Then
ts.write AnObject.Shape.Text
For i = 1 To igxDocument.CustomDataDefinitions.Count
ts.write ", " & AnObject.CustomDataValues.Item (CInt (i)).Value
Next
End If
ts.write vbCrLf Zeilenumbruch
Next
|
 |