Форум пользователей 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/