Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Горев “Эффективная работа с СУБД”.pdf
Скачиваний:
208
Добавлен:
28.06.2014
Размер:
4.71 Mб
Скачать

converted to PDF by HupBaH9I

mywksp.Close Me![Кнопка1].Enabled = True DoCmd.OpenTable "account"

DoCmd.GoToRecord acTable, "account", acLast

Обратите внимание на то, что объекты rstOrd, rstAc и mywksp закрываются с помощью имеющегося у них метода Close. Если их не закрывать, то при нескольких повторных использованиях формы "Прием заказов" появится сообщение, что Access больше не может открыть таблицу.

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

Private Sub cmbRback_Click() mywksp.Rollback rstOrd.Close

rstAc.Close

mywksp.Close Me![Кнопка1].Enabled = True Me!cmbCust.Enabled = False Me!txtFam.Enabled = False Me!cmbAc.Enabled = False

End Sub

9.3. Разработка управляющего меню

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

В этом параграфе мы рассмотрим вопросы, связанные с разработкой меню для управления работой приложения.

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

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

Заголовок меню должен включать максимально ясную информацию о его назначении. Старайтесь использовать общеупотребительные термины, не используйте легкозабываемые сокращения.

Структура меню должна соответствовать частоте выполнения тех или иных действий,

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

Старайтесь выделять функционально связанные группы команд с помощью разделителей.

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

Для часто используемых команд в меню определяйте горячие клавиши. Это позволит пользователю выполнять такие команды, не отрывая рук от клавиатуры.

Разработка меню в Visual FoxPro

Для разработки меню в Visual FoxPro проще всего использовать Конструктор меню (Menu Designer). Интересно отметить, что с помощью Конструктора меню можно не только разрабатывать меню для пользовательского приложения, но и настраивать меню Visual FoxPro для наиболее эффективной работы программиста.

В проекте выберем вкладку Other, найдем заголовок Menus и дадим команду New. На экране появится окно Конструктора меню, внешний вид которого приведен на рис. 9.16. На этом же рисунке поясняются основные элементы этого Конструктора. Обратите внимание, что

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

converted to PDF by HupBaH9I

Visual FoxPro. После того как мы опишем с его помощью меню, необходимо сгенерировать программу. Файл с этой программой будет иметь расширение MPR, а файл после компиляции - MPX. Этот файл и следует запускать для работы с созданным меню. Недаром раньше такой инструмент программиста так и назывался - Генератор. Для генерации программы в меню Menu необходимо выбрать команду Generate.

Рис. 9.16. Конструктор меню в Visual FoxPro

Если в вашу задачу входит настройка главного меню Visual FoxPro, то самое подходящее в этом случае решение - в меню Menu выбрать команду Quick Menu. После этого в Конструкторе меню в качестве заготовки мы получаем копию существующего меню Visual FoxPro, с которым можем проделывать любые изменения, включая удаление каких-либо меню и команд, добавление новых и т. д. Не стоит слишком усердствовать с удалением, помните, что, изымая какую-либо команду из меню, вы теряете предусмотренную наличием этой команды функциональность. Например, удалив меню Edit, вы не сможете использовать стандартные возможности переноса, копирования и поиска при работе с текстом. В соответствии со

сложившимися правилами включать свои собственные меню в главное меню следует перед меню Help, которое должно оставаться последним.

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

Запишем заголовки пользовательского меню в столбце Prompt. Если после выбора меню на экране должен появиться список команд, выберем в столбце Result пункт Submenu и щелкнем на появившейся справа кнопке Create. Мы окажемся на следующем уровне меню, где запишем заголовки команд, входящих в это подменю. Если структура нашего меню предусматривает еще один уровень вложения, повторите указанные действия. Для перехода с уровня подменю на верхний уровень необходимо выбрать его из комбинированного списка Menu Level. Если вы хотите выделить группы команд, поместите в столбце Prompt в строке, разделяющей группы команд меню, знаки \-. Вы всегда можете проверить, как визуально будет выглядеть ваше меню на экране, нажав клавишу Preview.

Для быстрого перемещения по меню можно назначить для его команд "горячие клавиши". Нажимая соответствующую алфавитную клавишу, пользователь может сразу выполнить нужную команду или перейти в какое-либо меню. Выбранная клавиша в меню подчеркивается. Для задания такой клавиши перед нужной буквой необходимо поставить знаки \<<. Например, если мы хотим, чтобы команда Счет выполнялась при нажатии клавиши С, мы должны заголовок этой команды написать в виде \<<Счет. После этого в меню буква С будет подчеркнута. Естественно, в одном меню не может быть несколько команд, использующих в качестве "горячих клавиш" одну и ту же букву. К сожалению, при использовании русских заголовков для меню не все так просто и, чтобы можно было реализовать описанные возможности, необходимо прочитать следующий абзац.

converted to PDF by HupBaH9I

Наиболее часто выполняемым командам в меню можно присвоить клавиатурные комбинации.

Для этого напротив соответствующего заголовка необходимо щелкнуть мышкой на кнопке в колонке Options. На экране появится диалоговое окно Prompt Options, с помощью которого для меню можно задать дополнительные условия. Внешний вид этого окна с необходимыми комментариями приведен на рис. 9.17. Щелкнем на поле проверки Shortcut, появится диалоговое окно Key Definition. Нажмем нужное сочетание клавиш. Их обозначение появится в поле Key Label. Символы в поле Key Text будут написаны рядом с командой меню, их можно отредактировать. Командам меню принято присваивать клавиатурные комбинации, начинающиеся с клавиши Ctrl. В клавиатурных комбинациях Visual FoxPro использует скан-код клавиши, поэтому не имеет значения текущий регистр и не важно, включена ли русская или латинская раскладка клавиатуры. Если вы используете знаки \<< для меню верхнего уровня, Visual FoxPro автоматически поместит в поле Key Label сочетание клавиш Alt и выделенной этими знаками буквы. Если буква русская, при запуске меню произойдет ошибка. Поэтому надо открыть окно Key Definition и вручную в поле Key Label исправить русскую букву на соответствующую той же клавише латинскую.

Рис. 9.17.

Вы можете регулировать доступ к тем или иным командам меню с помощью поля проверки Skip For, находящегося в диалоговом окне Prompt Options. Если вы щелкнете на этом поле, появится уже знакомое вам окно Построителя выражения, в котором можно сформировать условие доступа к этой команде меню. Если условие будет равно .F., команда будет доступна, если .T. - недоступна. Наиболее часто эта возможность используется для регулирования доступа различных пользователей прикладной программы к тем или иным ее функциям.

В связи с тем, что Visual FoxPro поддерживает редактирование на месте OLE-объектов, с помощью поля проверки Negotiate мы можем для меню верхнего уровня указать, где меню будет располагаться после активизации OLE-сервера. По умолчанию действует установка None - меню убирается при редактировании OLE-объекта.

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

В окне Prompt Options осталось еще одно поле проверки - Pad Name, о котором можно было бы ничего и не говорить, если бы мы не использовали русские заголовки для меню. При

проектировании меню Конструктор автоматически присваивает имена меню на основании их заголовков. В то же время Visual FoxPro, как и его предшественники, на дух не переносит русских названий в меню. Не будем раздражаться по столь мелкому поводу, щелкнем на поле проверки Pad Name и изменим русское название на латинское.

Для выполнения каких-либо действий при выборе пользователем команд меню необходимо в колонке Result для каждой команды меню назначить команду Visual FoxPro, функцию или процедуру. Для назначения команды Visual FoxPro в столбце Result выберите пункт Command и наберите соответствующую команду в текстовом поле справа. Например, DO Log_user. Если указанная в этой команде процедура находится в блоке Cleanup Конструктора меню (о нем мы расскажем чуть позднее), то команду следует записать в виде: DO Log_user IN Main, где Main -

converted to PDF by HupBaH9I

это имя файла меню.

Для задания при выборе команды меню выполнения какой-либо процедуры, в случае, когда меню не имеет подменю, необходимо в колонке Result выбрать пункт Procedure. Щелкнуть на кнопке Create и в появившемся окне поместить необходимый код.

В ряде случаев с помощью команд меню могут выполняться какие-то сходные для всех команд этого меню действия, не требующие написания большого объема кода. В этом случае мы можем задать при выборе команды меню выполнение одной процедуры для меню, имеющего подменю. Для этого все команды меню должны в колонке Result иметь пункт Bar#, который не предусматривает привязки к команде какого-то действия. В списке Menu Level выберем соответствующий уровень меню. Из меню View Visual FoxPro выберем команду Menu Options, после чего на экране появится одноименное диалоговое окно. Нажмем кнопку Edit и наберем код в соответствии с приведенным ниже шаблоном:

<<Код, выполняемый при выборе любой из команд>> DO CASE

CASE BAR() = 1

<<Код, выполняемый для первой команды в меню>> CASE BAR() = 2

<< Код, выполняемый для второй команды в меню>>

...

ENDCASE

Функция BAR() возвращает номер выбранной команды меню. Вы можете при необходимости присвоить свои номера командам меню, использовав поле справа от колонки Result.

Общие установки для системы меню можно выполнить, выбрав из меню View Visual FoxPro команду General Options. После появления диалогового окна с таким же названием, приведенного на рис. 9.18, можно написать программный код, который будет выполняться перед расположением меню на экране, выбрав поле проверки Setup. Процедуры, которые вы используете для выполнения команд меню, и действия, которые необходимо выполнить после исчезновения меню с экрана, можно записать, выбрав поле проверки Cleanup. С помощью группы кнопок выбора Location можно задать условия расположения меню после его запуска:

Рис. 9.18.

Кнопка Replace - заменяет существующую систему меню.

Кнопка Append - добавляет данное меню к существующей системе.

Кнопка Before - располагает меню перед указанным в появляющемся справа списке меню.

Кнопка After - располагает меню после указанного в появляющемся справа списке меню.

Соседние файлы в предмете Программирование на Delphi