Форум пользователей Visio http://visio.getbb.ru/ |
|
Поместить окно Addon'а в плавающее окно http://visio.getbb.ru/viewtopic.php?f=15&t=697 |
Страница 1 из 1 |
Автор: | Shishok [ 17 дек 2014, 19:57 ] |
Заголовок сообщения: | Поместить окно Addon'а в плавающее окно |
Макрос по теме - Функция подсчета площади и периметра. 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 У меня заработало сначала, потом почему-то перестало. Естественно, тупо копипастить код там не надо. Следует подумать. |
Автор: | nbelyh [ 17 дек 2014, 23:49 ] |
Заголовок сообщения: | Re: Поместить окно Addon'а в плавающее окно |
О, кул! Если бы это еще как-то завернуть по-удобному - конфетка бы была |
Автор: | Shishok [ 17 дек 2014, 23:57 ] |
Заголовок сообщения: | Re: Поместить окно Addon'а в плавающее окно |
nbelyh писал(а): О, кул! Если бы это еще как-то завернуть по-удобному - конфетка бы была В смысле - Addin? Или как? |
Автор: | nbelyh [ 18 дек 2014, 00:10 ] |
Заголовок сообщения: | Re: Поместить окно Addon'а в плавающее окно |
Да я пока не знаю как.. Может и аддин. Типа чтобы можно было показать на такое окно, сказать "хочу чтобы оно дочилось", и оно стало |
Автор: | 9rey [ 18 дек 2014, 08:55 ] |
Заголовок сообщения: | Re: Поместить окно Addon'а в плавающее окно |
да можно наверно. есть же апишные ф-и определяющие хендл окна в фокусе. что-то типа старенького Spy++, он определял всю инфу по окошку, на которое наводишь мышь. тут такой же принцип. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |