В конфигурации 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 конструкция начинает глючить.
Вот функции, которые работают более стабильно:
[javascript]
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;
}
[/javascript]
2. Если нужно для работы использовать уже говый шаблон - у DrawingControl есть свойство Scr - путь к файлу шаблона.
Единственно, что не удобно(или может кому-то будет так удобнее) - появляются стандартные окна Visio, такие как окна добавления новых элементов. В моем случае они не были нужны. Скрыть их можно так:
[javascript]
function HideAllWindows(ActiveXObject) {
var Windows = GetWindows(ActiveXObject);
for (var i = 1; i <= Windows.Count; i++) {
Windows.Item(i).Visible = false;
}
}
[/javascript]
К сожалению, это дает иногда плохой визуальный эффект - иногда появляется пустое окно "Shapes", но другого способа я не нашел.
Non noceo.