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

Форум по вопросам применения и программирования в Visio
Текущее время: 27 июн 2017, 00:31

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


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


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Поместить окно Addon'а в плавающее окно
СообщениеДобавлено: 17 дек 2014, 19:57 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 411
Использую Visio c: 2008
Очков репутации: 87

Добавить очки репутацииУменьшить очки репутации
Макрос по теме - Функция подсчета площади и периметра.
http://visio.getbb.ru/viewtopic.php?f=2&t=692

Изображение

Код:
Код:
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
   
Public Const GWL_STYLE = (-16)
Public Const WS_CHILD = &H40000000
Public Const WS_VISIBLE = &H10000000

Sub PutWinInWin() ' Запуск макроса
'В документе должна существовать пустая форма(UserForm) с именем(не заголовком) - "Base"

Call ShowBase("Площадь и периметр фигуры")
'Call ShowBase("Создание массива фигур")

'Текст в кавычках - заголовок окна которое нужно поместить в наше плавающее окошко
'Это окно уже должно быть открыто перед запуском кода.
End Sub

Sub ShowBase(strWindowName)
Dim FormHandle As Long

FormHandle = FindWindow(vbNullString, strWindowName)

If FormHandle <> 0 Then

    Dim wAddon As Visio.Window
    Set wAddon = ActiveWindow.Windows.Add("Base", visWSVisible, visAnchorBarAddon, , , 300, 150)
'    300, 150 - размеры нового окна если оно будет плавающим, не прикрепленным(это зависит от wAddon.WindowState)
   
    SetWindowLong FormHandle, GWL_STYLE, WS_CHILD Or WS_VISIBLE Or ws_NOCOPYBITS
    SetParent FormHandle, wAddon.WindowHandle32
   
    Dim pnLeft As Long, pnTop As Long, pnWidth As Long, pnHeight As Long
    wAddon.GetWindowRect pnLeft, pnTop, pnWidth, pnHeight
    wAddon.SetWindowRect pnLeft, pnTop, pnWidth, pnHeight
    wAddon.WindowState = visWSVisible + visWSDockedRight
    'Другие константы прикрепления искать в документации Vba по словосочетанию - VisWindowStates Constants
    wAddon.Caption = strWindowName

End If

End Sub


Повторю ссылку которую давал 9rey:
http://msdn.microsoft.com/en-us/library/aa140261(v=office.10).aspx
У меня заработало сначала, потом почему-то перестало. Естественно, тупо копипастить код там не надо. Следует подумать. :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поместить окно Addon'а в плавающее окно
СообщениеДобавлено: 17 дек 2014, 23:49 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 484
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100602

Добавить очки репутацииУменьшить очки репутации
О, кул!
Если бы это еще как-то завернуть по-удобному - конфетка бы была Изображение

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поместить окно Addon'а в плавающее окно
СообщениеДобавлено: 17 дек 2014, 23:57 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 411
Использую Visio c: 2008
Очков репутации: 87

Добавить очки репутацииУменьшить очки репутации
nbelyh писал(а):
О, кул!
Если бы это еще как-то завернуть по-удобному - конфетка бы была Изображение

В смысле - Addin? Или как?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поместить окно Addon'а в плавающее окно
СообщениеДобавлено: 18 дек 2014, 00:10 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 484
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100602

Добавить очки репутацииУменьшить очки репутации
Да я пока не знаю как.. :)
Может и аддин. Типа чтобы можно было показать на такое окно, сказать "хочу чтобы оно дочилось", и оно стало :)

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поместить окно Addon'а в плавающее окно
СообщениеДобавлено: 18 дек 2014, 08:55 
Не в сети
Ветеран

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

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


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

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



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

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


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

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