Страница: 1 | 2 | 3 | 4 |
Вопрос: Меню
Добавлено: 19.07.04 13:27
Автор вопроса: BeTe
Ответы
Всего ответов: 49
Номер ответа: 31
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #31
Добавлено: 20.07.04 14:47
Разумеется структуру сохраняет, все что делается вне программы, т.е. не ей, изменяет только оболочку, т.е. интерфейс... А уже над всем другим трудится VB... Нужна документация... если вообще такая существует по VB...
А она должна быть, по всем классам, по всем объектам VB... что где находится и что куда "запихивается"
Номер ответа: 32
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #32
Добавлено: 20.07.04 14:59
Беда в том, что эта проблема не только в ВБ. Это грубо говоря везде так Я даже пытался через ModifyMenu, но все равно событие не происходит. Думал что я не правильно что-то делаю. И не смотря ни на что у меня осталось ощущение что это так.
P.S. И через SetItemMenuInfo тоже облом... Там есть такая структура MENUITEMINFO в ней значение fType. Я туда уже все что только можно позапихивал, но результат = 0
Номер ответа: 33
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #33
Добавлено: 20.07.04 15:27
>to BeTe:
>Беда в том, что эта проблема не только в ВБ. Это грубо говоря везде так...
А вот как раз и не везде. Думаю проблема как раз в ВБ, так как в С++ (библиотека WTL - чистый АПИ) работа с меню через АПИ дает тот результат, которого и ждал . А может я не прав?
Номер ответа: 34
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #34
Добавлено: 20.07.04 15:50
Ну не знаю, может быть и так я никогда не писал на С. Но вот для примера я взял прогу на С( уже откомпилиную правда) и проделал с ней эти же операции (тока хендл окна конечно пришлось искать). И как ты думаешь какой результат? затемнение конечно нялось но на событие не реагирует так же как и ВБ. Но ведь на самом то деле должно реагировать. Может в дизайн тайм ставится не Disabled, а Grayed который не и не дает (не знаю почему) сработать.
Да и вот еще мысля мне пришла в голову. Ведь обработчик события MenuItem_Click должен срабатывать вне зависимости от состояния меню. Или может не так? То-есть он получает сообщение от элемента меню, но не смотрит же на его флаги.
Номер ответа: 35
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #35
Добавлено: 20.07.04 16:05
>Ведь обработчик события MenuItem_Click должен срабатывать вне зависимости от состояния меню...
А вот тут можно попробовать поиграться с субклассингом - может быть есть пути...
Номер ответа: 36
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #36
Добавлено: 20.07.04 16:24
Ну я думал об этом, но это для меня потемки ((
Номер ответа: 37
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #37
Добавлено: 20.07.04 16:32
вот шо я нарыл в своем справочнике:
MF_GRAYED - Disables the specified menu entry and draws it in light gray. Not compatible with the VB Enabled property.
А "обратного" флага почему-то нету. ((
Номер ответа: 38
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #38
Добавлено: 20.07.04 16:36
Всё прекрасно работает если руки не кривые.
mnu0 - Это в меню бар
|-Mnu1 - А это его субменю.
Private Sub Command1_Click()
Cls
 im hMenu As Long, hSubMenu As Long
hMenu = GetMenu(Me.hwnd)
hSubMenu = GetSubMenu(hMenu, 0)
Print hMenu
Print hSubMenu
 im SmInfo As MENUITEMINFO
SmInfo.cbSize = Len(SmInfo)
Print GetMenuItemInfo(hSubMenu, 0, True, SmInfo)
Print SmInfo.fState
SmInfo.fMask = MIIM_STATE
SmInfo.fState = MFS_DISABLED
Print "SetMenuItemInfo="; CBool(SetMenuItemInfo(hSubMenu, 0, True, SmInfo))
End Sub
Private Sub Command2_Click()
Cls
 im hMenu As Long, hSubMenu As Long
hMenu = GetMenu(Me.hwnd)
hSubMenu = GetSubMenu(hMenu, 0)
Print hMenu
Print hSubMenu
 im SmInfo As MENUITEMINFO
SmInfo.cbSize = Len(SmInfo)
Print GetMenuItemInfo(hSubMenu, 0, True, SmInfo)
Print SmInfo.fState
SmInfo.fMask = MIIM_STATE
SmInfo.fState = MFS_ENABLED
Print "SetMenuItemInfo="; CBool(SetMenuItemInfo(hSubMenu, 0, True, SmInfo))
End Sub
Private Sub Mnu1_Click()
MsgBox "I'm Clicked"
End Sub
Номер ответа: 39
Автор ответа:
Андрей Никитин
ICQ: 325172082
Вопросов: 3
Ответов: 81
Профиль | | #39
Добавлено: 20.07.04 16:53
>to CyRax:
Все как бы прекрасно , только вот твой код перестает работать (не вызывается обработчик Mnu1_Click(...)) если у пункта меню в Дизайнере меню снять галку Enbled. А человек спрашивал как раз про это.
А про кривые руки... Смотрю щас на свои... даже линейку приложил... вроде не такие уж и кривые...
Номер ответа: 40
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #40
Добавлено: 20.07.04 17:03
Да славится имя просвятителя, но значение констант
MIIM_STATE
MFS_ENABLED
не подскажешь? )))
Номер ответа: 41
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #41
Добавлено: 20.07.04 17:11
CyRax, даже если руки не кривые, ничего не работает )
А работает у тех, кто не проработал все варианты )
Сразу в конструкторе выставь Enable=false, и попробуй запустить твой код...
Номер ответа: 42
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #42
Добавлено: 20.07.04 17:16
Private Const MIIM_STATE = &H1
Private Const MF_ENABLED = &H0&
Private Const MFS_ENABLED = MF_ENABLED
>Андрей Никитин
Действительно лажа. Остаётся только это делать в рантайме. Если конечно это твоя прога.
Номер ответа: 43
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #43
Добавлено: 20.07.04 17:27
И все таки решение где-то рядом...
вот смотрите описание MENUITEMINFO
MFS_DISABLED: Entry is disabled.
MFS_ENABLED: Entry is enabled.
MFS_GRAYED: Entry is grayed and disabled.
Видимо в Design Time басик ставит именно Grayed, а мы всевозможными способами убираем Disabled но не Grayed. Только вот как убрать эту мерзость.
Номер ответа: 44
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #44
Добавлено: 20.07.04 17:52
Это не имеет значения
Private Const MFS_GRAYED = &H3&
Private Const MFS_DISABLED = MFS_GRAYED
Номер ответа: 45
Автор ответа:
BeTe
Вопросов: 6
Ответов: 30
Профиль | | #45
Добавлено: 20.07.04 18:06
Тогда я теряюсь в догадках об истинных причинах проблемы.
Но ведь если Басик снимает Disabled значить это возможно...