Форум пользователей Visio http://visio.getbb.ru/ |
|
Перехват клика сишарпом http://visio.getbb.ru/viewtopic.php?f=6&t=1322 |
Страница 1 из 1 |
Автор: | powercat [ 16 апр 2018, 10:46 ] |
Заголовок сообщения: | Перехват клика сишарпом |
Привет. Начал реализацию. Сразу возникает вопрос - как перехватить даблоклик в вижуо внешней прогой? Чтобы открылся не вижуо-диалог, а например, кастомная форма... Библиотека вижуо в проекте, лист вижуо открывается на форме через контрол. |
Автор: | Tumanov [ 16 апр 2018, 12:10 ] |
Заголовок сообщения: | Re: Перехват клика сишарпом |
Даблклики не нужно перехватывать. Они просто программируются. Вручную - через Format / Behavior / Double-Click Или через ShapeSheet - ячейка EventDblClick. |
Автор: | powercat [ 16 апр 2018, 14:32 ] |
Заголовок сообщения: | Re: Перехват клика сишарпом |
Tumanov писал(а): Даблклики не нужно перехватывать. Они просто программируются. Вручную - через Format / Behavior / Double-Click Или через ShapeSheet - ячейка EventDblClick. Я что-то опять криво написал - нужно перехватить клик по шейпу, но при этом должно открыться, ну пусть форма из сишарпа. А не VBAшная или вижевая форма. Если писать чисто в самом вижуо, я понимаю, как запустить форму. Но если писать на шарпе, то тут вот не понял пока...На EventDblClick повесить-то нечего ))) |
Автор: | Tumanov [ 16 апр 2018, 16:01 ] |
Заголовок сообщения: | Re: Перехват клика сишарпом |
Плоды того, что "нормальные герои всегда идут в обход" В таком случае напрашивается прописать в 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 |
Автор: | powercat [ 16 апр 2018, 16:21 ] |
Заголовок сообщения: | Re: Перехват клика сишарпом |
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 Ёперный театр )))) Но да, идея с изменением ячейки и отлов через экземпляр листа - отличное решение! благодарю... |
Автор: | Tumanov [ 22 апр 2018, 17:57 ] | ||
Заголовок сообщения: | Re: Перехват клика сишарпом | ||
Ну да, 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.
|
Автор: | powercat [ 25 апр 2018, 11:55 ] |
Заголовок сообщения: | Re: Перехват клика сишарпом |
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 - это СТРОКА, отправленная из вижуо. |
Автор: | powercat [ 25 апр 2018, 11:57 ] |
Заголовок сообщения: | Re: Перехват клика сишарпом |
Странно, под гостем вставилось |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |