|
|
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Нужно сделать пользовательскую форму поверх всех окон. Столкнулся с первой проблемой - как найти ее хендл. (так чтобы форма была сверху, даже когда эксель свернутый в значок) Спасибо всем кто знает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 14:09 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Gelo_R, может, не самый оптимальный способ, но... Пусть на форме есть Frame. Если его нет, то можно сделать, чтобы он был видимым, но сливался с фоном. Тогда с помощью функции API GetAncestor() можно узнать дескриптор UserForm-ы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 15:21 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
[quot Бенедикт]Gelo_R, А можно поподробнее про фрейм? Как его сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 15:42 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Gelo_R, "сделать" его, как и любой другой элемент управления: нажав на соответствующую кнопку (рамка с надписью XYZ) в Toolbox и нарисовав границы на форме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 16:01 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Тогда непонятно с синтаксисом. если должно быть так - GetAncestor(hWnd, GA_ROOT), то где мне взять hWnd? Frame1.[_GethWnd] - непонятное написано... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 16:35 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Gelo_R, Frame1 - это тот самый элемент управления типа Frame, который надо создать. Frame поддерживает также интерфейс MSForms.Control. У этого интерфейса есть скрытое свойство _GethWnd (можно увидеть в Object Browser (F2), с опцией Show Hidden Members). Но не все элементы управления оконные, и имеют дескриптор. Квадратные скобки вокруг идентификатора применены потому, что идентификатор в VB/VBA не может начинаться со знака подчёркивания. А что, лень проверить, как работает, даже не полностью понимая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 17:20 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Debug.Print Hex$(GetAncestor(UserForm1.Frame1.[_GethWnd], GA_ROOT)) Эта строка возвращает 0! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 19:36 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
Gelo_RDebug.Print Hex$(GetAncestor(UserForm1.Frame1.[_GethWnd], GA_ROOT)) Эта строка возвращает 0!А у меня - нет. Что делать будем? Может, на всякий случай, сделаем Frame1 видимым? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 19:48 |
|
||
|
VBA + Exce l+ UserForm - Как найти хендл формы?
|
|||
|---|---|---|---|
|
#18+
да я и не прятал его... Перетащил на форму и все. Это у вас работает из под экселя? Если так, нельзя ли скинуть этот ваш примерчик, чтоб я поковырялся... поискал почему у меня не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 20:25 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34819021&tid=2163366]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 431ms |

| 0 / 0 |
