You can resize the font of the text block using automation if the text exceeds the size of the shape. I found that the following works.
Open the shape's shapesheet (Window->Show Shapesheet) and add the user section (Insert->Section->User-defined Cells). Put this formula in the value cell for User.Row_1:
=Min(1,Height/TEXTHEIGHT(TheText,Width)))
After the shape text changes, get the value of the user cell. in c#:
double scale = shape.get_CellsSRC((short)IVisio.VisSectionIndices.visSectionUser, (short)IVisio.VisRowIndices.visRowUser, (short)IVisio.VisCellIndices.visUserValue).ResultIU;
Then set the font, and the TextMargins (for any that are non-zero) with the following (assuming the normal font size is 12 and the left margin is 4pt.:
shape.get_CellsSRC((short)IVisio.VisSectionIndices.visSectionCharacter, 0, (short)IVisio.VisCellIndices.visCharacterSize).FormulaU = (scale*12).ToString() + "pt";
shape.get_CellsSRC((short)IVisio.VisSectionIndices.visSectionObject, (short)IVisio.VisRowIndices.visRowText, (short)IVisio.VisCellIndices.visTxtBlkLeftMargin).FormulaU = (scale * 4).ToString() + "pt";
Yeah, my shapes can't be resized the way they're used, so the text has to just fit into the shape as it exists. Maybe that link will show me how to do it the other way...Thanks – Jon Fournier – 2009-12-09T17:20:36.417