Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д.

Защита

Перечень литературы

01.01.1900  Почти конфиденциально в Visio 2003  Ничков А.В..   

Ответы на вопросы

Как запаролить документ?

Хочу запаролить файл Visio, чтобы он открывался только для чтения (просмотра). Как? 

Защита в Visio осуществляется в 2 этапа: сначала защищаются нужные элементы (в том числе и все), затем включается защита на рисунок.
Например, вам нужно запретить все, что только можно, то делается это так.
1. На листе рисунка нажимаете Ctrl-A (или Edit/Select All), потом в меню Format/Protection нажимаете кнопку All и OK. При этом шейпы защищаются от всевозможных действий с ними. Но эту защиту еще всегда можно снять.
2. Открываете Drawing Explorer (меню View/Drawing Explorer Window). В окошке показывается структура вашего документа. Щелкаете правой кнопкой по верхнему уровню (... .vsd) и выбираете из меню Protect Document. Опять же ставите галочки во всех окошках, вводите пароль (не забудьте записать или запомнить) и жмете OK.
Теперь ваш рисунок стал неуправляемым - можно только смотреть на него, но ничего не изменишь. Спокойно сохраняйте его в файл и отдавайте кому хотите.
Чтобы вернуть рисунок в прежнее состояние, нужно опять вызвать Drawing Explorer, нажать на Unprotect Document и ввести пароль.
Естественно, возможна частичная защита (если вы установите не все галочки, а только нужные). Механизм очень гибкий - то есть защищается не просто файл, а нужные свойства нужных объектов.
P.S. Это было сказано для Visio 2002. Для других версий пункты меню могут отличаться, но принцип тот же. 

Как можно защитить фон от изменений?

Cобственно, 2 вопроса:
1) Имя Фона как и любой страницы документа Визио отражается на нижней вкладке. Поэтому любой user может перейти и посмотреть фон. В связи с этим, можно ли как-то скрыть эту вкладку?
2) С др стороны открывать документ только для чтения - слишком сильно.
Можно ли оставить доступ на редактирование всем страницам кроме фона? 

Если бы говорили об слоях (Layer) - там все понятно - каждому слою индивидуально назначен доступ на редактирование. А здесь?
Можно, конечно, искусственно создать на фоновой странице слой, перегнать туда все шейпы фона и блокировать/разблокировать этот слой. Нельзя ли проще?
Проще вроде получается, если на вкладке Protect Document установить галочку Backgrounds. Эта галочка "Prevents users from deleting or editing background pages" - то есть как раз то, что Вам нужно. Причем и ярлычок от страницы фона перестает отображаться (правда, кажется не сразу после применения защиты, а только после перезагрузки документа). 

Как запретить вытаскивание объекта из группы?

В Visio 2002, несмотря на то, что элементы сгруппированы, из группы можно спокойно мышкой вытащить объект. Его контрольные точки при этом в виде зеленого квадрата с крестиком. Как это убрать? 

Выполнить одно из следующих действий в Visio 2002 (хотя то же самое может работать и в Visio 5):
1) Выбрать группу и в меню выбрать Format>Behavior и в разделе Group properties выбрать Selction: Group Only
2) Выбрать группу и в меню ShapeSheet группы в разделе Group properties в ячейке Select Mode выставить "0". 

Защита фона в VSD

Как можно защитить фон от изменений?
Cобственно 2 вопроса:
1) Имя Фона как и дюбой страницы документа Визио отражается на нижней вкладке. Поэтому любой user может перейти и посмотреть фон. В связи с этим, можно ли как-то скрыть эту вкладку?
2) С другой стороны открывать документ только для чтения - слишком сильно.
Можно ли оставить доступ на редактирование всем страницам кроме фона? 

Можно. На вкладке Protect Document установить галочку Backgrounds. Эта галочка "Prevents users from deleting or editing background pages" - то есть как раз то, что Вам нужно. Причем и ярлычок от страницы фона перестает отображаться (правда, кажется не сразу после применения защиты, а только после перезагрузки документа). 

Visio Drawing Control

Как сделать так, чтобы пользователь моего приложения не мог редактировать рисунок во встроенном Microsoft Visio Drawing Control'е?
Использовать Visio Viewer ActiveX не могу - не хватает функциональности... 

По умолчанию документ вроде и так открывается в виде, мало пригодном для редактирования. Порисовать на нем уже не удастся из-за отсутствия инструментов. Чтобы меньше было попыток, можно проследить, что было установлено: 

NegotiateMenus = False
NegotiateToolbars = False 

Потом - редактирование не сказывается на исходном файле. Чтобы сохранить результаты нужно произвести специальные действия, причем программные. То есть испортить файл директор точно не сможет.
По поводу трафаретов
Документ открывается в том виде, в котором был сохранен. Сделайте копию рисунка, позакрывайте в ней перед записью все трафареты. Тогда и в Drawing Control такой документ откроется без трафаретов.
Можно отключить всю лишнюю разметку и линейки: 

vsoWindow.ShowGrid = False
vsoWindow.ShowRulers = False
vsoWindow.ShowScrollBars = False 

Чтобы заблокировать перетаскивание, изменение размеров и т.д., можно в исходном файле сделать Select All и установить защиту всего. Полная защита, конечно, не достигается. Останется еще возможность подергать за управляющие точки и пошевелить коннекторы. Но до этого еще додуматься надо... :)
Наконец, если отключить табы: 

vsoWindow.ShowPageTabs = False 

и перелистывать страницы самому, то можно все страницы документа назначить фоновыми, а просматривать их через одну пустую страницу. Связи переключать программно из своего приложения. Тут уж народ совсем ничего изменить не сможет.
Есть еще варианты: сохранить рисунок в виде картинок и показывать картинки или сохранить в HTML (это практически то же самое)...
Наверное и еще что-то можно сделать, это только первое, что в голову пришло... :) 

Плюс дополню - как открывать в контроле документ без окна трафаретов (только страницу)? Пытаюсь создать визуализированную модель предприятия, чтоб директор сидел, пробел нажимал, а на диаграмме Визио стрелочки с блоками моргали. 

Me.Control.Object.Window.Windows.ItemEx("Shapes").Close