powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA + Exce l+ UserForm - Как найти хендл формы?
10 сообщений из 10, страница 1 из 1
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34817870
Gelo_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно сделать пользовательскую форму поверх всех окон. Столкнулся с первой проблемой - как найти ее хендл. (так чтобы форма была сверху, даже когда эксель свернутый в значок)

Спасибо всем кто знает!
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818214
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gelo_R,
может, не самый оптимальный способ, но...
Пусть на форме есть Frame. Если его нет, то можно сделать, чтобы он был видимым, но сливался с фоном. Тогда с помощью функции API GetAncestor() можно узнать дескриптор UserForm-ы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Declare Function GetAncestor Lib "user32" ( _
   ByVal hWnd As Long, ByVal gaFlags As Long) As Long
Private Const GA_PARENT =  1 
Private Const GA_ROOT =  2 
Private Const GA_ROOTOWNER =  3 

Private Sub CommandButton1_Click()
 Debug.Print Hex$(GetAncestor(Frame1.[_GethWnd], GA_ROOT))
End Sub
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818296
Gelo_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Бенедикт]Gelo_R,
А можно поподробнее про фрейм? Как его сделать?
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818375
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gelo_R,
"сделать" его, как и любой другой элемент управления: нажав на соответствующую кнопку (рамка с надписью XYZ) в Toolbox и нарисовав границы на форме.
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818487
Gelo_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда непонятно с синтаксисом.
если должно быть так - GetAncestor(hWnd, GA_ROOT), то где мне взять hWnd?
Frame1.[_GethWnd] - непонятное написано...
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818621
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gelo_R,
Frame1 - это тот самый элемент управления типа Frame, который надо создать. Frame поддерживает также интерфейс MSForms.Control. У этого интерфейса есть скрытое свойство _GethWnd (можно увидеть в Object Browser (F2), с опцией Show Hidden Members). Но не все элементы управления оконные, и имеют дескриптор. Квадратные скобки вокруг идентификатора применены потому, что идентификатор в VB/VBA не может начинаться со знака подчёркивания.

А что, лень проверить, как работает, даже не полностью понимая?
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818964
Gelo_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Debug.Print Hex$(GetAncestor(UserForm1.Frame1.[_GethWnd], GA_ROOT))
Эта строка возвращает 0!
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34818980
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gelo_RDebug.Print Hex$(GetAncestor(UserForm1.Frame1.[_GethWnd], GA_ROOT))
Эта строка возвращает 0!А у меня - нет. Что делать будем? Может, на всякий случай, сделаем Frame1 видимым?
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34819019
Gelo_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я и не прятал его... Перетащил на форму и все. Это у вас работает из под экселя? Если так, нельзя ли скинуть этот ваш примерчик, чтоб я поковырялся... поискал почему у меня не работает
...
Рейтинг: 0 / 0
VBA + Exce l+ UserForm - Как найти хендл формы?
    #34819021
Gelo_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
УРА! работает. наверно просто какой-то глюк был. Теперь надо сделать эту форму поверх остальных окон. Спасибо большое!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA + Exce l+ UserForm - Как найти хендл формы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]