Archive for the ‘архитектура’ Category
3 вида меню в MS Access
Здравствуйте, уважаемые читатели.

То, что первым видит пользователь в программе — это меню. От него зависит (и не только) на сколько удобно будет работать с программой. С течением времени определенные подходы, которые я видел, классифицировались в следующие виды меню:
- формы с кнопками,
- кнопочная форма (на основе мастера),
- строка меню.
Я заметил, что «новички» начинают с форм с кнопками, затем открывают для себя кнопочные формы, а если встает задача сделать, как классическом текстовом редакторе, то переходят к строке меню или используют вместо нее панель инструментов. Конечно, бывают исключения и это только мои наблюдения.
Очень долгое время я думал, что самое лучшее и удобное меню – это строка меню. Но как показала жизнь, для каждого класса задач подходит свое меню.
1 Формы с кнопками
При этом подходе создается множество однотипных форм с кнопками или группой переключателей. Этот метод очень активно использовался в старых ДОСовских программах.
Это очень удобно использовать, когда пользователю при работе с одной из функций не нужна другая функция, которая вызывается из меню. Примером таких программ могут служить любые, в которых происходит потоковая регистрация и пользователю некогда переключаться между клавиатурой и мышкой.
К минусам такого способа можно отнести большое количество форм и муторность в изменении этого меню. Для пользователя может быть не удобно закрывать или сворачивать текущие формы, чтобы увидеть меню и открыть необходимую форму.
Очень не рекомендую использовать группы переключателей в качестве кнопок, переходить клавишами по такому меню не удастся.
2 Кнопочная форма (на основе мастера)
В этом варианте существует только одна форма и мастер редактирования пунктов. Из недостатков – при открытии любая формы, форма меню будет не видна.
При ближайшем рассмотрении оказалось, что это обыкновенная форма с х кнопками и надписями и с системной таблицей в качестве источника данных.
Не знаю почему, но мне этот вариант мне не нравится. Я лучше сам его реализую при необходимости.
3 Строка меню
Это мой самый любимый способ, т.к. очень просто изменять и все время на виду. Да и очень редко мне доводится разрабатывать программы для людей, не пользующихся мышкой.

Чтобы меню выглядело при запуске программы как на картинке, придется немножко пошаманить.
При создании меню (Сервис->Настройка), по умолчанию создается панель инструментов. По этому, выбрав созданное меню, необходимо нажать кнопку свойства. Необходимо настроить его следующим образом:

Я изменил тип на «Строка меню» и убрал галочку «Отображение и скрытие», чтобы пользователь ее не мог скрыть. Снимать все галочки не рекомендую, если будет желание то после этого обязательно проверьте, что из этого получилось и подойдет ли пользователю. А то можете получить проблему из-за меню. Также можно убрать перемещение, но только после того, как закончите сами ее настраивать.
Теперь необходимо зайти в Параметры запуска (Сервис –> Параметры запуска).

Тут я выбираю свою строку меню и убираю отображение окна базы данных. В таком режиме я и работаю.
Как вы заметили можно и свое контекстное меню сделать. Или убрать панели инструментов по умолчанию. Не рекомендую этим увлекаться. Например, панель инструментов отчетов ой как нужна, чтобы напечатать. А на панели инструментов для форм есть такая полезная штуковина как сортировка.
После того, как вы перезапустите свою БД, то всегда будет отображаться ваше меню. А стандартного не будет. Чтобы его отобразить/скрыть достаточно нажать Ctrl+F11. Очень удобно.
До встречи!
(с) Скоков Сергей
События
Здравствуйте, уважаемые читатели.
Поговорим в этом выпуске об очень интересной штуке — события. Я очень мало где видел их использование в MS Access. Но они очень сильно облегчают жизнь при работе, особенно с формами. У событий есть маленькое ограничение. Их могут использовать только объекты. Это означает, что их можно объявлять и получать только в модулях пользовательских классов, формах и отчетах.
Чтобы объявить событие необходимо в начале модуля класса (формы, отчета или пользовательского) написать:
Event ИмяСобытия( СписокАргументов )
Для использовании события необходимо объявить в начале модуля ссылку на объект и в списке (левый список, который расположен в редакторе кода) выбрать обявленный атрибут, в правом списке можно выбрать событие, если их несколько. В результате получим следующее:
Dim WithEvents Имя As Тип
Вызвать событие можно так:
RaiseEvent ИмяСобытия( Параметры )
Где это можно применить? Рассмотрим пример из жизни. На форме заказа есть поле клиента. В этом поле отображается, допустим, УНН и название клиента. Рядом с полем кнопка. По нажатию на кнопке отображается еще одна форма — список клиентов. Задача — выбрать клиента.
Одним из решений будет открыть модальное окно и тут возникает куча разных вариантов: записать напрямую с формы списка клиентов в поле формы заказов (очень плохая идея!!!), скрыть форму при нажатии пользователем кнопки «Ок» (Выбрать) и т.д.
При помощи событий получается простое и элегантное решение. Всего-то объявить на форме списка клиентов событие:
Event OnClientSelect(ByVal lId As Long)
На форме заказа это событие обработать:
Dim WithEvents m_frmKlientSepis As Form_frmKlientSpis
'--
Private Sub Kn_KlientSelect_Click()
'-- выбор клиента
'-- можно и так
'-- DoCmd.OpenForm "frmKlientSpis"
'-- Set m_frmKlientSepis = Forms("frmKlientSpis")
'-- но мне нравится этот вариант
Set m_frmKlientSepis = New Form_frmKlientSpis
m_frmKlientSepis.Visible = True
End Sub
Private Sub m_frmKlientSepis_OnClientSelect(ByVal lK_KLIENT As Long)
'-- клиент выбран пользователем
Me.K_KLIENT = lK_KLIENT
Set m_frmKlientSepis = Nothing '-- уничтожаем форму
End Sub
Подробности можете увидеть в примере. Чуть позже я расмотрю еще один пример — связные списки.
До скорых встреч!
(с) Скоков Сергей