|
Меню через WinAPI
|
|||
---|---|---|---|
#18+
Здравствуйте Я сделал для формы меню из двух пунктов File и About. При выборе первого пункта меню File , выпадает подменю с командами New Save Exit. Т.к. в VBA нет компонента меню, то чтобы не искать сторонние компоненты, то сделал меню на WinAPI. Работает через субклассирование. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Это часть кода.Для тестирования меню вывожу просто сообщение о выбранном пункте. Вопрос такой: если форма запускается в модальном режиме, то при выборе пунктов меню появляются соответствующие сообщения, а при немодальном форма виснет. Проверял в Excel. Приходиться запускать Диспетчер задач, чтобы закрыть Excel Вот полный текст: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
Все объявлено в стандартном модуле, Activate Sub вызывается при активации формы, Deactivate Sub при деактивации чтобы передать адрес на стандартную обработку сообщений ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 10:27 |
|
Меню через WinAPI
|
|||
---|---|---|---|
#18+
Этот код не будет компилироваться, по причине отсутствия декларации используемых типов ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 13:13 |
|
Меню через WinAPI
|
|||
---|---|---|---|
#18+
Eolt, но он же запускается когда я форму в модальном режиме запускаю, и работает как надо. В немодальном режиме форма виснет вместе с родительским приложением, либо нужно на другое окно переключиться, а потом вернуться назад, либо диспетчером задачу снять. Немного не понял про декларацию типов. Вроде все объявлено ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 08:12 |
|
Меню через WinAPI
|
|||
---|---|---|---|
#18+
Damir_85 Eolt, но он же запускается когда я форму в модальном режиме запускаю, и работает как надо. В немодальном режиме форма виснет вместе с родительским приложением, либо нужно на другое окно переключиться, а потом вернуться назад, либо диспетчером задачу снять. Немного не понял про декларацию типов. Вроде все объявлено Не может он запускаться, сразу выдаст ошибку на неизвестном типе, вот тут к примеру Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wflags As Long, ByVal X As Long, ByVal Y As Long, ByVal nreserved As Long, ByVal hwnd As Long, lprc As Rect ) As Long Тип Rect не задекларирован в коде ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 10:21 |
|
Меню через WinAPI
|
|||
---|---|---|---|
#18+
Eolt, нет задекларирован. Я его не добавил на форум. Вот он: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но по сути, TrackPopupMenu и не нужен, я пытаюсь сделать верхнее меню. Вынужден пока контекстное использовать, поэтому есть объявление ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 18:44 |
|
|
start [/forum/topic.php?fid=60&msg=40039542&tid=2154748]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 273ms |
total: | 405ms |
0 / 0 |