Дата публикации статьи: 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 имя формы с меню.

Если очень захотеть, то в меню можно натыкать картинок, для этого можно воспользоваться одной из множества существующих библиотек. Если мне вдруг захочется, то я напишу, как это сделать.