В конфигурации Terrasoft CRM 3.x можно использовать мощный инструмент Microsoft Visio.
Для этого необходимо:
1. Проверить, что у Вас установлен Visio :)
1. Добавить в окно ActiveXControl
2. В инспекторе объектов свойству ActiveXProgID присвоить 'VisOcx.DrawingControl'
Все свойства, методы и события объектов Visio Вы можете увидеть, воспользовавшись утилитой OleView.Exe.
На события Visio можно подписаться используя стандартный механизм:
Пример:
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. В скрипте используется конструкция 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.