[an error occurred while processing this directive]
[an error occurred while processing this directive]


Создание контекстных меню.

Иногда бывают очень нужны контекстные меню, т.е. меню, которе "вываливаются" при правом клике мышью. Благо, Бэйсик позволяет их создавать. Пример этот я сам не придумал, и вообще это не пример, а инструкция к созданию контекстных меню. Т.к. для новичков этот процесс может выглядеть сложновато, я попробую его разъяснить.

1. Сначала создаём простую форму.
2. Теперь нужно кликнуть на кнопочке Menu Editor вверху слева. Там меню нарисовано.
3. Щёлкните на нём.
4. Теперь нам нужно создать меню, которое и будет контекстным. Итак, в поле Caption вписываем какое-нибудь имя, неважно какое, оно чисто для вас, т.к. отображаться эта надпись нигде не будет. Введём, например, myPopup. В поле Name вводим к примеру mnuPopup и убираем галочку с Visible - делаем меню невидимым. Так, теперь надо ввести нужные пункты меню! Щёлкните на кнопке Next, а потом на стрелке вправо. Появятся четыре точки. Это значит, что следующий пункт находится в подуровне меню Popup, так сказать стаёт его состовляющим компонентом. В пустое поле Caption введите Show Message (показать сообщение) и в поле Name введите mnuSM. Кликните ещё раз на Next, но стрелку больше жать не надо - подуровень стоит теперь по умолчанию. В Caption введите Input your name, в Name вписываем mnuIYN, потом снова на Next. Теперь сделаем маленький визуальный эффект - введём разделитель между командами меню и командой выхода. Для примера запустите любую программу под Windows щёлкните на меню File и посмотрите вниз, комманда Exit всегда отделена сепаратором от всех остальных! Так сделаем такой же разделитель. В поле Caption вводим "-", только без кавычек (минус). В поле Name введите, что хотите это не нужно Вам вообще, например Sep. Теперь снова Next, и в поле Caption введите Exit, а в поле Name введите mnuExit. Всё, ваше меню готово! Осталось теперь только "нафаршировать" его кодом и прекрепить как контекстное. Жмите кнопку ОК!
5. Сделайте двой но щелчок на форме и откройте окно Code. В окошке, где стоит Load (событие формы стоящие по умолчанию) и выберитесобытие MouseUp. Т.е. событие происходит при отпускании кнопки мыши. Почему так объясню чуть позже. Передаваемые значения для подпрограммы MouseUp это Button, Shift, X, Y... но нам нужен Button. Этот аргумент возвращает значение, показывающее какaя кнопка была нажата. Значение 1 это левая кнопка, 2 - это правая. Так же есть бейсиковские константы vbLeftButton и vbRightButton, их значения непосредственно 1 и 2. Поэтому в событие MouseUp вписываем:

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
'проверяем: если нажата была правая кнопка, то цепляем к форме _
myPopup-меню, как PopUp
If Button = vbRightButton Then
    Me.PopupMenu mnuPopup, , X, Y, mnuExit
End If

End Sub

Теперь объясню строку

    Me.PopupMenu mnuPopup, , X, Y, mnuExit

отдельно. Во-первых, вот синтаксис:

object.PopupMenu menuname, flags, x, y, boldcommand

object     объект, к которому цепляем меню.

menuname   имя меню, которое хоти прицепить

flags      константа, описывающая место появление меню

x          расположение меню по иксу

y          расположение меню по игрику

boldcommand  пункт меню, который должен быть выделен жирным (только один пункт!)

Во-вторых, вот константы для flags:
 
 

Константы Значение Описание
vbPopupMenuLeftAlign  0 (по умолчанию) меню появляется слева под курсором.
vbPopupMenuCenterAlign  4 меню появляется по центру под курсором.
vbPopupMenuRightAlign  8 меню появляется справа под курсором.

Т.е. Вы можете подставлять как константы так и значения. А если Вы пропустите, то меню появится там, где оно стоит по умолчанию.
6. Теперь выберем событие MouseDown и впишем:

Private Sub Form_MouseDown(Button As Integer, Shift As _
Integer, X As Single, Y As Single)
    'при каждом нажатии контестное меню спрятывается
    Me.mnuPopup.Visible = False
End Sub

Теперь объясню почему так. Понимаете, этим я сымитировал точное появление контексного меню как в Windows Explorer. Обратите внимание - меню появляется только при отжатии правой клавиши, а при повтороном нажатии исчезает и появляется на новом месте.

Теперь там, где стоит форм, выберем mnuExit - появится событие на клик по пункту меню "Exit". Впишем внутрь только три бкувы:

Private Sub mnuExit_Click()
    End     'закрытие программы
End Sub

Теперь кликнем там же и выберем событие mnuIYN, затем введём:

Private Sub mnuIYN_Click()
    YourName = InputBox("Input yout name, please!") 'запрос имени
End Sub

Далее выберем mnuSM и впишем:

Private Sub mnuSM_Click()
    MsgBox "Hello, world!"
End Sub

Всё, теперь осталось запустить проект и проверить работоспособность контекстного меню!

Приятного пользования!


[an error occurred while processing this directive]


[an error occurred while processing this directive]