Создаем меню на стартовой форме

 

В этой статье я показал как можно заполнить формой всё MDI окно приложения Access и намекнул, что форма как нельзя лучше подходит для размещения логотипов, меню и т.п.

Сначала создадим процедуру для вызова из Form_Open:
 

Private Sub LabelLocation()
Dim lngFormHeight As Long ' для хранения высоты развернутой формы
Dim lngFormWidth As Long ' для хранения ширины развернутой формы
Dim I As Integer
Dim lngСмещение As Long ' для хранения величины смещения элементов меню
Dim lngLeftPoint As Long ' левая точка отсчета
 

' это код уже описан в статье Стартовая (главная) форма приложения
DoCmd.Echo False
DoCmd.Maximize

lngFormWidth = Me.InsideWidth
lngFormHeight = Me.InsideHeight
DoCmd.Restore
DoCmd.MoveSize 0, 0, lngFormWidth, lngFormHeight

Me.Detail.Height = 30000 'чтобы не ограничивало перемещение элементов по вертикали

' располагаем элементы оформления - в нижней части формы

' растягиваем надпись lblПодвал темно-зеленого цвета
lblПодвал.Left = 5
lblПодвал.Height = lngFormHeight \ 4 ' высота подвала 1/4 высоты формы
lblПодвал.Width = lngFormWidth
lblПодвал.Top = lngFormHeight - lblПодвал.Height - 5

' расположим txtРайон в правом нижнем углу
txtРайон.Left = lngFormWidth - (5670 + 400)
txtРайон.Height = 284
txtРайон.Width = 5670
txtРайон.Top = lngFormHeight - (txtРайон.Height + 100)
' подчеркнем поле txtРайон для красоты

' необходимо дать команду Формат -> На передний план, чтобы линия не перекрывалась полем txtРайон

linРайон.Left = lngFormWidth - (5670 + 350)
linРайон.Width = 5670
linРайон.Top = lngFormHeight - 150
' расположим рисунок picLogo в левом нижнем углу формы
picLogo.Left = 5
picLogo.Top = lngFormHeight - (picLogo.Height)
 

Элементы оформления мы раскидали по углам. Теперь приступим к созданию меню:

lngСмещение = 283 ' величина смещения - от нее зависит "наклон" лесенки

Тут необходимо немного объяснить как устроено меню. Каждый элемент меню состоит из 4 элементов - 2 рисунков и 2 надписей. Рисунок imgNUp содержит картинку по умолчанию, рисунок imgNDown показывает картинку, когда пользователь наводит мышкой на элемент меню. Картинки я заимствовал с сайта Stardock.com - у них там выложены простыни наборов иконок - мне больше ничего не надо было. Придал всей простыне зеленоватый цвет, аккуратно вырезал необходимые иконки, залил фон картинок цветом фона стартовой формы и разложил в элементы Image по пунктам.

Надпись lblNTitle содержит название пункта - оно же и подсвечивается, когда над элементом меню проводят мышкой. Надпись lblNComment содержит пояснительную информацию к пункту и не интерактивно.

Мое меню содержит 6 пунктов - Вы можете сделать любое количество - создайте рисунки и надписи по шаблону типа: imgNUp, imgNDown, lblNTitle, lblNComment увеличьте количество проходов (For I = 1 to N). Обратите внимание, расположение пунктов меню идет только по горизонтали, поэтому Вам придется сначала самим распределить пункты по вертикали, как Вам удобней. Еще замечание: при небольших разрешениях экрана или окна приложения Access темно-зеленая надпись lblПодвал может "залезть" под пункты меню - картинки, обладая светлым фоном, на темно-зеленой надписи они будут смотреться неопрятно.

' значение левого угла для вырвнивания пунктов меню по середине

lngLeftPoint = (lngFormWidth - Me.img1Up.Width) / 2

For I = 1 To intItemCount

' в разделе объявлений переменных модуля формы впишите

' Private Const intItemCount = 6 ' количество пунктов меню

' начнем центрировать панели меню цикличным перебором элементов
Me("img" & I & "Up").Left = lngLeftPoint
Me("img" & I & "Down").Left = lngLeftPoint
Me("lbl" & I & "Title").Left = lngLeftPoint + 750
Me("lbl" & I & "Comment").Left = lngLeftPoint + 750
lngLeftPoint = lngLeftPoint + lngСмещение
Next

DoCmd.Echo True ' включим прорисовку экрана
End Sub
 

Меню, что мы сейчас расположили на форме, является статичным меню. Как "оживить" меню, читайте в следующей статье.


Страница сайта http://interface.ru
Оригинал находится по адресу http://interface.ru/home.asp?artId=7437