Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: popUp Добавлено: 14.11.03 10:01  

Автор вопроса:  cresta
Создаю в runtime popUpMenu. Меню появляется, все хорошо и красиво, но только как и где можно отловить, какой пункт меню будет выбран? Можно конечно через GetCursorPos в момент нажатия пункта меню, но может есть что попроще и правильнее

Ответить

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

Номер ответа: 1
Автор ответа:
 Malyav



ICQ: 8440085 

Вопросов: 15
Ответов: 117
 Web-сайт: malyav.narod.ru
 Профиль | | #1
Добавлено: 14.11.03 14:34

У меня есть небольшой опыт с попап. Я обычно делаю его еще при разработке.

mnuPopUp и к нему подменю

itmSub(0) ставлю индекс для добавления пунктов в рантайм

Потом просто щелкаю по пункту, открывается процедура

private sub itnSub_Click(index as long)

И вот в ней я потом все нажатия отлавливаю ориентируясь на индекс.

mnuPopUp невидимое. При щелке правой кнопкой

PopUpmenu mnuPopup

Ответить

Номер ответа: 2
Автор ответа:
 mzx



ICQ: 259560026 

Вопросов: 21
Ответов: 143
 Профиль | | #2 Добавлено: 14.11.03 15:29

Видимо красивее не получится.

Я только пример с GetCursorPos нашел. Но я так понял этот вариант тебя не устраивает.

Ответить

Номер ответа: 3
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #3 Добавлено: 14.11.03 15:48

У меня MDI-приложение и если создавать меню в Design, то потом оно выпирает меню родительского окна(даже если оно PopUp), поэтому только в рантайм. Единственный контрол, где я смог обработать нажатия на пункты меню- это таймер

Сделано вот так, но почемуто пункты меню ( в смысле случаи  в операторе Case) выбираются нерегулярно, иногда не срабатывает, хотя нажатие меню было, но код под этот пункт не выбирается, почему - не допру никак, причем чем меньше номер пункта, тем чаще не срабатывает, (инервал таймера минимальный - 1мс) помогите разобраться в чем дело:

Private Sub Часы1_Timer()
    GetCursorPos Pt
    mnuItem = MenuItemFromPoint&;(Me.hWnd, hMenu, Pt.x, Pt.y)
    If mnuItem >= 0 Then 'если мышь над меню
        oldItem = mnuItem 'то запомнили над каким
    Else 'если  меню уже исчезло
        If mnuItem < -1 And oldItem > -1 Then 'и если меню было выбрано
            Select Case oldItem
                Case 0
                'здесь код для первого пункта
                    Me.Caption = oldItemа
                Case 1
                'здесь код для второго пункта
                    Me.Caption = oldItem
                Case 2
                'здесь код для третьего пункта
                    Me.Caption = oldItem
                Case 3
                'здесь код для четвертого пункта
                    Me.Caption = oldItem
                Case 5
                'здесь код для шестого пункта
                    Me.Caption = oldItem
            End Select
        End If
    End If
End Sub

Может кто-нибудь знает, в чем дело, подскажите

Ответить

Номер ответа: 4
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 15.11.03 00:01

Я вообще ничего не понял. Тебе нужно именно своё меню (навороченное) или тебе подходит и стандартное, но тебя не устраивает, то что парентское меню подменяется дочерним.

Я делал лишь одно приложение MDI и единственное, что меня парило так это то, что я использовал чужой контрол (чтобы шрифты в попупе были другие), а если бы я использовал стандартные менюшки проблем - 0.0 было бы.

И ещё. Таймер я бы на твоём месте не использовал - прога почти всегда будет ненадёжной. Я его использовал в своём контроле последний раз. См. вопрос "Бешенный контрол". В следующий раз буду использовать хук: он хоть сложнее, но надёжнее.

Так что если тебя устраивают стандартные меню - пиши, Else ничем не могу помочь... попуп через API я ещё не пробовал...

Ответить

Номер ответа: 5
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #5 Добавлено: 15.11.03 08:07

Да в том  и проблема, что меню делаю стандартное, но не хочу, чтобы оно подменяло парент-меню. А с кодом разобрался:

        If mnuItem < -1 And oldItem > -1 Then 'и если меню было выбрано
В этои строке ошибка - надо if mnuItem<0  и всё запахало как надо.

А с таймером - потому, что событие MouseMove и MouseDown больше негде обработать, т.к. меню создается в рантайме. А кто такой Hook я не знаю, один раз попробовал, но ничего не понял.

Ответить

Страница: 1 |

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



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