Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Меню Добавлено: 19.07.04 13:27  

Автор вопроса:  BeTe

Ответить

  Ответы Всего ответов: 49  

Номер ответа: 31
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #38
Добавлено: 20.07.04 16:36
Всё прекрасно работает если руки не кривые.

mnu0 - Это в меню бар
|-Mnu1 - А это его субменю.

Private Sub Command1_Click()
 Cls
 ;Dim hMenu As Long, hSubMenu As Long
 hMenu = GetMenu(Me.hwnd)
 hSubMenu = GetSubMenu(hMenu, 0)
 Print hMenu
 Print hSubMenu
 
 ;Dim 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
 ;Dim hMenu As Long, hSubMenu As Long
 hMenu = GetMenu(Me.hwnd)
 hSubMenu = GetSubMenu(hMenu, 0)
 Print hMenu
 Print hSubMenu
 
 ;Dim 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-сайт: hw.t-k.ru
 Профиль | | #41
Добавлено: 20.07.04 17:11
CyRax, даже если руки не кривые, ничего не работает :))
А работает у тех, кто не проработал все варианты :))
Сразу в конструкторе выставь Enable=false, и попробуй запустить твой код...

Ответить

Номер ответа: 42
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #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 значить это возможно...

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам