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

Форум по вопросам применения и программирования в Visio
Текущее время: 23 июн 2018, 06:03

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


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


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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Перехват клика сишарпом
СообщениеДобавлено: 16 апр 2018, 10:46 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 282
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Привет.
Начал реализацию.
Сразу возникает вопрос - как перехватить даблоклик в вижуо внешней прогой? Чтобы открылся не вижуо-диалог, а например, кастомная форма...
Библиотека вижуо в проекте, лист вижуо открывается на форме через контрол.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 16 апр 2018, 12:10 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1130
Очков репутации: 100585

Добавить очки репутацииУменьшить очки репутации
Даблклики не нужно перехватывать. Они просто программируются.
Вручную - через Format / Behavior / Double-Click
Или через ShapeSheet - ячейка EventDblClick.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 16 апр 2018, 14:32 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 282
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Даблклики не нужно перехватывать. Они просто программируются.
Вручную - через Format / Behavior / Double-Click
Или через ShapeSheet - ячейка EventDblClick.


Я что-то опять криво написал - нужно перехватить клик по шейпу, но при этом должно открыться, ну пусть форма из сишарпа. А не VBAшная или вижевая форма.
Если писать чисто в самом вижуо, я понимаю, как запустить форму. Но если писать на шарпе, то тут вот не понял пока...На EventDblClick повесить-то нечего )))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 16 апр 2018, 16:01 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1130
Очков репутации: 100585

Добавить очки репутацииУменьшить очки репутации
Плоды того, что "нормальные герои всегда идут в обход" :)
В таком случае напрашивается прописать в EventDblClick QUEUEMARKER и ловить MarkerEvent. Однако, от DrawingControl до него еще нужно добраться...
Можно попробовать вариант проще, но еще кривее :) Превратить DblClick в событие, на которое можно навесить обработчик. Например, CellChanged.
Прописать в DblClick =SETF(GetRef(Scratch.A1),GetRef(Scratch.A1)+1)
Где-то в начале стартовать Set pg = DrawingControl1.Document.Pages(1)
И использовать обработчик pg_CellChanged
Private Sub pg_CellChanged(ByVal Cell As Visio.IVCell)
MsgBox Cell.Formula
End Sub
DblClick будет дергать Scratch.A1, а это изменение будет отлавливаться в CellChanged


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 16 апр 2018, 16:21 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 282
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Плоды того, что "нормальные герои всегда идут в обход" :)
В таком случае напрашивается прописать в EventDblClick QUEUEMARKER и ловить MarkerEvent. Однако, от DrawingControl до него еще нужно добраться...
Можно попробовать вариант проще, но еще кривее :) Превратить DblClick в событие, на которое можно навесить обработчик. Например, CellChanged.
Прописать в DblClick =SETF(GetRef(Scratch.A1),GetRef(Scratch.A1)+1)
Где-то в начале стартовать Set pg = DrawingControl1.Document.Pages(1)
И использовать обработчик pg_CellChanged
Private Sub pg_CellChanged(ByVal Cell As Visio.IVCell)
MsgBox Cell.Formula
End Sub
DblClick будет дергать Scratch.A1, а это изменение будет отлавливаться в CellChanged


Ёперный театр ))))
Но да, идея с изменением ячейки и отлов через экземпляр листа - отличное решение! благодарю...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 22 апр 2018, 17:57 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1130
Очков репутации: 100585

Добавить очки репутацииУменьшить очки репутации
Ну да, QUEUEMARKEREVENT тоже нормально работает.
Естественно, это более чистое решение.
В VB6 это выглядит вот так
Код:
Dim WithEvents vApp As Visio.Application

Private Sub Form_Load()
    DrawingControl1.Src = "G:\!w\Ýêñï\Visio\DrawContrPopUp_AddAdvise_Marker\d1.vsd"
    Set vApp = DrawingControl1.Document.Application
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set vApp = Nothing
End Sub

Private Sub vApp_MarkerEvent(ByVal app As Visio.IVApplication, ByVal SequenceNum As Long, ByVal ContextString As String)
    MsgBox "DoubleClick from Sheet." & ContextString
End Sub

Нужные шейпы заряжаются функцией QUEUEMARKEREVENT и в качестве параметра передают, например, свой ID.


Вложения:
marker.jpg
marker.jpg [ 9.43 Кб | Просмотров: 85 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 25 апр 2018, 11:55 
Tumanov писал(а):
Ну да, QUEUEMARKEREVENT тоже нормально работает.
Естественно, это более чистое решение.
В VB6 это выглядит вот так
Код:
Dim WithEvents vApp As Visio.Application

Private Sub Form_Load()
    DrawingControl1.Src = "G:\!w\Ýêñï\Visio\DrawContrPopUp_AddAdvise_Marker\d1.vsd"
    Set vApp = DrawingControl1.Document.Application
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set vApp = Nothing
End Sub

Private Sub vApp_MarkerEvent(ByVal app As Visio.IVApplication, ByVal SequenceNum As Long, ByVal ContextString As String)
    MsgBox "DoubleClick from Sheet." & ContextString
End Sub

Нужные шейпы заряжаются функцией QUEUEMARKEREVENT и в качестве параметра передают, например, свой ID.


Благодарю, сделал под шарп. Напишу детально, может кому пригодится.

0. В вижуо в нужном шейпе в шейпшите в разделе событий на даблкли написать QUEUEMARKEREVENT(аргумент). В качестве аргумента я передаю Prop.name (кастомный) и Prop.id (кастомный) и разделитель между ними "|". В шарп вернется СТРОКА, которую нужно будет распарсить (ну или нет...). Этот шейп закинуть в стенсилсы, привязанные к проекту ссылкой на файл
1. В проект добавить ссылки на вижуо
2. Добавить ссылку на контрол AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl
3. Создать объект (можно без него) AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl drawing_area_on_form. Мне удобно работать с явным выделением листочка для рисования ))
4. Вытащить контрол на форму
5. Повесить на событие загрузки формы подписку на событие даблклика
Код:
drawing_area_on_form.Document.Application.MarkerEvent+=new Microsoft.Office.Interop.Visio.EApplication_MarkerEventEventHandler(Processing_double_click_on_shape);

6. Метод обработчик (вообще создается автоматически, но можно и руками)
Код:
          private void Processing_double_click_on_shape(Microsoft.Office.Interop.Visio.Application app, int SequenceNum, string ContextString)
          {

               if(ContextString!=null)
               {

                    MessageBox.Show(ContextString);

               }
          }

7. ContextString - это СТРОКА, отправленная из вижуо.


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехват клика сишарпом
СообщениеДобавлено: 25 апр 2018, 11:57 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 282
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Странно, под гостем вставилось :o


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

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



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

Сейчас этот форум просматривают: Yandex [bot] и гости: 1


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

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