Создание
контекстных меню
Иногда
бывают очень нужны контекстные
меню, т.е. меню, которе
"вываливаются" при правом
клике мышью. Благо, Бэйсик
позволяет их создавать. Пример
этот я сам не придумал, и вообще
это не пример, а инструкция к
созданию контекстных меню. Т.к.
для новичков этот процесс
может выглядеть сложновато, я
попробую его разъяснить.
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
Всё,
теперь осталось запустить
проект и проверить
работоспособность
контекстного меню!
Приятного
пользования!
|