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

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 03:14

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


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


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 103 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Как создать Add-On?
СообщениеДобавлено: 15 мар 2016, 13:53 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Когда-то я написал аддон на VB6. И сейчас захотел его обновить. Установил Visual Studio Community 2015 скачал SDK 2013.
Заготовки аддона увы нет. А старый проект, современный Visual Studio Community 2015 читать не желает. Есть путь последовательной конвертации, но это слишком утомительно. Подскажите где можно взять шаблон аддона на VB. Поскольку на С++ есть, но мне надо на VB. Буду благодарен за любую помощь.
Дополнено позднее: 08.09.2021
Boris в сообщении #16210 писал(а):


Вложения:
Комментарий к файлу: Это тот файл который хочу переписать. Создаёт плоские массивы четырёхугольные и по дуге. Можно текст по дуге. Появились новые идеи, хочу реализовать их. Могу выложить старый проект на VB6.
и букв.zip [23.35 Кб]
Скачиваний: 111
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 06 апр 2016, 13:21 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Сдается мне, что я обнаружил нечто похожее на обсуждаемую проблему...
Выполняется дублирование шейпа. Вообще-то методом DropMany, но я сократил это до одного шейпа.
Суть проблемы:
Для нового шейпа макрос отрабатывает как положено - рисует рядом копию.
Смещаем исходный шейп и повторяем макрос. Копия уходит вниз!
Смещаем копию (новый шейп) - новая копия получается нормально.
Дублируем исходный шейп (через Ctrl+) - для копии макрос работет нормально.
-------------
Получается, что при сдвиге исходного шейпа Visio запоминает величину этого сдвига и сам без спроса добавляет его к последующим дублям.
Такое поведение выглядит как баг, но скорее всего багом не является.
Как я понимаю, это связано тем, что DropMany рассчитана на работу с мастер-шейпами. Поэтому смещение исходного шейпа воспринимается как смещение шейпа в мастере. То есть вроде как мы сместили мастер-шейп в трафарете.
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
offset.gif
offset.gif [ 79.87 Кб | Просмотров: 1221 ]


Вложения:
DropManyTest_2.vsd [23.5 Кб]
Скачиваний: 194
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 06 апр 2016, 15:25 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
я грешным делом считал, если шейп сдвинуть, то переменную содержащую шейп нужно очистить, и потом присвоить ей новое значение - шейп с его новым местоположением. хотя возможно я со своей колокольни, чего-то упорно не замечаю


Повторяю:
У меня только две глобальные типа String в каждой из них хранится имя шейпа например Sheet.34
Каждый раз при начале построения по этим именам идет получение координат:
Код:
vAob = visAcPg.Shapes(vNamObjC).Cells("PinX").Result(70)
vBob = visAcPg.Shapes(vNamObjC).Cells("PinY").Result(70)

После чего и начинается всё остальное. Но эта процедура выполняется всегда в начале каждого цикла.
Причём если пощёлкать радиокнопками по которым ничего не выполняется. Их состояние проверяется при выполнении.
То иногда начинает строить правильно. Иногда помогает очистка и ввод того же значения в текстбокс.
Мистика


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 06 апр 2016, 15:32 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Получается, что при сдвиге исходного шейпа Visio запоминает величину этого сдвига и сам без спроса добавляет его к последующим дублям.
Такое поведение выглядит как баг, но скорее всего багом не является.


Очень похоже, только у меня копий намного больше и сдвиг получается очень интересный. То есть надо искать как Drop заставить принимать текущие данные.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 06 апр 2016, 17:39 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Boris
DoEvents пробовали вставлять перед выполнением процедуры и после (лучше и там и там)?

вот был у меня когда то похожий по функционалу код. красным отметил ключевые моменты, где приходилось использовать DoEvents, иначе расположение шейпов портилось. присутствует и метод Drop:

Цитата:
'собираем коробку
'==========================
'Application.ScreenUpdating = False

With sh
cp = .CellsU("User." & NumOfCP_row & ".Value").ResultIU
'удаляем клеммы кроме первой
For i = cp To 2 Step -1
If Connections.IsCP(.Shapes(i)) Then
.Shapes(i).Delete
End If
Next i
DoEvents
'ищем первую ТП
For i = 1 To .Shapes.Count
If Connections.IsCP(.Shapes(i)) Then
Set sht1 = .Shapes(i)
Set sht3 = sht1
Exit For
End If
Next i
If sht1 Is Nothing Then Exit Sub
sht1.Text = m
sht1.CellsU("PinX").ResultIU = .Shapes(1).CellsU("PinX") - .Shapes(1).CellsU("Width") / 2 + 0.197
sht1.CellsU("PinY").ResultIU = .Shapes(1).CellsU("PinY") - .Shapes(1).CellsU("Height") / 2 + 0.197
DoEvents
'создаем нужное кол-во
For i = 1 To n - 1
m = m + 1
Set sht2 = .Drop(sht1, sht1.CellsU("PinX") + sht1.CellsU("Width"), sht1.CellsU("PinY"))
sht2.Text = m
Set sht1 = sht2
Next i
'рамка
.Shapes(1).CellsU("PinX") = (sht3.CellsU("PinX") + sht3.CellsU("Width") * m) / 2
.Shapes(1).CellsU("Width") = sht3.CellsU("Width") * m
.Shapes(1).CellsU("Width").FormulaU = """" & .Shapes(1).CellsU("Width").ResultStr(0) & "+5 mm"""
DoEvents
.CellsU("LockCalcWH").ResultIU = 0
.UpdateAlignmentBox
ThisDocument.UpdAlignmentBox sh
.CellsU("LockCalcWH").ResultIU = 1

'Application.ScreenUpdating = True


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 06 апр 2016, 18:27 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Понатыкал везде где ни попадя Application.DoEvents()
Не помогает.
Только рестарт аддона.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 17:47 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Самое фантастическое если в качестве первичного объекта размножения используется линия
Код:
' Определение типа шейпа. Если одномерный то vL устанавливается в TRUE
        If visAcPg.Shapes(vNamObjC).OneD = -1 Then vL = True

то работает великолепно.
А вот с двумерными прямоугольник или круг, то начинается чехарда.
Прицепленный файл этот самый аддон. Создаёт круговой или прямоугольный массив.
Пока работает только круговой. Кнопка ОБЪЕКТ выбор первого шейпа.
Кнопка ЦЕНТР выбор шейпа чей Pin будет центром кругового массива.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 17:48 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Boris писал(а):
Прицепленный файл этот самый аддон
где файл ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 17:49 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

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


Вложения:
Arrey.rar [18.28 Кб]
Скачиваний: 68
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 18:26 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
подтверждаю, всю описанную мистику !

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 19:04 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Могу выложить весь проект VS.
Только кто будет копаться в этой куче кода?
Комментарии есть, для себя писал.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 19:07 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Dispose закрывает форму.
Пробовал по другой кнопке выполнить Drop с другим объектом, чтобы перезаписать данные, не помогло


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 07 апр 2016, 22:21 
Не в сети
Ветеран

Зарегистрирован: 05 июл 2012, 21:34
Сообщений: 225
Очков репутации: 27

Добавить очки репутацииУменьшить очки репутации
Класс у Вас какой? Static? Декомпилировал в ILSpy. Я Вам советую сделать отдельный класс статический, в который поместить все манипуляции с геометрией.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 07:29 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Зачем же декомпилить? Вот пожалуйста исходник с комментариями.


Вложения:
.txt [20.78 Кб]
Скачиваний: 203
.txt [20.78 Кб]
Скачиваний: 169
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 07:49 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Robink писал(а):
Я Вам советую сделать отдельный класс статический, в который поместить все манипуляции с геометрией.
А как это сделать отдельный класс? Простите но я ещё слабо разбираюсь в VS.
Добавить модуль? А что в заголовке прописать?
Можно поподробней?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 10:16 
Не в сети
Ветеран

Зарегистрирован: 05 июл 2012, 21:34
Сообщений: 225
Очков репутации: 27

Добавить очки репутацииУменьшить очки репутации
У Вас один класс Arrey. Не нашел точку входа. Попробуйте сделать его статическим, попробуйте вот так Public Shared Class Arrey.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 11:08 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
VS на такой синтаксис не согласна. Точка входа сама форма.
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
VS не согласна.jpg
VS не согласна.jpg [ 90.41 Кб | Просмотров: 1071 ]


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 12:11 
Не в сети
Ветеран

Зарегистрирован: 05 июл 2012, 21:34
Сообщений: 225
Очков репутации: 27

Добавить очки репутацииУменьшить очки репутации
Хм действительно. Попробуйте NotInheritable. http://stackoverflow.com/questions/135841/marking-a-class-static-in-vb-net


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 13:42 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Robink писал(а):
Попробуйте NotInheritable
Попробовал, никакого результата. Надо каким то образом привести аддон к состоянию "только запустился"


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 08 апр 2016, 19:08 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Создал новый модуль и туда перенёс всё построение геометрии. Ничего не изменилось.
Правда код стал читабельней. :D


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как создать Add-On?
СообщениеДобавлено: 09 апр 2016, 18:27 
Не в сети
Постоянный участник

Зарегистрирован: 31 май 2014, 02:42
Сообщений: 67
Использую Visio c: 1994
Отрасль: Газ нефте добыча
Должность: инженер
Уровнь квалификации: всего по немножку
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
В принципе нашел как обойти этот глюк. Немного коряво, но ничего другого пока сделать не могу.

Цитата:
' Создание копии первого элемента, установка на место.
' Получение имени полученной копии.
vTEMP = visAcPg.Drop(visAcPg.Shapes(Arrey.vNamObjC), 0, 0).Name
То есть устанавливаю шейп на место уже после копирования. Потому что иначе никак не могу победить DROP он запоминает предыдущую позицию и добавляет её к создаваемому.
' Копия устанавливается на vХ и vY
visAcPg.Shapes(vTEMP).Cells("PinX").FormulaForce = vX
visAcPg.Shapes(vTEMP).Cells("PinY").FormulaForce = vY


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 103 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

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



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

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


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

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