ShapeSheets programmieren mit
Microsoft Visio 2010

Sie befinden sind hier: Vsio-Training > Shapefile

 

Visio Seminare

Grundidee von Visio ist die Arbeit mit vorab bereitgestellten Bausteinen, bei dem aus einer Liste von vordefinierten Komponenten, den so genannten "Shapes" eine Zeichnung entsteht. Viele Shapes zeichnen sich dadurch aus, dass sie nicht einfach "nur" eine optische Darstellung besitzen, sondern auch mit dem Benutzer interagieren können. Haben Sie nicht auch schon überlegt, wie diese Shapes funktionieren bzw. wie diese definiert werden? Des Rätsels Lösung liegt in der Entwicklungsumgebung, die neben der Programmierung über Automation in jeder Visio-Version enthalten ist: dem ShapeSheet.

Inhalte der Microsoft Visio 2010 Schulungen, Workshops und Seminare

 

Die Erweiterung von Visio

Visio ist quasi-Standard für die Erstellung von Geschäftsgrafiken. Ob Organigramm, Flussdiagramm oder Netzwerkdiagramm: Visio findet seinen Einsatz. Dabei fällt kaum auf, dass Visio als Programm sehr viel mehr kann. Beispielsweise ist es ohne weiteres möglich, ein Visio-OLE-Objekt in ein VB-Formular einzufügen und so alle graphischen Funktionalitäten der Anwendung vom eingebetteten Visio bereitstellen zu lassen. Um Visio wirklich an die eigenen Bedürfnisse anpassen zu können ist es notwendig, sich mit der Programmierung von Visio auseinanderzusetzen. Die Programmierung ist jedoch nur zu einem Teil die Automationsprogrammierung. Das ShapeSheet ist die Basis dessen, was Shapes sind. Kenntnisse des ShapeSheets sind für die Visio-Programmierung genau so wichtig, wie Kenntnisse des Objektmodells.

Das ShapeSheet

Alle grafischen Objekte in Visio werden als "Shape" bezeichnet. Die Basis der Shapes ist allerdings keine Sammlung von Vektorinformationen, wie z.B. bei Corel Draw oder Adobe Illustrator, sondern eine Menge von Parametern, deren Zusammenwirken Aussehen und Verhalten des Shapes bestimmen. Diese Parameter werden in einer Struktur zusammengefasst, die der Seite eines Kalkulationsprogramms ähnelt, dem "ShapeSheet". Visio wertet die Informationen des ShapeSheets aus und stellt das Ergebnis grafisch als Shape dar. Insofern besitzt Visio mehr Ähnlichkeit mit einem parametrischen CAD-System als mit einem Zeichenprogramm mit Cliparts. Das Shape und das ShapeSheet sind also identisch, sie stellen ein und dieselbe Datenmenge dar. Aktionen, die Sie am Shape vornehmen, haben immer direkt eine Änderung von Werten im ShapeSheet zur Folge und umgekehrt. Das ShapeSheet wird angezeigt, indem man das gewünschte Shape markiert und aus dem Menü "Fenster" den Punkt "ShapeSheet anzeigen" auswählt.

Visio ShapeSheet

Jedes Shape beinhaltet ein ShapeSheet. Da auch eine Gruppe von Shapes wieder ein Shape ist, besitzt sie ebenfalls ein eigenes ShapeSheet.

Arten von Shapes

In Visio gibt es mehrere unterschiedliche Shape-Arten (siehe auch Abbildung 2):

shape_arten

Zweidimensionale Shapes können einen offenen oder geschlossenen Umriss besitzen. Eindimensionale Shapes: z.B. jeder Verbinder. Diese bilden grundsätzlich eine Linie, können aber aber auch komplexe Strukturen wie einen Pfeil abbilden. Gruppen bilden ein Shape, welches selbst wieder Shapes enthält. Importierte Grafiken werden von Visio in ein eigenes Shape gekapselt. Hilfslinien und Hilfspunkte sind keine Shapes im eigentlichen Sinne, sie dienen der Unterstützung beim Zeichnen. Technisch sind die vollwertige Shapes

Namenskonventionen in Visio

Visio benennt alle Shapes in der Zeichnung standardmäßig mit einer Kennung, die fortlaufend automatisch hochgezählt wird. Die Seite selbst ist ebenfalls ein Shape und besitzt immer die Kennung (Sheet.0) oder aber alternativ DasBlatt (ThePage). Insofern ist das Blatt nichts anderes als eine Gruppe, nämlich ein Shape, welches selbst wieder untergeordnete Shapes enthält.
Sie können den Namen eines Shapes - nicht jedoch seine Kennung - ändern, indem Sie den Menü-befehl "Format | Objektdaten" (bzw. im Englischen "Format | Special") wählen. Viele Shapes wurden allerdings mit bereits vordefiniertem Namen in der jeweiligen Schablone abgelegt (Shapes liegen nicht als separate Dateien vor, sondern werden in Schablonen-Dateien mit der Erweiterung .VSS zusammengefasst).

In der gesamten ShapeSheet-Programmierung können Sie das Shape entweder über den eindeutigen Namen oder über die Shape-Kennung ansprechen (zu sehen im selben Dialog im darüber liegenden Feld). Da die Eindeutigkeit des Namens in Visio immer gegeben sein muss, wird Visio den Namen im Falle eines Namenskonflikts um einen Index erweitern (aus "Rechteck" würde dann "Reckteck.1"). Das ist für die Programmierung außerordentlich hinderlich, da man nie genau den Namen vorhersagen kann. Daher ist das Ansprechen des Shapes über die Kennung der sicherere Weg und immer zu empfehlen.

Einführung in das ShapeSheet

Das ShapeSheet ist in einzelne Abschnitte unterteilt, deren Reihenfolge immer gleich und unveränderlich ist. Aus Gründen der Übersichtlichkeit lassen sich einzelne Sektionen ausblenden. Benutzerdefinierte Eigenschaften sind nur vorhanden, wenn diese explizit in das ShapeSheet eingefügt werden, was über das Kontextmenü des ShapeSheets möglich ist

In jedem Abschnitt des ShapeSheets sind andere, auf das jeweilige Shape bezogene Funktionen und Funktionalitäten abgelegt, wobei die Zelle die kleinste Informationseinheit ist. Den Inhalt der Zelle bezeichnet man in Visio als Formel

Die eigentliche Shape- Programmierung besteht nun darin, die in den Zellen der einzelnen Abschnitte enthaltenen vorgegebenen Formeln derartig zu verändern, durch andere zu ersetzen bzw. mit Funktionen zu belegen, dass das Shape sein normales, voreingestelltes Standardverhalten - welches mit dem eines Clipparts identisch wäre - ändert.

In Visio steht zur ShapeSheet-Programmierung Funktionen zur Verfügung, mit denen Zellbezüge und daraus resultierende Wertänderungen in anderen Zellen realisiert werden können. Die unten stehende Formel, eingetragen in die Zelle FüllVGrund des Abschnitts Füllbereichsformat bewirkt bei Veränderung der Breite des Shapes und eine Änderung von dessen Füllfarbe.

If(Breite < 5 cm ; 2 ; 1)

Sektionen im ShapeSheet

Eine vollständige Liste aller Sektionen des ShapeSheets finden Sie in der Visio-Online-Hilfe. An dieser Stelle nur einige Beispiele für wichtige Sektionen:
Shape Transformation:
Alle Informationen, welche die Größe des Shapes und dessen Position auf dem Zeichenblatt bzw. dem übergeordneten Shape beinhalten. So kann ein Shape durch das Eintragen anderer Werte in die Zellen DrehbezX (PinX) und DrehbezY (PinY) verschoben werden; in der Zelle Winkel (Angle) befindet sich der Drehwinkel des Shapes.
Geometrie:
Ähnlich wie "Malen nach Zahlen" stellt dieser Abschnitt eine Art Zeichenanleitung für alle Linien bzw. Kreise oder Ellipsen dar, aus denen das Shape gezeichnet wird. Die erste Zeile ist der Startpunkt der Shape-Geometrie. Jede folgende Zeile enthält wieder eine Koordinatenangabe, wohin gezeichnet werden soll. Wo die Information WAS gezeichnet werden soll, ist im Zeilentyp abgelegt (neben LinieBis z.B. auch Bogen, ElliptischerBogen etc.). Falls für die Berechnung nötig, werden in den weiteren Zellen noch Zusatzparameter abgelegt.
Schutz:
Sollen bestimmte Aktionen am oder mit dem Shape nicht möglich sein, so kann dies verhindert werden, indem die entsprechende Zelle im Schutz-Abschnitt auf ungleich "0" gesetzt wird. Das Shape wird daraufhin derartige Aktionen verweigern.
Füllformat:
Alle Informationen, die das Füllen des Shapes betreffen (z.B. Vorder- bzw. Hintergrundfarbe, Muster etc.).

Wertangaben und Koordinatensysteme im ShapeSheet

Bei der Arbeit mit Visio werden zwei verschiedene Koordinatensysteme verwendet: lokale Shape-Koordinaten (local) und übergeordnete (parent) Koordinaten.
Verschiedene Zellen im ShapeSheet enthalten ihre Formeln in übergeordneten Koordinaten (meist Zahlenkonstanten), wohingegen andere ihre Werte in lokalen Shape-Koordinaten (meist eine Formel bezogen auf Höhe und Breite des Shapes) enthalten. Bei einfachen Shapes ist das übergeordnete Koordinatensystem direkt das des Zeichenblattes, bei Gruppen ist es das Koordinatensystem der Gruppe. Bei der Liste der ShapeSheet-Abschnitte wird daher immer nur von übergeordneten Koordinaten, nicht von Blattkoordinaten gesprochen.

Zellwerte in Visio

Die Formeln in ShapeSheet-Zellen können unterschiedliche Datentypen enthalten. Visio kennt drei Datentypen: Text, Zahlen und logische Werte.
Text: jeder beliebige Text (auch Maßangaben gehören dazu).
Zahlen: jede Zahl im ShapeSheet wird in Visio als Fließkommazahl gespeichert.
Logisch: Visio kennt keine richtige Unterscheidung zwischen logisch "wahr" und "falsch". Stattdessen wertet Visio Zellen mit logischen Inhalten wie eine Zahl aus. Ist der Wert der Formel gleich 0, so wertet Visio das als logisch falsch, jeden anderen Wert wertet Visio als wahr aus.
Eine Zelle wird in einem ShapeSheet von Visio immer mit Ihrem Namen angesprochen. Dabei kann man auch Shape-übergreifend Referenzieren, man stellt dem Zellnamen einfach den Shapenamen, gefolgt von einem Ausrufezeichen voran. Die Syntax für die vollständige Referenzierung einer Zelle ähnelt somit der Formel in einem Kalkulationsprogramm wie Excel. Die Zelle mit dem zweiten X-Wert der ersten Geometriesektion eines Shapes "Rechteck" kann folgendermaßen referenziert wer-den:

Rechteck!Geometrie1.X2 (alternativ Tab.#!Geometrie1.X2)

An dieser Stelle noch ein wichtiger Hinweis an alle europäischen Benutzer: Nachdem Visio in den Vereinigten Staaten entwickelt wurde, werden bei Längenangaben alle Zahlen ohne Angabe einer Einheit als "interne Einheiten", das heißt als Inch gerechnet! Die Angabe von "1" in der Zelle Breite ist also etwas anderes als die Eingabe von "1 cm"! Visio ergänzt in einigen Zellen die Maßeinheit automatisch (z.B. der Zelle Breite) in vielen anderen aber nicht. Daher ist es immer sicherer, die Maßeinheit explizit mit einzugeben.

Schutz von Formeln im ShapeSheet

Eine Formel im ShapeSheet wird durch Benutzeraktionen oft überschrieben. So ändert sich der Inhalt der Zelle Winkel (Angle) beispielsweise jedes Mal, wenn der Benutzer mit dem Drehwerkzeug von Visio das Shape um einen bestimmten Betrag dreht. Soll unterbunden bzw. verhindert werden, dass bestimmte Formeln überschrieben werden, so kann man die Zelleninhalte schützen. Dazu wird die Formel in die Funktion GUARD() eingebettet, aus 45 deg wird dann der Ausdruck Guard(45 deg). Somit kann das Shape nicht mehr gedreht werden. Übrigens kann man in das ShapeSheet sowohl die deutschen Funktionsnamen als auch englische Funktionsnamen eintragen. Das ShapeSheet übersetzt dies automatisch in die jeweilige Sprache der verwendeten Visio-Version.
Dies ist ein gutes Beispiel dafür, dass auch bei der ShapeSheet-Programmierung ein gewisses Maß an Planung notwendig ist. Die gleiche Funktionalität lässt sich auch einfacher durch das Eintragen von logisch wahr (ungleich 0) in die Zelle SperrDrehen (LockRotation) in der Sektion Schutz (Protection) erreichen. Dies hat außerdem den Vorteil, dass der Benutzer über die Benutzeroberfläche auf die gesperrte Funktionalität hingewiesen wird - es erscheinen kleine Schlösser bzw. die entsprechenden Anfasspunkte werden grau dargestellt.

Ereignisse

Auch Shapes lösen Ereignisse aus. Beispielsweise löst das Ablegen eines Shapes auf einer Zeichnungsseite das Ereignis Ablegen (drop) aus. Im Abschnitt Ereignisse (events) finden sich alle vom ShapeSheet unterstützten Ereignisse:

    • DerText (TheText) - wird beim Ändern des Textes des Shapes ausgelöst

    • DieDaten (TheData) - derzeit noch reserviert für spätere Erweiterungen

    • EreignisDoppelklick (EventDblClick) - wird beim Doppelklick auf das Shape ausgelöst

    • EreignisAblegen (EventDrop) - wird beim Ablegen auf der Seite ausgelöst, also dann, wenn Sie das Shape aus der Schablone ziehen ODER eine Kopie des Shapes erstellen

    • EreignisXFMod (EventXFMod) - wird bei Änderungen im Abschnitt Shape Transformation (XF als Abkürzung für "transform") ausgelöst

Als letztes Beispiel soll ein Shape erstellt werden, dass sich beim Bewegen oder Ablegen immer mit seinem Mittelpunkt (den beiden Zellen DrehbezX (PinX) und DrehbezY (PinY) an ganzen Zentimetern ausrichtet. Dazu benutzen wir die Zelle des Ereignisses EreignisXFMod und erstellen darin eine Formel mit folgender Funktionalität: Sowohl der Inhalt der Zelle DrehbezX (PinX) als auch die Zelle DrehbezY (PinY) soll auf ganze Zentimeter gerundet und dort wieder eingetragen werden.
Dazu wird eine Funktion benötigt, mit deren Hilfe man eine Formel in eine andere Zelle eintragen kann. Diese Funktion lautet SETZEF (SetF) und hat die Syntax SETZEF(,). Um einen Wert in mehr als eine Zelle einzutragen, lassen sich mehrere SETZEF-Anweisungen kombinieren (Das Ergebnis, das letztlich in der Zelle EreignisXFMod steht, interessiert uns hier nicht weiter).
Der Inhalt der Zelle EreignisXFMod (EventXFMod) sieht also folgendermaßen aus:
SETF("PinX";INT(PinX*2,54+0,5)/2,54) & SETF("PinY";INT(PinY*2,54+0,5)/2,54)
Die Multiplikation mit 2,54 rechnet Inch in Zentimeter um, die Addition von 0,5 und die Berechnung des Integer-Wertes sorgen für die Rundung. Anschließend werden mit der Division durch 2,54 aus Zentimetern wieder Inch.

Unsere Seminare und Schulungen befähigen Sie innerhalb von weniger Tage zu effizientem Einsatz von Visio-Software. Haben Sie fortgeschrittene Ansprüche an Ihren Lehrgang, besonderen Beratungsbedarf, didaktische- oder Terminwünsche, so helfen wir Ihnen gerne im Rahmen eines individuell vereinbarten Microsoft Visio Training, oder eines Visio Workshops in unserem Hause.

Für Visio Inhouse-Kurse haben wir folgendes Kostenmodell entwickelt: