Дата публикации статьи: 09.07.2003 00:00
Всплывающие меню являются очень важной частью графического интерфейса любой программы
под Windows платформу, так как несут существенное облегчение для пользователя,
хотя для программиста это всего лишь лишняя головная боль. И вот я решил осветить
эту тему. Наверное, многие программисты, сейчас читающие эту статью, посчитают,
что это просто (конечно, если вы знаете как). Так что эта статья для начинаюших,
а если заинтересует профессионалов, то это просто замечательно.
В вашем проекте (можете делать это уже в существующей программе, так как если
не будете путать, то особого вреда это не принесет), открываете редактор меню
(Ctrl+E) и если оно уже существует, то добавляете, а если не существует, или
вы создали новый проект, то создайте новое.
Все равно как будет называться! Но в поле Name, введите следующее: mnuMyPopUp.
Если не хотите, чтобы оно отображалось сверху в меню, то уберите отметку с Visible.
Добавьте столько пунктов, сколько вам нужно. Если же вы создали новый проект,
то хватит о двух – mnuClose и mnuEvent. Назовите их как хотите, но код при нажатии
первого вставьте следующий:
Private Sub mnuClose_Click()
End
End Sub
А во второй вставьте то, что душе угодно.
В вашем существующем проекте делайте меню, какое хотите. Но мой совет – не
очень большое, иначе оно может выскочить за края экрана.
Теперь самое главное – нужно показать меню. Я буду ориентироваться на Internet
Explorer, где меню появляется, когда кнопка мыши отпускается, поэтому нужно
событие MouseUp. А при нажатии любой кнопки меню исчезает (если кнопка правая,
то оно появляется опять), поэтому событие клик не подходит и лучше использовать
событие MouseDown, клик же можно использовать тогда, когда вы хотите чтобы при
нажатии правой кнопки меню появлялось и не исчезало до того как будет выбран
нужный пункт, тогда вставте код из MouseDown в события клика вашего меню.
Поместите на форму рамку Frame1, при нажатии на которую будет появляться меню
(если дорабатываете свой проект, то прикрепите этот код к вашим объектам).
Private Sub Frame1_MouseUp(Button As Integer, Shift As Integer, X As Single,
Y As Single)
If Button = 2 Then Me.PopupMenu mnuMyPopUp,8 , X, Y, mnuClose
End Sub
Ключевое слово Me используется, так как меню принадлежит этой форме.
2 – означает, что мы ждем нажатия правой кнопки, тогда вызывается MyPopUp –
наше меню, с помощью команды PopupMenu. Для Frame1, а в вашем проекте это может
быть и другой объект.
X,Y означают, что оно появляется там, где мы или юзер – кликнули. MnuClose
– означает, что оно будет подсвечено, а 8 – одна из констант.
Еще есть:
0 – меню будет под курсором и чуть-чуть влево
4 – меню будет точно под курсором
8 - меню будет под курсором и чуть-чуть вправо
А теперь общая формула:
Object.PopupMenu Name, [flags], x, y, [Bold]
А теперь вернемся к форме:
Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Me.mnuMyPopUp.Visible = False
End Sub
Опять повторюсь, что в вашем проекте это может быть для любого элемента.
Теперь можете дописать ваши собственные коды к событиям нажатия на другой(ие)
пункты меню. После чего запускайте приложение. Как я и обещал – все работает
– если кликнуть на фрейм, то появляется ваше меню!
Отступление:
Небольшая хитрость – можно создать невидимую во время исполнения форму, на
которой разместить все ваши меню, а вызывать их, написав вместо Me имя формы
с меню.
Если очень захотеть, то в меню можно натыкать картинок, для этого можно воспользоваться
одной из множества существующих библиотек. Если мне вдруг захочется, то я напишу,
как это сделать.
|