Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 03 окт 2022, 21:36

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Автоматический подбор размера страницы-Visio 2003/2007/2010
СообщениеДобавлено: 30 авг 2012, 13:26 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 22 авг 2012, 14:40
Сообщений: 126
Откуда: Беларусь, Гомель
Высота листа А3 равна в данном случае 280 мм = 11.0236220472441 дюймов.

На VBA:
Код:
Sub Test()
Dim se As Selection                 ' объект Selection
ActiveWindow.SelectAll              ' выделяем все на листе
Set se = ActiveWindow.Selection     ' присваиваем переменной
Dim sh As Shape                     
Set sh = se.Group
Dim ni As Double
Dim wi As Double
wi = sh.Cells("Height") + 1      ' определяем высоту группы всех шейпов в дюймах + 1 дюйм (на этот дюйм групповой шейп будет смещен от верха листа)
ni = Abs(Int(wi / -11.0236220472441)) * (11.0236220472441)  ' так замысловато вычисляется, высота листа кратная 280 мм на которой может полностью уместиться группа
ActivePage.PageSheet.Cells("PageHeight").Formula = ni ' присваиваем листу новую высоту
ActivePage.PageSheet.Cells("YRulerOrigin").Formula = 0 ' присваиваем листу новую точку начала линейки
ActivePage.PageSheet.Cells("YgridOrigin").Formula = 0 ' присваиваем листу новую точку начала сетки
sh.Cells("Piny").Formula = ni - 1                      ' размещаем группу на 1 дюйм ниже верхнего края листа
sh.Cells("LocPinY").Formula = """=Height*1"""
sh.Ungroup                                              ' разгруппируем наш шейп
End Sub


В объектной модели Visio на C#:
Код:
        public void PageResize()
        {
            VisioCellEditor.VisioApplication.ActiveWindow.SelectAll();
            Selection selection = VisioCellEditor.VisioApplication.ActiveWindow.Selection;
            Shape shape = selection.Group();

            double heightShapeGroup = shape.CellsSRC[(short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowXFormOut,
                (short)VisCellIndices.visXFormHeight].Result[VisUnitCodes.visNoCast];

            double newHeightPage = Math.Ceiling(heightShapeGroup / 11.02362204724409) * 11.02362204724409;

            VisioCellEditor.VisioApplication.ActivePage.PageSheet.Cells["PageHeight"].FormulaU = newHeightPage.ToString();

            shape.Cells["PinY"].FormulaU = (newHeightPage).ToString();
            shape.Cells["LocPinY"].FormulaU = "Height";

            shape.Ungroup();
        }


Решил, что необходимо это в отдельную тему. Я думаю, что это может еще пригодится кому-то.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB