All Forums
 Категория Visio
 Форум Вопросы и ответы
 Объект реализующий интерфейс Master
Author Previous Topic Topic Next Topic  

Sviataslau

Belarus
10 Posts

Posted - 09/20/2006 :  18:09:51
Создал свой реализующий интерфейс Master
public class CMasterCtrl : Microsoft.Office.Interop.Visio.Master

Реализовал все методы и свойства, но при доюавлении его в страницу
mMaster = new CMasterCtrl();// Masters.get_ItemU("Process");
mDoc.Pages[1].Drop(mMaster,1.476378, 10.334646);

Наступает кирдык.
У кого нибудь опыт создания собственных шейпов есть ?

Sviataslau

Belarus
10 Posts

Posted - 09/20/2006 :  19:19:03
Да еще вопрос прикрепляюсь к свойствам
mVisioApp.Documents.ConnectionsAdded += new EDocuments_ConnectionsAddedEventHandler(mMaster.FunConnectionsAdded);
Но при добавлении конектора свойство не вызывается - что я не так делаю (может кто знает)
Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 09/20/2006 :  19:23:27
Пардон с конектором все работает
Go to Top of Page

brace

Russia
358 Posts

Posted - 09/21/2006 :  10:57:42

этот макрос рисует квадрат.

Public Sub DrawRectangle_Example()

Dim vsoShape As Visio.Shape

Set vsoShape = ActivePage.DrawRectangle(1, 4, 4, 1)

End Sub
Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 09/21/2006 :  10:59:45
Ну квадрат нарисовать это одно, а вотполностью создать собственный shape и его контролировать это "чуть-чуть другое"
Go to Top of Page

brace

Russia
358 Posts

Posted - 09/21/2006 :  11:58:09

создать шейп = нарисовать шейп !!! или что по Вашему ???
что значит контролировать шейп ???
перемещать, изменять размеры, копировать и тп.
эти простые вещи может делать любой юзер визио.
Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 09/25/2006 :  11:13:54
Вопрос не в том чтобы рисовать (это понятно как делать), а вопрос в том чтобы на програмном уровне расширить фукциональность стандартного Master для требуемой задачи, контролировать обект можно "изнутри" можно снаружи, изнутри переопределяя стандартные интерфейсы снаружи используя стандартные события. Необходимо контролировать изнутри - в связи счем был реализован интерфейс обеспечивающий (на первый взгляд) внедрение собственного Master а в документ, но не тут то было при его внедрении скорее всего чтото не учтено (знать бы что) приводящее к зависанию визио. Вот в этом собственно и есть интерес узнать бы что не реализовано.
Go to Top of Page

arturik

Russia
29 Posts

Posted - 09/25/2006 :  14:04:59  Visit arturik's Homepage
Попробуй по шагово описать чего ты хочешь добиться, а то как-то не понятно чего ты хочешь.

Visio 2003(SP2)
Go to Top of Page

mers

Russia
159 Posts

Posted - 10/02/2006 :  13:06:04
Да понятно вообщем все.
А что хоть пишет-то? Что Visio не нравится.

З.Ы. Если не жалко, киньте исходник реализации интерфейса на почту, очень любопытно, хотя мне интреснее было бы реализовать интерфейс Shape.
Go to Top of Page

mers

Russia
159 Posts

Posted - 10/04/2006 :  14:30:35
Ну в целом и общем ваша задача ясна.
Единственное не очень понял что значит компиляция с последущим устранением ошибок.

Я занимаюсь несколько другими вещами, однако проблемы похожие. Безусловно удобнее всего было бы наследовать класс шейп и добавить в него необходимые свойства/функции :).

По поводу объектной модели Visio и документации вообще могу посоветовать 2 вещи:
1. читать MSDN :) /MSDN Home > MSDN Library > Office Solutions Development > Visio 2003/ Тут есть очень многое. Посмотрить что вам будет полезно. SDK так же содержат много интересных вещей.
2. Конференции разработчиков Visio в группах Гугл http://groups.google.com/. Полезная вещь, позволяющая общаться напрямую с создателями Visio. Очень рекомендую.

Код получил на почту..так что в форуме можно стереть этот трактат :)
Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 10/04/2006 :  14:51:28
Спасибо. Я впринципе разобрался что к чему :) Используя события страницы, я имею необходимый уровень контроля над происходящим :)
Компиляция - процес проверки правильности связей и объектов обеспечивающих логику самого программирования :)
Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 10/05/2006 :  10:35:38
Интересная ситуация. Выполняю след код
Открываю документ и регистрирую события
mVisioApp = new ApplicationClass();
mVisioApp.Visible = true;
mDoc = mVisioApp.Documents.AddEx("D:/Project/Lun_New/Development/Program/C#/VisioPLC/VisioPLC/Visio/Базовый проект.vsd",VisMeasurementSystem.visMSDefault,0,0);

((Page)mVisioApp.ActiveWindow.Page).ShapeAdded += new EPage_ShapeAddedEventHandler (FunAddShape);
((Page)mVisioApp.ActiveWindow.Page).TextChanged += new EPage_TextChangedEventHandler (FunTextChanged);
((Page)mVisioApp.ActiveWindow.Page).BeforeShapeDelete += new EPage_BeforeShapeDeleteEventHandler (FunBeforeMasterDelete);
((Page)mVisioApp.ActiveWindow.Page).CellChanged += new EPage_CellChangedEventHandler (FunCellChanged);
((Page)mVisioApp.ActiveWindow.Page).ConnectionsAdded += new EPage_ConnectionsAddedEventHandler (FunConnectionsAdded);

Отрабатываю добавление нового шейпа

int a= 0;
a++;
if(iShape.NameU.IndexOf("Состояние")!=-1)
{
mBaseObject = new CBaseObject(iShape,EN_BASE_TYTPE.EN_BASE_TYTPE_STATE);
IAsyncResult fIResult = BeginInvoke(mdlFillObject,new object[]{mBaseObject});
}

Происходит потеря события, то есть повторное добавления шейпа не приводит к вызову события, это былобы понятно еслибы повторное выполнение открытия документа работало точно также, но при повторном открытии событие не сбрасывается. Есть идеи где собака могла порыться :) ?


Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 10/05/2006 :  10:49:45
Маленькое дополнение к такой ситуации приводит добавление строк в DataGrid

fList.Add("ID");fList.Add(mBaseObject.mID);
mObjectPropDataTable.Rows.Add(fList.ToArray());

Если этой строки нет все работает нормально. Правда есть еще загадка к такомуже положению дел приводит и следующий код

Document fObject = EnemList.EnumStrDocument(mVisioApp.Documents.GetEnumerator(),"//Project/Lun_New/Development/Program/C#/VisioPLC/VisioPLC/VisioTN_Диаграммы.vss");//. Masters.ItemU("Process")
Master fMaster = fObject.Masters.get_ItemU("Состояние");
((Page)mVisioApp.ActiveWindow.Page).Drop(fMaster,1.476378, 10.334646);
Go to Top of Page

Sviataslau

Belarus
10 Posts

Posted - 10/05/2006 :  12:49:11
Победа над фичей была достигнута путем шаманства (может есть опытные шаманы объясняющие происходящее, я в глубоком трансе :))
Шаманство заключается в том что при инициализации было вставлена след последовательность
if(mObjectPropDataTable.Rows.Count>0)
{
mObjectPropDataTable.Rows.Clear();
}
ArrayList fList = new ArrayList();
fList.Add("ID");fList.Add("..");
mObjectPropDataTable.Rows.Add(fList.ToArray());

fList.RemoveRange(0,fList.Count);
fList.Add("Уровень");fList.Add("...");

mObjectPropDataTable.Rows.Add(fList.ToArray());//fBaseObj.mLevelID.ToString()});
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)