Процедуры, запускаемые событиями в форме
Во время создания формы в предыдущем подразделе мы делали двойной щелчок мышью по созданной нами кнопке, и открывалось окно. В это окно мывводили команду. Для чего все это? И как работает?
Дело в том, что одной из особенностей программирования приложений всовременных операционных системах является возможность связывать вызовпрограммных процедур с событиями в системе. Программные средства, созданные таким образом, и называют соответственно приложениями, управляемымисобытиями. Событием в системе считается и нажатие кнопки, и выбор пункта всписке, и открытие окна, и изменение его размера, и завершение работы приложения, и другие подобные действия. При возникновении события, если естьпроцедура, привязанная к этому событию, то она вызывается на выполнение.В практическом примере предыдущего подраздела мы создали процедуру, состоящую из одной команды, которая вызывается при щелчке по кнопке. Введенная нами команда Thisform.Release закрывает текущее окно формы.
При создании формы в Form Designer (Дизайнере форм) для того, чтобыпопасть в окно ввода процедуры для какого-либо элемента окна, достаточносделать двойной щелчок мышью по этому элементу, размещенному в форме.В верхней части открывшегося окна, справа от слова Object (Объект) показанэлемент, для которого вы пишете процедуру, а справа от слова Procedure (Процедура) показано событие, при возникновении которого будет вызвана вашапроцедура. Оба этих поля являются раскрывающимися списками, а значит,позволяют сменить установленные в них значения. Таким образом, мы можемнаписать процедуру реакции на событие одного элемента, а затем, пользуясьраскрывающимся списком, перейти к написанию процедуры для другого элемента или выбрать событие, по которому будет выполняться процедура, отличное от того, которое вам предлагалось вначале. Например, если вы хотите,чтобы выдавалось сообщение при щелчке по вашей кнопке правой клавишеймыши, выберите соответствующее событие (рис. 4.19), а затем введите команду вывода сообщения на экран (рис. 4.20).
Из таких процедур обработки событий можно обращаться к различным элементам окна формы и менять их свойства. Когда вы вводите ключевое словоThisForm, а затем точку, Visual FoxPro 9 выдает список свойств, методов (процедур управления) и элементов текущей формы. Когда вы щелкаете по тому илииному пункту этого списка, появляется сообщение с пояснениями. Если, выбрав какой-либо элемент окна формы, ввести точку, имя выбранного элементапоявится после ключевого слова ThisForm через точку, а после этого появитсясписок свойств элемента. При вводе знака равенства выбранное свойство элемента или окна формы появится после ключевого слова ThisForm через точку, а после этого появится введенный вами знак равенства. Следом за знакомравенства можно ввести значение, которое вы хотите присвоить свойству.Например, если мы хотим динамически изменить заголовок окна формы, например хотим вывести в заголовке текст «Новый документ», надо ввести следующую команду:
Если хочется вывести значение в текстовое поле, надо применить следующую конструкцию:
Например:
Можно динамически запретить или разрешить редактирование поля. Например, так:
Рассмотрим некоторые события формы:
> Load - в момент возникновения события ни один объект формы еще несоздан, поэтому задавать какие-либо свойства элементов формы ещерано. Для чего выгодно использовать это событие? Например, можнооткрыть необходимые для формы базы данных и свободные таблицы;
> Init - элементы формы уже созданы. Самое время задать начальные свойства для объектов формы и, например, заполнить списки значениями;
> Activate - активирование формы. Может происходить многократно вответ на действия пользователя. Размещение команд, отрабатывающих вответ на возникновение этого события, надо производить крайне осторожно, а лучше избегать этого;
> Deactivate - событие, обратное предыдущему. Рекомендации по использованию те же;
> Unload - событие при уничтожении формы. В этот момент все элементы формы уже уничтожены.
Таким образом, мы прикоснулись к вопросу объектно-ориентированногопрограммирования. Объектно-ориентированное программирование (ООП) - способ программирования, отличный от традиционного процедурного подходав программировании, позволяющий воспринимать приложение как наборобъектов, взаимодействующих друг с другом. Объекты имеют свойства, реагируют на события и имеют набор методов для управления объектом. В объектно-ориентированном программировании широко распространено понятиекласса. Класс - поименованная совокупность объектов, методов, свойств иобработчиков событий определенного назначения. Например, к какому классу принадлежит любой объект вашей формы, да и сама форма, можно увидеть
в окне свойств объекта, если посмотреть значение свойства Class. Глубоковникать в технологию работы с классами, наследованием и прочими «штучками» объектно-ориентированного программирования мы не будем. К большому сожалению, объем книги не позволяет это сделать. Некоторые сведения о классах и библиотеках классов содержатся в разделе «Использованиеклассов» (см. далее).
Попробуем на практике
Попытаемся выполнить создание окна формы для отображения содержимого записей созданных нами таблиц. Будем показывать следующие сведения длякаждого сотрудника: табельный номер, имя, адрес, дату рождения, должность,оклад. Выполним следующие действия:
1. Скопируйте из созданной нами во второй главе папки example в папкуDATA (находящуюся в папке InStaff) файлы Persons.dbf, Persons.cdx,Staff.dbf, Id_staff.idx.
2. Смените текущую папку, выполнив в окне Command команду
CD ?
Откроется окно, в котором нужно найти созданную нами ранее папкуInStaff.
3. Если окно проекта не открыто, выберите команду Open (Открыть) изменю File (Файл). В появившемся окне открытия файла выберите файлпроекта, который мы создали ранее.
4. Щелкните мышью по папке Forms (Формы), находящейся в папке Documents (Документы), а затем по кнопке New (Новый). Появится диалоговое окно, представленное на рис. 4.13.
5. Выберите кнопку New Form (Новая форма). Появляется окно Form Designer (Дизайнера форм), показанное на рис. 4.14.
6. В появившемся окне свойств окна формы (таком, как показано на рис. 4.16)установите следующие настройки:
- BorderStyle - 1-FixedSingle;
- Caption - Информация о сотруднике;
- MaxButton - .F.-False;
- MinButton - .F.-False.
Для установки соответствующей настройки щелкните по ней в списке настроек и введите значение или выберите из списка в поле над спискомсвойств.
7. Пользуясь инструментами на панели инструментов Form Designer (Дизайнера форм), разместите на поле формы названия полей Имя, Адрес,
Таб. номер, Дата рождения, Должность, Оклад. Для нанесения надписей используйте инструмент
8. Пользуясь инструментами на панели инструментов Form Designer (Дизайнера форм), разместите на поле формы поля, куда будут выводитьсязначения. Для нанесения надписей используйте инструмент. Установите значение свойства ReadOnly для всех полей в .Т.-True.
9. Создайте кнопки Предыдущий, ОК, Следующий, пользуясь инструментом. Должно получиться, как на рис. 4.21.
10. Сделайте двойной щелчок по свободному месту' созданной вами формы(то есть не по какому-либо элементу, а по самой поверхности формы).
11. Проверьте, что в появившемся окне справа от слова Object (Объект)стоит значение Forml, а справа от слова Procedure (Процедура) - значение Init. В противном случае поменяйте значения на указанные.
12. В окне введите команды:
13. Закройте это окно. Если при закрытии окна появится запрос на сохранение файла, ответьте Да (Yes).
14. Сделайте двойной щелчок по созданной вами в форме кнопке ОК.
15. В появившемся окне введите команды:
16. Закройте это окно. Если при закрытии окна появится запрос на сохранение файла, ответьте Да (Yes).
17. Сделайте двойной щелчок по созданной вами в форме кнопке Предыдущий.
18. В появившемся окне введите команды:
19. Закройте это окно. Если при закрытии окна появится запрос на сохранение файла, ответьте Да (Yes).
20. Сделайте двойной щелчок по созданной вами в форме кнопке Следующий.
21. В появившемся окне введите команды:
22. Закройте это окно. Если при закрытии окна появится запрос на сохранение файла, ответьте Да (Yes).
23. Опробуйте созданную форму в работе, для чего запустите ее на выполнение щелчком по кнопке с восклицательным знаком на панели инструментов Стандартная. Если при этом возникнет вопрос о сохранении файла,ответьте Да (Yes), а в появившемся стандартном окне сохранения файлавыберите папку PRG и задайте имя файла ViewP.
24. При успешном запуске форма должна иметь вид, как на рис. 4.22.
25. Щелкайте по кнопкам Предыдущий и Следующий. Данные во всех полях должны изменяться.
26. Для того чтобы закрыть форму, щелкните по кнопке ОК.
27. Закройте Form Designer (Дизайнер форм) щелчком по стандартнойкнопке закрытия в заголовке его окна.
28. Обратите внимание, что в папке Forms (Формы) появилось имя созданной нами формы ViewP.
При помощи созданного нами окна можно просматривать данные, но редактировать их нельзя. Попробуйте создать еще одно окно формы самостоятельно.
Оно должно быть аналогично окну формы ViewP по составу и наименованиямполей и, соответственно, делается точно, как указано в пунктах 4-22. Но и новойформе будут присутствовать некоторые отличия.
Во-первых, значение свойства ReadOnly для всех полей должно быть.F.-False. Это нужно для обеспечения возможности редактирования данных вполях.
Во-вторых, в начало процедур для каждой из трех кнопок надо вставитьприведенные ниже команды для того, чтобы сохранять введенные измененияв таблицах. Будем вносить изменения при переходе от одной записи к другой.
Иногда действуют по другой схеме и создают временную таблицу, куда вносятся сделанные пользователем изменения, а при щелчке по кнопке ОК всеизменения переносятся в основную таблицу. Такой подход позволяет отменитьвнесение изменений, сделанных пользователем, например, если пользовательзакрыл окно формы по окончании работы не щелчком мышью по кнопке ОК,а щелчком мышью по кнопке Отмена.
Название новой формы пусть будет EdPer.
Итак, вот команды, которые нужно вставить в начало процедур, для каждойиз трех кнопок вашей формы (окно с процедурой появляется при двойномщелчке мышью по кнопке):
После ввода команд попробуйте запустить на выполнение получившуюсяформу. Если в этот момент появится запрос на сохранение формы в файле,перейдите в папку PRG и задайте имя файла для формы EdPer.
После запуска формы на выполнение попробуйте просмотреть записи поразличным сотрудникам, отредактируйте какую-либо запись. Закройте окнощелчком по кнопке ОК. Запустите форму па выполнение снова и посмотрите,сохранились ли исправленные вами данные о сотруднике.
Использование элемента Grid
В предыдущем подразделе мы научились создавать окна форм с различнымиэлементами. На практике довольно часто для отображения табличных данныхиспользуют элемент под названием Grid.
Элемент Grid добавляется в окно формы при помощи кнопкина панелиинструментов Form Designer (Дизайнера форм). Для дальнейшей настройкиотображаемой таблицы удобно воспользоваться Мастером (Grid Builder).