Публикация

Использование Visio

В конфигурации Terrasoft CRM 3.x можно использовать мощный инструмент Microsoft Visio.

Для этого необходимо:
1. Проверить, что у Вас установлен Visio :)
1. Добавить в окно ActiveXControl
2. В инспекторе объектов свойству ActiveXProgID присвоить 'VisOcx.DrawingControl'

Все свойства, методы и события объектов Visio Вы можете увидеть, воспользовавшись утилитой OleView.Exe.

На события Visio можно подписаться используя стандартный механизм:
Пример:

var DrawingConrol

function SubscribeForEvent(EventName) {
        var EventsDispatcher = Self.EventsDispatcher;          
        EventsDispatcher.SubscribeForEvent('DrawingConrol', DrawingConrol,
                ActiveXControl.ActiveXGUID, EventName, EventName);                                                             
}

function SelectionChanged(Window) {
...
}

DrawingConrol = ActiveXControl.ActiveXObject;
SubscribeForEvent('SelectionChanged');

Полезные ссылки:
http://office.microsoft.com/ru-ru/visio/default.aspx
http://msdn.microsoft.com/ru-ru/magazine/cc163471.aspx

Нравится

Поделиться

1 комментарий

Спасибо, Женя, за пример.

Вот небольшие комментарии:

1. В скрипте используется конструкция DrawingConrol.Document.Application.ActivePage

Ее лучше не использовать - при многократном создании DrawingConrol конструкция начинает глючить.
Вот функции, которые работают более стабильно:

function GetActivePage(ActiveXObject) {
	return ActiveXObject.Window.Page;
}
 
function GetActiveDocument(ActiveXObject) {
	return ActiveXObject.Window.Document;
}
 
function GetActiveWindow(ActiveXObject) {
	return ActiveXObject.Window;
}
 
function GetWindows(ActiveXObject) {
	return ActiveXObject.Window.Windows;
}
 
function GetSelection(ActiveXObject) {
	return ActiveXObject.Window.Selection;
}

2. Если нужно для работы использовать уже говый шаблон - у DrawingControl есть свойство Scr - путь к файлу шаблона.

Единственно, что не удобно(или может кому-то будет так удобнее) - появляются стандартные окна Visio, такие как окна добавления новых элементов. В моем случае они не были нужны. Скрыть их можно так:

function HideAllWindows(ActiveXObject) {
	var Windows = GetWindows(ActiveXObject);
	for (var i = 1; i <= Windows.Count; i++) {
		Windows.Item(i).Visible = false;
	}
}

К сожалению, это дает иногда плохой визуальный эффект - иногда появляется пустое окно "Shapes", но другого способа я не нашел.

Non noceo.

Показать все комментарии