ich diese als gut repro konnte aber es gibt einige Details dazu, die BoundingBox vorschlagen() in visio16 fein arbeitet,
Shape.BoundingBox() nimmt Flagge als erster Parameter, der wie hier erwähnt "((kurz) Visio.VisBoundingBoxArgs.visBBoxUprightText" ist und der verwendet wird, um die Begrenzungsbox des Rechtecks zu erhalten, das der Text umschließt. Hier ist der Haken, die Shape.BoundingBox() -Methode prüft auf die Form .type(), die in diesem Fall als Rechteck zurückgegeben wird und das Flag sagt, um die Bounding Box für das t zu erhalten ext, was zu einem Fehlerfall und damit zu einer beobachteten Ausgabe führt.
obige Aussage kann mit der hier gegebenen Informationen bestätigt werden, https://msdn.microsoft.com/en-us/library/office/ff766755.aspx
„Wenn die BoundingBox Methode einen Fehler zurückgibt, oder wenn er gefragt wird, das Rechteck umschließt Null Formen zurückzukehren, das Rechteck zurückgegeben wird, ist {left: 0, unten: 0, rechts: -1, oben: -1}, andernfalls ist das zurückgegebene Rechteck kleiner oder gleich (< =) rechts und unten kleiner oder gleich (< =) oben zurückgegeben werden in internen Einheiten (Zoll). "
Auch um zu überprüfen, dass BoundingBox() den richtigen Wert zurückgibt, können wir versuchen, das Flag "visBBoxUpreightWH" zu verwenden, das den genauen Begrenzungsrahmen für das Rechteck angibt, nach dem wir den Begrenzungsrahmen abfragen. (Code unten)
private void button1_Click(object sender, RibbonControlEventArgs e)
{
Visio::Application application = Globals.ThisAddIn.Application;
Visio::Page page = application.ActivePage;
Visio::Document basicStencil = application.Documents.OpenEx("basic_u.vssx", (short)(Visio.VisOpenSaveArgs.visOpenRO | Visio.VisOpenSaveArgs.visOpenHidden));
var master = basicStencil.Masters.ItemU["Rectangle"];
double pinX = 5.5;
double pinY = 5.5;
double height = 2.0;
double width = 2.0;
Visio::Shape shape = page.Drop(master, pinX, pinY);
String text = "I am here";
shape.Text = text;
Visio.Cell cell = shape.get_CellsU("Height");
cell.ResultIUForce = height;
cell = shape.get_CellsU("Width");
cell.ResultIUForce = width;
double Left = 0.0;
double Right = 0.0;
double Bottom = 0.0;
double Top = 0.0;
shape.BoundingBox((short)Visio.VisBoundingBoxArgs.visBBoxDrawingCoords, out Left, out Bottom, out Right, out Top);
Console.WriteLine(Left); //4.5
Console.WriteLine(Right); //6.5
Console.WriteLine(Bottom); //6.5
Console.WriteLine(Top); //4.5
}
visio intern erhält zuerst das temporäre Rechteck des Textes innerhalb des tatsächlichen Rechtecks und ruft dann das Begrenzungsrechteck-Verfahren auf dieser Form Temp Rechtecks, wenn das Flag „visBBoxUprightText“ verwendet, während für die BoundingBox abfragt() was letztendlich ohne Fehler funktioniert.
Hallo, ich bestätige, dass ich den gleichen Unterschied zwischen 2013 und 2016 sehe und es mit dem Visio-Team erhöht habe. – JohnGoldsmith
@JohnGoldsmith - haben Sie Neuigkeiten vom Visio-Team erfahren? Glauben Sie, dass wir eine Lösung für das Problem in einem eingehenden Office 2016 SP erwarten können? – Sal
Hallo, nur um zu aktualisieren, dass die Lösung dafür scheint, auf dem Weg zu sein: https://support.microsoft.com/en-gb/help/3203473/july-5-2017-update-for-visio- 2016-kb3203473 – JohnGoldsmith