Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 23 окт 2018, 08:59

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Событие Visio C#
СообщениеДобавлено: 24 май 2012, 10:59 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Подскажите литературку, или примерчик простой, как , например обработать событие добавление шейпа на страницу.
Название события ShapeAdded , я в курсе, просто где его капчить на C#, на VBA примеров много...спасибо.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 24 май 2012, 11:31 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
не знаю, это то что надо или нет. Взял в SDK от Visio2003 (файл Visio2003.cld), SDK для 2010 на моем компе нет.
если что-то надо, первым делом ищи в SDK :D
Код:
// ShapeAddDelete.cs
// <copyright>Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
// <summary>This file contains the implementation of ShapeAddDelete class.
// </summary>

using System;

namespace Microsoft.Samples.Visio.CSharp {

   /// <summary>This class responds to events when shapes are added to or
   /// deleted from a specific page.</summary>
   public class ShapeAddDelete {

      private Microsoft.Office.Interop.Visio.Page pageShapeIsOn;
      private Microsoft.Office.Interop.Visio.Application visioApplication;

      /// <summary>This constructor initializes the member variables and sets
      /// the event handlers for the events that this sample is interested in.
      /// </summary>
      /// <param name="passedInPage">Page that is to be used to initialize
      /// the member variable</param>
      public ShapeAddDelete(
         Microsoft.Office.Interop.Visio.Page passedInPage) {

         pageShapeIsOn = passedInPage;
         visioApplication = (Microsoft.Office.Interop.Visio.Application)
            pageShapeIsOn.Application;

         try {

            // Add the ShapeAdded event.
            pageShapeIsOn.ShapeAdded +=
               new Microsoft.Office.Interop.Visio.
                  EPage_ShapeAddedEventHandler(
                  shapeAddedToPageEventHandler);

            // Add the BeforeShapeDelete event.
            pageShapeIsOn.BeforeShapeDelete +=
               new Microsoft.Office.Interop.Visio.
                  EPage_BeforeShapeDeleteEventHandler(
                  deletingShapeFromPageEventHandler);
         }
         catch (Exception err) {
            System.Diagnostics.Debug.WriteLine(err.Message);
         }
      }

      /// <summary>This method is called by Visio before a shape is deleted.
      /// The code demonstrates how to get the name of the shape that is about
      /// to be deleted.</summary>
      /// <param name="deletedShape">Shape that is about to be deleted
      /// </param>
      private void deletingShapeFromPageEventHandler(
         Microsoft.Office.Interop.Visio.Shape deletedShape) {

         try {

            // Passing visCmdUFEditCut as a parameter to the IsInScope
            // property returns true if the shape is about to be deleted
            // using the EditCut action either through Ctrl-X or menu
            // action EditCut.
            if (visioApplication.get_IsInScope(
               (int)Microsoft.Office.Interop.Visio.
                  VisUICmds.visCmdUFEditCut)) {
               
               System.Diagnostics.Debug.WriteLine(
                  "A shape is about to be deleted using an "
                  + "Edit Cut action.\r\nThe universal name of the "
                  + "shape is " + deletedShape.NameU);
            }
            else {

               System.Diagnostics.Debug.WriteLine(
                  "A shape is about to be deleted.\r\n"
                  + "The universal name of the shape is "
                  + deletedShape.NameU);
            }
         }
         catch (Exception err) {
            System.Diagnostics.Debug.WriteLine(err.Message);
         }
      }

      /// <summary>This method is called by Visio when a shape is added to the
      /// page.</summary>
      /// <param name="addedShape">Shape that is about to be added</param>
      private void shapeAddedToPageEventHandler(
         Microsoft.Office.Interop.Visio.Shape addedShape) {

         try {

            // Passing visCmdObjectGroup as a parameter to the
            // IsInScope property returns true if the shape is
            // added using group action.
            if (visioApplication.get_IsInScope(
               (int)Microsoft.Office.Interop.Visio.
                  VisUICmds.visCmdObjectGroup)) {

               System.Diagnostics.Debug.WriteLine(
                  "A shape has been added using grouping "
                  + "action.\r\nThe universal name of the shape is "
                  + addedShape.NameU);
            }

            // Passing visCmdUFEditPaste as a parameter to the
            // IsInScope property returns true if the shape is
            // added using EditPaste action.
            else if (visioApplication.get_IsInScope(
               (int)Microsoft.Office.Interop.Visio.
                  VisUICmds.visCmdUFEditPaste)) {

               System.Diagnostics.Debug.WriteLine(
                  "A shape has been added using EditPaste "
                  + "action.\r\nThe universal name of the shape is "
                  + addedShape.NameU);
            }   

            // Passing visCmdEditPasteSpecial as a parameter to the
            // IsInScope property returns true if the shape is added
            // using EditPasteSpecial action.
            else if (visioApplication.get_IsInScope(
               (int)Microsoft.Office.Interop.Visio.
                  VisUICmds.visCmdEditPasteSpecial)) {

               System.Diagnostics.Debug.WriteLine(
                  "A shape has been added using "
                  + "EditPasteSpecial action.\r\nThe universal name "
                  + "of the shape is " + addedShape.NameU);
            }

            // If the shape is added using a normal user draw
            // action, show the name of the shape being added.
            else {

               System.Diagnostics.Debug.WriteLine(
                  "A shape has been added.\r\n"
                  + "The universal name of the shape is "
                  + addedShape.NameU);
            }
         }
         catch (Exception err) {
            System.Diagnostics.Debug.WriteLine(err.Message);
         }
      }
   }


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 24 май 2012, 11:35 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
ха! вот почти слово в слово пишу то же самое)))
даже пример тот же нашел)))

вообще сразу скачай и установи себе Visio SDK. там есть спец приложение с примерами на разных языках. в том числе и C#. и подробнейше написано с коментариями в том числе и про Event Handling


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 24 май 2012, 15:00 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Спасибо ) , будем разбираться) как сделаю, скину код, кто быстрей :mrgreen:


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 24 май 2012, 15:43 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
все очень просто, разобрался))

вот код. "Все украдено до нас :D". Просто создаем событие и в его методе делаем че хотим

Код:
// Событие запуска аддына
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            Visio.Application app = Globals.ThisAddIn.Application;
            app.ShapeAdded +=new Visio.EApplication_ShapeAddedEventHandler(app_ShapeAdded);
         
        }

        private void app_ShapeAdded(Shape shape)
        {
            MessageBox.Show("Test");
        }


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 24 май 2012, 19:33 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
отлично)
тоже думаю надо C# осваивать


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 00:29 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
я тоже думаю, но думаю что руки не дойдут :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 09:28 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Шарп достаточно простой язык, намного более функциональный даже для Visio, чем vba. да и если знаком с vba под visio, ознакомиться с C# для визио не составит труда. Похожие все методы, классы, или как там оно в vba называется, всё очень схоже.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 10:12 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
да, с .Net технологиями сейчас все языки похожи стали. объектная ориентированность, COM/OLE технологии и пр.
я лично долго к бейсику привыкнуть не мог после С++ всё равно, уж больно тупой синтаксис в VB :)
хотя конечно что-то по-быстрому набросать под офисное приложение - VBA самое то))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 11:23 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
побыстрому - это да, но я делаю целую систему автоматизаци...и увы простым vba тут не отделаешься ))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 12:38 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Sila писал(а):
побыстрому - это да, но я делаю целую систему автоматизаци...и увы простым vba тут не отделаешься ))


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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 12:53 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 897
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

Добавить очки репутацииУменьшить очки репутации
да! оч интересно :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 25 май 2012, 15:40 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
Коды выкладываю на будущее, кто будет делать visio add-in, чтобы не ковырялись по всему интернету днями, как я.
Это будет коммерческий продукт для расчетов технологических схем. :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 26 май 2012, 19:10 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Краем уха услышал что через С# можно Visio управлять? А как это происходит? Вы работает через Визуал Студию?А как написанное там потом можно использовать в визио?Если можно по подробнее расскажите, новичку)?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 27 май 2012, 12:06 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
все довольно просто, создай проект в visual studio, тип проекта office/visio add-in, и там делай что хочешь :)
Появляется вкладка - надстройки, называется Ribbon Panel и через неё добавляешь свои контролы. События visio фиксятся легко.
После отладки создается файл надстройки, для работы твоего приложения к визио, достаточно взять етот файл и запустить его на другом компе, где стотит визио, он впишет твои надстройки 1 раз и она будет работать при любом запуске визио на этом компе. Если очень интересно , почитай литературу в msdn, там хорошо расписано об объектной модели visio add-in.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 28 май 2012, 10:26 
Не в сети
Постоянный участник

Зарегистрирован: 11 май 2012, 15:05
Сообщений: 92
Очков репутации: 25

Добавить очки репутацииУменьшить очки репутации
Вот пример для обработки события определенной фигуры
Код:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            Globals.ThisAddIn.Application.Window.Application.MarkerEvent +=
              new Visio.EApplication_MarkerEventEventHandler(Application_MarkerEvent);
        }

void Application_MarkerEvent(Visio.Application app, int SequenceNum, string ContextString)
        {
          MessageBox.Show(ContextString);
        }


а в таблицу свойств мастер-шейпа в разделе Event/EventDrop добавляем,
Код:
=QUEUEMARKEREVENT("/cmd=AddShape")


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Событие Visio C#
СообщениеДобавлено: 28 май 2012, 13:01 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 24 апр 2012, 12:36
Сообщений: 180
Очков репутации: 11

Добавить очки репутацииУменьшить очки репутации
позновато Вы ответили, но спасибо)) буквально 2 часа назад сделал. практически также


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB