Страница: 1 |
Страница: 1 |
Вопрос: Проблема с popup-меню
Добавлено: 28.09.04 13:41
Автор вопроса: Comanche
По-моему, это старые грабли. Но всё равно не помню, как с ними бороться. Смысл такой: есть форма с меню, загружаем форму, по щелчку на теле формы вызываем это меню через PopupMenu. В появляющемся меню - единственный пункт: "Показать вторую форму". Жмём его - появляется вторая форма, кстати тоже имеющая своё меню. Так вот, если эта вторая форма вызвана модально (Show vbModal), то из её кода никаким боком не удастся вызвать её меню через PopupMenu!
Наверное, запутанно изложил... если непонятно, то могу демо-проект выложить. Хотя это очень старые грабли, имхо.
Я знаю, что в каждый момент в системе может отображаться только одно всплывающее ("popup") меню. И похоже, что при модальном отображении второй формы система "думает", что первое popup-меню ещё не ликвидировано. Пробовал использовать таймер - по фигу. Как-то ведь это решалось, кажется...
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #1
Добавлено: 28.09.04 13:46
Почему-же невозможно!!! Очень даже просто и возможно!!! Вот надо только во второй форме указать полный путь к меню.
Пример:
а не popupmenu menu1
Номер ответа: 2
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #2
Добавлено: 28.09.04 13:49
Всё-таки я изложил запутанно, раз ты не понял.
Поясняю:
На второй форме нужно отображать ЕЁ ЖЕ меню, а не меню из первой формы.
Номер ответа: 3
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #3
Добавлено: 28.09.04 14:03
В общем я выложил проект, демонстрирующий описанную проблему, вот сюда:
http://formtoini.narod.ru/Downloads/PopupMenu_Problem.zip
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 28.09.04 19:06
VB этого нельзя... если так сделаешь, у тебя вылезет ошибка... Попробуй на АПИ меню и через TrackPopupMenuEx его вызвать... Сработать должно...
Номер ответа: 5
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #5
Добавлено: 28.09.04 19:38
2sne:
Ошибка не вылазит - просто меню не отображается и всё. См. проект (по ссылке).
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 28.09.04 20:16
Я в курсе... но вызвать то его все-же можно, поверь мне, я этого добивался
Номер ответа: 7
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #7
Добавлено: 28.09.04 23:33
Через АПИ можно, это даже не обсуждается. Вообще всё можно через АПИ ) Я-то точно помню, что можно было как-то извернуться и уйти от описанной проблемы только средствами VB.
Да поздравляю я тебя с этим отрадным фактом, и просто от души за тебя радуюсь. И верю, конечно же, твоим словам ) Однако, надо бы поделиться знанием!
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 28.09.04 23:37
Боюсь что в твоем случае это поможет не многим, т.к. у меня были модальная форма и иконка в области уведомлений, но фишка то не в этом, все события то все равно получаются на форме... Дело в том что при таком раскладе меню так же не покажется а вот ошибка VB вылезет... Знание знанием но оно бесполезно
Номер ответа: 9
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #9
Добавлено: 29.09.04 10:54
Я те на мыло кинул! Смотри! А твой примерчик сейчас скачаем!!!
А вот пока:
Form1.frm
_____________
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 165
ClientTop = 735
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.Menu mnu
Caption = "Menu 1"
Begin VB.Menu mnuItem1
Caption = "SUb item 1"
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub mnuItem1_Click()
Form2.Show vbModal
End Sub
Form2.frm
_______________
VERSION 5.00
Begin VB.Form Form2
Caption = "Form2"
ClientHeight = 3195
ClientLeft = 165
ClientTop = 735
ClientWidth = 4680
LinkTopic = "Form2"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.Menu menu
Caption = "&menu"
Begin VB.Menu mnuItem1
Caption = "Item 1"
End
End
End
Attribute VB_Name = "Form2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Form_Click()
PopupMenu menu
End Sub
Project1.vbp
________________
Type=Exe
Form=Form1.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINNT\system32\stdole2.tlb#OLE Automation
Form=Form2.frm
Startup="Form1"
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName=""Azerenerji" JSC"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
[MS Transaction Server]
AutoRefresh=1
Номер ответа: 10
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #10
Добавлено: 29.09.04 14:19
2RA:
в присланном примере первое меню не вызывается как "popup-menu" - вот потому оно у тебя и работает. Вызови его через PopupMenu - и получишь мою проблему.
Номер ответа: 11
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #11
Добавлено: 29.09.04 15:16
Чудо! У меня не вызвается никакой збой! :? Просто у меня не открывает меню
МОжет у меня сервис пак 5-ый
По я придумаю как его обойти!!!
ТРудимся!!! Удачи всем!
Номер ответа: 12
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #12
Добавлено: 29.09.04 15:49
А я нашел в чём проблема!
ПРоблема в том что, когда форма загружается модально, то все операции на главной форме (форма-мама) останваливаются и действие переходит на дочерную, поетому он и не выводится во втором окне. Потому что ПопАп меню вызываеся лиш раз и не законцив свой сеанс не может вызватся в другом месте! ПРЕДЛАГАЮ ВОСПОЛЬЗОВАТСЯ ТАЙМЕРОМ!
Когда кликнем на меню, он активизируется (и начнёт считывать) когда он досчитает, наше меню законцит свое действие и запустит действие с таймера! Я код вышлю сейчас!
Номер ответа: 13
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #13
Добавлено: 29.09.04 15:51
У МЕНЯ ПОЛУЧИЛОСЬ!!!
Но главное, не забудте после выполнения функции отключить таймер!!! А-то он заного вызовет второе окно!
ВОТ ПРИМЕР!!!
[CODE]Private Sub Form_Click()
PopupMenu mnu1
End Sub
Private Sub Sub_Click()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Form2.Show vbModal, Form1
Timer1.Enabled = False
End Sub[/CODE]
Номер ответа: 14
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #14
Добавлено: 29.09.04 15:54
ДА забыл указать! Sub у меня название суб-меню (подменю) главного меню, который называется mnu1
Я ГЕНИЙ )
Номер ответа: 15
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #15
Добавлено: 07.10.04 10:57
2 RA: Пожалуйста, прочитай курс русского языка... А-то такое ощущение,
что уроки русского ты в школе упорно прогуливал