VC++ Shapes sichtbar / unsichtbar. Visio 2003 - 2007

16/02/2009 - 18:14 von kippi | Report spam
Hallo *,

ich möchte mehrere hundert Shapes in einer Zeichnung unsichtbar
schalten und nach Abschluss bestimmter Operationen wieder sichtbar.
Z.Z. mache ich es mit Größenverànderung (Größe auf NULL setzen ->
unsichtbar und wieder zurück auf die Originalgröße -> sichtbar:

for (int nShape = 1; nShape <= nShapesCount; nShape++) {
if (IsShapeInGroup(i, nShape, pCon) == false) { // Shape
unsichtbar schalten
VShape.AttachDispatch(VShapes.GetItem(COleVariant((short)
(nShape))));
// Geometrie auf Null setzen -> Hoehe und Breite auf 0 setzen
VCell.AttachDispatch(VShape.GetCellsSRC(VISSECTIONOBJECT,
VISROWXFORMOUT, VISXFORMWIDTH));
VCell.SetFormula("0 mm");
VCell.AttachDispatch(VShape.GetCellsSRC(VISSECTIONOBJECT,
VISROWXFORMOUT, VISXFORMHEIGTH));
VCell.SetFormula("0 mm");
}
}

Ich steuere Visio über die COM-Schnittstelle als OUTPROC-Server. Der
Vorgang dauert sehr lange.

Frage: Gibt es eine Möglichkeit alle Shapes einer Zeichnung auf einen
Schlag unsichtbar und anschliessend einzelne Shapes sichtbar zu
schalten?

Danke für jeden Tipp!
Kippi
 

Lesen sie die antworten

#1 Wolfgang Welscher
17/02/2009 - 07:48 | Warnen spam
Hallo,

am besten berücksichtigt man dieses Verhalten schon beim Design der Shapes
durch einen Zellbezug auf die Seite oder das Dokument. Dann kann man durch
Umschalten einer einzigen Zelle alle Shapes auf der Seite unsichtbar machen.
Man kann auch Layer verwenden um Shapes unsichtbar zu machen

Für die Programmierung dieser Funktion nutzt man am besten die Funktionen
SetFormulas oder SetResults
Diese Funktionen sind erheblich schneller, aber auch schwerer zu
programmieren.

Kleine Anmerkung:
Höhe und Breite auf 0 zu setzen, muss nicht bei jedem Shape funktionieren.

Gruß
Wolfgang
Wolfgang Welscher
MCTS Microsoft Office Visio, Application Development
www.x-visual.net

"kippi" schrieb im Newsbeitrag
news:
Hallo *,

ich möchte mehrere hundert Shapes in einer Zeichnung unsichtbar
schalten und nach Abschluss bestimmter Operationen wieder sichtbar.
Z.Z. mache ich es mit Größenverànderung (Größe auf NULL setzen ->
unsichtbar und wieder zurück auf die Originalgröße -> sichtbar:

for (int nShape = 1; nShape <= nShapesCount; nShape++) {
if (IsShapeInGroup(i, nShape, pCon) == false) { // Shape
unsichtbar schalten
VShape.AttachDispatch(VShapes.GetItem(COleVariant((short)
(nShape))));
// Geometrie auf Null setzen -> Hoehe und Breite auf 0 setzen
VCell.AttachDispatch(VShape.GetCellsSRC(VISSECTIONOBJECT,
VISROWXFORMOUT, VISXFORMWIDTH));
VCell.SetFormula("0 mm");
VCell.AttachDispatch(VShape.GetCellsSRC(VISSECTIONOBJECT,
VISROWXFORMOUT, VISXFORMHEIGTH));
VCell.SetFormula("0 mm");
}
}

Ich steuere Visio über die COM-Schnittstelle als OUTPROC-Server. Der
Vorgang dauert sehr lange.

Frage: Gibt es eine Möglichkeit alle Shapes einer Zeichnung auf einen
Schlag unsichtbar und anschliessend einzelne Shapes sichtbar zu
schalten?

Danke für jeden Tipp!
Kippi

Ähnliche fragen