Страница: 1 | 2 | 3 | 4 |
Вопрос: Меню
Добавлено: 19.07.04 13:27
Автор вопроса: BeTe
Ответы
Всего ответов: 49
Номер ответа: 16
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #16
Добавлено: 19.07.04 17:13
блин все равно ничего не понял
Номер ответа: 17
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #17
Добавлено: 19.07.04 17:31
Подожди, навероне sne сейчас тестит
Молись чтобы это было так ))
Номер ответа: 18
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #18
Добавлено: 19.07.04 17:41
Дык хэндл контрола, а не contrlID...
В VB все меню привязаны к форме (она их родитель), отсюда напрашивается очевидный вывод, что там, в этом параметре, может передаваться
Ну да даже если это не так, что скорее всего то тогда там должен быть ноль... по идее
Номер ответа: 19
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #19
Добавлено: 19.07.04 17:44
фу..., блин, разобрался:
Dim hMainMenu As Long
Dim hMenu As Long
Dim MenuID As Long
hMainMenu = GetMenu(Me.hwnd)
hMenu = GetSubMenu(hMainMenu, 0)
MenuID = GetMenuItemID(hMenu, 0) 'вместо "0" можешь подставить номер своего пункта меню (начиная с нуля)
Call SendMessage(Me.hwnd, WM_COMMAND, MenuID, ByVal 0&
При этом будет вызываться обработчик menuItem_Click()
Номер ответа: 20
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #20
Добавлено: 19.07.04 18:18
>Дык хэндл контрола, а не contrlID...
HANDLE - Логический номер.
Номер ответа: 21
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #21
Добавлено: 19.07.04 18:42
Андрей Никитин, Народ - спасиба конечно огромное, все получилось... Но раз пошла такая пьянка то я еще немного обнаглею и спрошу.
Пытаюсь теперь сделать Enabled/Disabled делаю так:
EnableMenuItem(SubMenuH, MenuItemID, 0) - Enabled
EnableMenuItem(SubMenuH, MenuItemID, 1) - Disabled
Все работает, но только в том случае если это я делаю в процессе выполнения. А вот если изначально я задал меню (в design time) enabled=false,
то он его делает вроде как доступным, но код не выполняется ни с помощью апм ни нажатием мышкой. Как быть? Выручите меня еще раз?
Номер ответа: 22
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #22
Добавлено: 19.07.04 20:11
>Андрей Никитин, Народ
Можешь называть меня "Учитель" или "Повелитель".
Номер ответа: 23
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #23
Добавлено: 19.07.04 21:48
CyRax - прАсвЯтитель, а что? звучит )
Значит он его не делает Дизэйбл, а только ставит флажек Зетемненный...
при старте программа перебирай рекурсией все меню, подменю, смотри на флажки и выставляю нужный...
Номер ответа: 24
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #24
Добавлено: 20.07.04 02:30
Может так?
EnableMenuItem(SubMenuH, MenuItemID, MF_BYPOSITION OR MF_ENABLED) - Enabled
>CyRax - прАсвЯтитель, а что? звучит )
Если прочесть большие буквы, то получится А Я?
Ну как же я тебя мог позабыть то. И тебя конечно тоже ))
Номер ответа: 25
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #25
Добавлено: 20.07.04 10:28
EnableMenuItem(SubMenuH, MenuItemID, MF_BYPOSITION OR MF_ENABLED) и как результат -1. Даже не снимает затемнение
Номер ответа: 26
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #26
Добавлено: 20.07.04 11:01
Если сделал Enabled = False в design time, то чтобы активировать пункт меню, используй:
либо: EnableMenuItem(SubMenuH, MenuItemID, MF_ENABLED)
либо: EnableMenuItem(SubMenuH, 0, MF_BYPOSITION OR MF_ENABLED) ' где "0" - позиция твоего пункта меню, так как при наличие флага MF_BYPOSITION функция ожидает именно позицию, а не ID
Номер ответа: 27
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #27
Добавлено: 20.07.04 11:35
Так в том то и беда...
EnableMenuItem(SubMenuH, MenuItemID, MF_ENABLED) - сработает только если я до этого применил EnableMenuItem(SubMenuH, MenuItemID, MF_DISABLED)
А вот EnableMenuItem(SubMenuH, 0, MF_BYPOSITION OR MF_ENABLED) тоже не хочет работать. Он как бы снимает затемнение с меню, но при нажатии мышкой ничего не происходит (а ведь там есть процедура для выполнения).
Номер ответа: 28
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #28
Добавлено: 20.07.04 13:14
А галава тебе на что?
Попробуй сделать все пункты меню доступными в дизайн-тайме, а в Form_Load деактивируй нужные меню.
Номер ответа: 29
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #29
Добавлено: 20.07.04 13:22
Так мне надо именно так как я описал. Или ты думаешь, что я сосвсем уже не понимаю ничего? Была бы возможность я бы даже и не парился с этими апи. Не дружу я как то с ними.
Номер ответа: 30
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #30
Добавлено: 20.07.04 14:00
>to BeTe:
Вообщем такое дело...
Помучился я тут немного с GetItemInfo и SetItemInfo - максимум что удалось добиться это снять атрибут Grayed с пункта меню, отключенного в Дизайнере меню. Вернуть реакцию на событие Click не удалось. Складывается такое чувство, что ВБ сохраняет структуру меню у себя в памяти и снова включить обработчик кроме как через обращение к объектам ВБ (объекты меню) не получится...