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

Защита

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

18.03.2021  Upgrade signed Office VBA macro projects to V3 signature   Yu Kaijun    

  Почти конфиденциально в 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