Mastershapes in einer Schablone

Sehr geehrter Herr Dr. René Martin,
[…] Ziel ist es die Visio Diagramme mit unserem SAP System zu verbinden.
Dazu müssen jedem Shape entsprechende Shape-Daten mitgeben werden.
Dabei haben mir Ihre Bücher
(Microsoft Visio 2010 Programmierung Microsoft Visio effizient anpassen und erweitern) und
(Visio 2013/2016 anpassen Das Handbuch für Entwickler),
wie auch Ihr Video-Training
(Visio 2010 Umfassend praxisorientiert, leicht verständlich) schon erheblich geholfen.
Da es das Ziel der Automatisierung ist dem Benutzer die Erstellung der Diagramme möglichst einfach zu machen,
soll er auch beim Anlegen neuer Shapes bestmöglich unterstützt werden.
Jetzt bin ich jedoch auf ein Problem gestoßen an welchem ich nicht weiter komme.
Ich benötige eine Möglichkeit einem neuerzeugten Shape die benötigten Shape-Daten mitzugeben, wenn es zu einer Schablone hinzugefügt und somit zum Mastershape wird.
Es gibt jedoch kein Event, welches auf dieses Ereignis anspricht.
Haben Sie vielleicht eine Idee wie sich dies umsetzen lässt?
 
Im Voraus schon mal vielen Dank für Ihre Hilfe
 
Mit freundlichen Grüßen
Hallo Herr B.,
 
ich verstehe den Workflow nicht ganz: der Anwender soll neue Shapes erstellen. Beim Abspeichern in einer Schablone sollen (automatisiert) Daten an diese Shapes angefügt werden.
* Warum erstellt der Anwender nicht selbst diese Daten?
* Oder: wenn es sich um immer die gleichen Daten handelt (und auch viele Daten) dann würde ich es nicht über ein Ereignis lösen, sondern über eine Schaltfläche, die der Anwender anklickt: entweder dem markierten Shape werden neue Daten hinzugefügt oder: alle Mastershapes einer Schablone werden mit diesen Daten versehen.
 
Der Grund: meines Wissens gibt es kein Ereignis: „ziehe ein Shape vom Zeichenblatt in die Schablone“. Und: nach meiner Erfahrung werden Shapes in die Schablone gezogen; dort manchmal bearbeitet. Manchmal werden sie auch wieder auf das Zeichenblatt gezogen, bearbeitet und wieder zurück in die Schablone gezogen; manchmal auch in der Schablone direkt bearbeitet (auf dem Zeichenblatt geht das manchmal besser).
 
Hilft Ihnen diese Antwort?

Dynamische Schaltflächen auf einem Zeichenblatt

Amüsant. Wenn man in Visio eine Befehlsschaltfläche auf ein Zeichenblatt legt, liegt das nächste Shape ÜBER der Befehlsschaltfläche. Schaltet man jedoch den Entwurfsmodus aus, liegt das Shape dahinter. Es gibt keine Möglichkeit, das Shape vor die Befehlsschaltfläche zu legen.
Auch die Zellen „NoShow“ oder „Transparency“ bewirken nicht, dass die Schaltfläche ausgeblendet wird. Man könnte sie per Programmierung auf Width = 0 und Height = 0 (vielleicht noch PinX und PinY auf 0) setzen – dann ist die Schaltfläche fast verschwunden. Natürlich kann man sie auch programmieren:
Dim shp As Shape
 
Dim DiagramServices As Integer
DiagramServices = ActiveDocument.DiagramServicesEnabled
ActiveDocument.DiagramServicesEnabled = visServiceVersion140 + visServiceVersion150
 
Set shp = Application.ActiveWindow.Page.InsertObject(„forms.Commandbutton.1“, visInsertAsControl + visInsertNoDesignModeTransition)
shp.Cells(„PinX“).FormulaU = „=100mm“
shp.Cells(„PinY“).FormulaU = „=150mm“
shp.Name = „Testbutton“
 
 
‚Restore diagram services
ActiveDocument.DiagramServicesEnabled = DiagramServices
 
Jedoch – es bleibt mühsam dynamische Schaltfläche auf dem Zeichenblatt zu erzeugen.

Die API-Hölle

Ich versuche API-Funktionen zu vermeiden. Das Problem sind die 32- und 64-Bit-Systeme.

Logo bauen

Im letzten Urlaub – in Georgien – habe ich ein Logo gesehen und mich gefragt in wie vielen Schritten ich es in Visio nachbauen kann.


Erster Schritt: ich benötige drei Kreise.


Zweiter Schritt: die linken beiden Kreise werden kombiniert (Registerkarte „Entwicklertools“


Dritter Schritt: das linke Shape wird mit dem rechten Kreis kombiniert.


Vierter Schritt: Um zu sehen, ob das Ergebnis korrekt ist, wird es eingefärbt. Und ein farbiges Rechteck dahinter gelegt.
Fünfter Schritt: Ein Rechteck an den Rand einzufügen ist dann nicht mehr schwierig.

Text ein- und ausblenden

Im Abschnitt »Miscellaneous« befindet sich die Zelle HideText. Wie der Name sagt, kann darüber der Text ausgeblendet werden. Normalerweise ist der Wert dieser Zelle FALSE. Sollte man nun beispielsweise über eine Aktionszelle darauf zugreifen, so könnte man mit

=SETF(„HideText“,TRUE)

Den Text ausblenden. Oder besser:

=SETF(„HideText“,NOT(HideText))

So wird der Text abwechselnd ein- oder ausgeblendet. Dies kann im Kontextmenü, das heißt in der Zelle Menu angezeigt werden:

=IF(HideText,“Text einblenden“,“Text ausblenden“)

Ein Bug im ShapeSheet?

Sehr herstaunlich. Wenn man im ShapesSheet eines Shapes in Visio einen Abschnitt „Action“ einfügt und in die Zelle „Menu“ einen Text einträgt, wird dieser im Kontextmenü angezeigt. So weit so gut.
Früher (?) konnte man in der Zelle „TagName“ einen Kommentar eintragen, der dann in der Statuszeile angezeigt wurde. Jetzt (?) unter Windows 10 (?) in Visio 2016 (?) verschwindet dieser Kontextmenüeintrag. Ein Bug?

Dynamische Datenfelder

Letzte Woche wollte ein Teilnehmer in der Visio-Schulung wissen, wie man dynamische Daten erzeugen kann. Also: wenn in den Daten eines Shapes eine Information ausgewählt wird, sollen weitere Informationen sichtbar sein. Bei der Wahl eines anderen Eintrags sollen wiederum andere Infos ausfüllbar sein.
Nun: Die Daten kann man leicht in Visio über „Daten / Daten definieren“ erzeugen.
Dann muss das ShapeSheet herhalten: Dort wird in der Zelle eine Formel eingetragen. Es funktioniert nicht:
=Prop.Geldfluss=“Ausgaben“
oder mit einer WENN-Verzweigung:
=If(Prop.Geldfluss=“Ausgaben“,True,False)
Man muss die Funktion STRSAME bemühen:
=STRSAME(Prop.Geldfluss,“Ausgaben“)
Sie vergleicht zwei Texte und liefert True oder False.
Und damit hat man die dynamischen Daten:

Wir bauen uns einen Schrank – eigene Shapes mit Visio estellen

Genauer: Die Aufgabe lautet: aus einer DWG-Zeichnung soll in Visio eine Zeichnung (ein Schrank) nachgebaut werden.

Die DWG-Zeichnung wird importiert.
Mit Entsetzen stelle ich fest, dass sie unbrauchbar ist – sie besteht aus sehr vielen einzelnen Linien.
Also neu zeichnen. Ich markiere die Linien, gruppiere sie und schütze sie.
Färbe die Linien ein, damit ich sie besser sehe. Danach male ich mit dem Rechteck-, Linien- und Ellipsenwerkzeug die Linien nach. Die Wiederholfunktion [F4] hilft dabei; ebenso Hilfslinien und das Fenster „Größe und Position“.
Die fertigen Shapes werden gruppiert, geschützt, mit Daten versehen, auf einen Layer gelegt und mit Verbindungspunkten versehen.
Damit die Punkte äquidistant sind, greife ich auf das ShapeSheet zu und ändere dort die Daten. Ebenso wird ein Modul gebaut, das – als Linie in den Verbindungspunkten einrastet.
Beides wird in einer Schablone gespeichert.
Was sich hier so leicht liest – dafür habe ich zirka drei Stunden benötigt. Ein bisschen Feinarbeit.

Zweig mit mehr als sechs Ästen

In der letzten Visio-Schulung beschwerte sich ein Teilnehmer über das Shape „Zweige schräg“. Dort könne man nur bis zu sechs Zweige herausziehen. Er benötigt allerdings acht Linien.
Kein Problem: Im ShapeSheet muss man nur zwei weitere Zeilen für die Controls (die gelben Steuerelemente) einfügen und die Formeln von oben nach unten kopieren.
Außerdem muss man zwei neue Abschnitte einfügen; den Zeilentyp auf MoveTo und LineTo ändern. Bei beiden Abschnitten wird jeweils eine neue Zeile eingefügt. Die Formeln können von Abschnitt Geometrie7 nach geometrie8 und Geometrie9 kopiert werden. Die Formeln müssen angepasst werden – so wird beispielsweise aus:
Width+ABS(Controls.Row_6.Y-Height/2)/Scratch.A1
die neue Formel:
Width+ABS(Controls.Row_7.Y-Height/2)/Scratch.A1
bzw.
Width+ABS(Controls.Row_8.Y-Height/2)/Scratch.A1
Ein Test – und fertig ist der neue Zweig. Er kann in einer Schablone gespeichert werden.

Schablonen / Ansicht

Bislang habe ich immer empfohlen bei Schablonen in Visio die Standardansicht (Symbole und Namen) zu lassen. Aber: wenn man die Beschriftungen geschickt wählt, kann auch die Ansicht „Nur Namen“ interessant sein.