Class Browser
Еще одним способом размещения в форме объектов внешней библиотеки классов является применение средства Class Browser (Обзор классов). Для открытия окна Class Browser (Обзор классов) (рис. 16.7) выполните команду Class Browser (Обзор классов) из меню Tools (Сервис) или нажмите одноименную кнопку на стандартной панели инструментов.
Рис. 16.7. Окно Class Browser
Для размещения в окне Class Browser (Обзор классов) библиотеки предназначены кнопки Open (Открыть)
и View Additional File (Показать дополнительный файл) панели инструментов окна. При их нажатии открывается диалоговое окно Open (Открыть) (см. рис. 16.1), позволяющее открыть и разместить в Class Browser (Обзор классов) существующую библиотеку классов.Чтобы добавить в форму элемент управления из окна Class Browser (Обзор классов), выполните следующие действия:
Откройте в конструкторе форму, в которую хотите добавить объекты из библиотеки классов.
В окне Class Browser (Обзор классов) откройте библиотеку, содержащую классы объектов, которые вы собираетесь разместить в форме.
Выберите из списка требуемый класс. Значок Move (Переместить), расположенный в верхнем левом углу окна Class Browser (Обзор классов), изменит свой рисунок в соответствии со значком выбранного вами класса.
Установите курсор на значок Move (Переместить).
Нажмите кнопку мыши и, удерживая ее нажатой, перенесите объект в форму.
Завершив перемещение, отпустите кнопку мыши. Результат перемещения класса кнопки в форму показан на рис. 16.8.
Рис. 16.8. Размещение в форме объектов из окна Class Browser
Документ Microsoft Word
На вторую вкладку формы поместим объект для работы с документ Microsoft Word (рис. 16.15), используя кнопку Документ Microsoft Word на панели инструментов Form Controls (Элементы управления формы).
Для редактирования объекта типа Документ Microsoft Word вы также можете использовать команды Изменить и Открыть контекстного меню. на рис. 16.16 приведен режим редактирования по месту.
Рис. 16.15. Объект для работы с документом Microsoft Word
Рис. 16.16. Редактирование документа Microsoft Word
Использование ActiveX-компонентов в форме
Компоненты ActiveX представляют собой 32-разрядные объекты, содержащие код и данные. В отличие от библиотек классов Visual FoxPro, ActiveX-компоненты могут создаваться с помощью различных средств разработки, например Visual C++ или Visual Basic. Вы можете использовать ActiveX-компоненты аналогично базовым компонентам Visual FoxPro. Основным преимуществом данных компонентов является их огромное количество, так как их разработкой занимаются многие фирмы, а также отдельные программисты. Часть этих компонентов является коммерческой продукцией, часть распространяется бесплатно. Множество компонентов включено в поставку Visual Studio и в приложение Microsoft Office. Для поиска необходимых компонентов вы можете использовать Интернет.
Для формирования списка используемых при разработке ActiveX-компонентов необходимо воспользоваться диалоговым окном Options (Параметры), выполнив следующие действия:
Выберите в меню Tools (Сервис) команду Options (Параметры).
В диалоговом окне Options (Параметры) выберите вкладку Controls (Элементы управления).
Установите опцию ActiveX controls (Элементы управления ActiveX). При этом в списке Selected (Выбранные) будет отображен список всех доступных на вашем компьютере ActiveX-компонентов.
Рис. 16.9. Вкладка Controls диалогового окна Options
Установите флажки рядом с теми объектами списка Selected, которые хотите разместить на панели инструментов Form Controls (Элементы управления формы) и использовать для размещения в форме (рис. 16.9).
Нажмите кнопку ОК для закрытия диалогового окна Options (Параметры).
Замечание
Кнопка Add (Добавить) вкладки Controls (Элементы управления) диалогового окна Options (Параметры) предназначена для добавления новых объектов в список Selected. При нажатии на данную кнопку открывается диалоговое окно Open (Открыть), используя которое можно выбрать файл с ActiveX-компонентами.
Использование библиотек классов
В предыдущих главах мы рассмотрели использование стандартных элементов, которые представляют лишь небольшую часть доступных элементов управления. Множество разнообразных элементов управления находится в библиотеках классов, объединенных общим названием Visual FoxPro Foundation Classes, которые входят в комплект поставки Visual FoxPro. Кроме библиотеки Foundation Classes, вы можете также использовать библиотеки классов, которые разрабатывают сторонние фирмы.
В последнее время широкое распространение получают ActiveX-компоненты, которые представляют собой полнофункциональные элементы управления. Вы можете размещать их так же, как и обычные элементы управления, задавать свойства и обрабатывать события.
В процессе разработки приложения вы можете создавать свои библиотеки классов и размещать в форме собственные элементы управления.
Применение внешних библиотек классов не только облегчает разработку приложения, но и ускоряет процесс. Для размещения в форме объектов библиотек вы можете использовать панель инструментов Form Controls (Элементы управления формы), Гатерею компонентов и Class Browser (Обзор классов).
Использование библиотеки классов Галереи компонентов
Галерея компонентов Visual FoxPro содержит библиотеки классов Foundation Classes (рис. 16.5), которые размещены в одноименном каталоге.
Для размещения объекта выбранного класса в форме вы можете выполнить любое из приведенных ниже действий.
Выделить класс в окне Галереи компонентов и перенести в требуемое место формы, используя механизм "перенести-и-оставить".
Щелкнуть правой кнопкой мыши на классе и из контекстного меню выбрать команду Add to Form (Добавить в форму) (рис. 16.6).
Выделить класс в окне Галереи компонентов, щелкнуть на значке Move (Перенести), расположенном в левом верхнем углу окна, и перенести его в требуемое место формы.
Рис. 16.5. Каталог Foundation Classes
Рис. 16.6. Использование контекстного меню для размещения объекта выбранного класса в форме
Замечание
Для некоторых классов определены построители, автоматически запускаемые при размещении их в форме.
Использование браузера объектов
В Visual FoxPro имеется средство для просмотра списка классов, свойств, методов, событий и констант библиотек СОМ-объектов или ActiveX-компонентов — Object Browser (Браузер объектов). В окне браузера (рис. 16.28) можно выполнять поиск заданного значения в пределах библиотеки.
Рис. 16.28. Окно браузера объектов
Для запуска браузера можно воспользоваться одним из следующих способов:
выполнить команду Object Browser (Браузер объектов) из меню lools (Сервис);
нажать кнопку Object Browser
на стандартной панели инструмснтои. Для открытия библиотеки и просмотра ее структуры в окне браузера объектов предназначена кнопка Open Type Library (Открыть библиотеку) . При нажатии этой кнопки открывается диалоговое окно Open (Открыть) (рис. 16.29). которое содержит три вкладки со следующей информацией:Recent History (Хронология) — список открытых ранее библиотек;
COM Libraries (СОМ-библиотеки) — список СОМ-библиотек. имеющихся нв компьютере;
Current Selection (Выбранные) — список открытых в окне Object Browser (Браузер объектов) библиотек.
Рис. 16.29. Вкладка COM Libraries окна Open, предназначенная для выбора СОМ-библиотек
Object Browser содержит элементы управления, которые перечислены в табл. 16.4.
Таблица 16.4. Элементы управления Object Browser
Элемент | Назначение | ||
Перемещает указатель активной строки на предыдущую выбранную в окне Object Browser позицию | |||
Перемещает указатель активной строки на следующую позицию | |||
Копирует наименование выделенного элемента библиотеки | |||
Открывает тему справочной системы, посвященную Object Browser | |||
Отображает в окне Object Browser объекты интерфейса (рис. 16.30), позволяющие найти объекты, в которых встречается заданное для поиска значение | |||
Открывает диалоговое окно Object Browser Options (Параметры Браузера объектов), в котором вы можете настраивать параметры отображения окна Object Browser | |||
Область описания | Располагается в нижней части окна Object Browser и содержит краткое описание выбранного объекта |
При нажатии кнопки Find (Найти) в верхней части окна Object Browser (Браузер объектов) появляется поле Look for (Значение для поиска) и кнопка Go (Начать поиск), предназначенные для текстового поиска.
Ведите в поле Look for значение для поиска и нажмите кнопку Go. В окне браузера объектов добавятся новые узлы, содержащие название библиотеки и условие поиска. В разделах этих узлов будут отображены объекты, удовлетворяющие условию поиска (рис. 16.30).
Рис. 16.30. Поиск информации в Object Browser
Использование календаря для ввода информации в поля дат
Мы рассмотрели свойства календаря. Теперь посмотрим, как можно использовать данный ActiveX-компонент для ввода информации в поля таблицы содержащие даты. В качестве примера создадим форму для ввода информации о сотрудниках фирмы. Исходная таблица Manager содержит поле dDateBirth с информацией о дате рождения сотрудника. Информацию в это поле будем вводить с помощью ActiveX-компонента Календарь.
Чтобы создать форму, выполните следующие действия:
В проекте sales откройте окно конструктора.
В окружение формы добавьте таблицу, содержащую список сотрудников.
Разместите в форме необходимые для ввода информации поля таблицы.
Откройте окно свойств Properties (Свойства) поля, предназначенного для ввода даты рождения сотрудника.
Используя свойство Name (Имя), присвойте объекту наименование txtBirthday.
Используя свойство controisource (Источник данных), задайте в качестве источника данных поля для ввода даты рождения поле dDateBirth таблицы.
Рис. 16.25. Форма для ввода списка сотрудников
Рядом с полем, предназначенным для ввода даты рождения, расположите кнопку.
Используя свойство caption (Надпись), присвойте кнопке название Календарь. Форма будет иметь вид, представленный на рис. 16.25.
Откройте окно свойств Properties (Свойства) кнопки Календарь.
Рис. 16.26. Окно процедур метода Click для кнопки Календарь
В окне процедур свойства click (Нажатие) введите команды, которые программно формируют и задают свойства ActiveX-компонента календарь (рис. 16.26):
#DEFINE С CALCAFTIOK_LOC "Календарь"
oCalForm = Create('form1 )
oCalForm.NewObject("oleCalendar","_olecalendar","_datetime")
WITH oCalForm.oleCalendar
.date_column = "manager.ddatebirch"
.RefreshDisplay()
.BackColor = THISFORM.BackColor
.Visible = . T. ENDWITH WITH oCalForm
.BorderStyle - '.:
.MaxButton = .F.
.MinButton = .F.
.Height = oCalForm.oleCalendar.Height
.Width = oCalForm.oleCalendar.Width
.Caption = C__CALCAPTION_LOC ENDWITH
oCalForm.Show(1) THISFORM.Refresh
Закройте окно процедур.
Создание формы завершено. Запустите ее на выполнение. Для ввода информации в поле дата рождения нажмите кнопку Календарь. На экране откроется календарь. Выберите необходимое число, месяц и год и закройте календарь. Указанная вами дата будет перенесена в поле дата рождения (рис. 16.27).
Рис. 16.27. Использование ActiveX-компонента для ввода информации в таблицу
Использование в форме календаря
Календарь также является одним из ActiveX-компонентов. Вы можете пс пользовать его для ввода информации в поля дат.
Сначала разместим календарь в форме, чтобы посмотреть свойства, кот ори ми обладает данный объект, и возможности их настройки. Затем рассмотрим пример программного использования календаря для ввода даты.
Электронная таблица
На первую вкладку формы поместим электронную таблицу Excel (рис. 16.12), используя кнопку Лист Microsoft Excel на панели инструментов Form Controls (Элементы управления формы).
Для редактирования электронной таблицы используется конструктор. Чтобы его запустить, необходимо выполнить следующие действия:
Выделите в форме электронную таблицу.
Нажмите правую кнопку мыши.
В контекстном меню выберите команду Лист Object, а затем опцию Изменить или Открыть.
После выбора пункта меню Изменить интерфейс Visual FoxPro изменяется. Вы переходите в режим редактирования по месту электронной таблицы (рис. 16.13), при котором в окно Visual FoxPro добавляются панели инструментов Microsoft Excel. Можете приступить к редактированию таблицы с помощью средств электронной таблицы.
Рис. 16.12. Электронная таблица, размещенная на первой вкладке формы
Рис. 16.13. Редактирование электронной таблицы в Visual FoxPro
В том случае, если вы выбираете пункт меню Открыть, запускается приложение Microsoft Excel и в нем открывается созданный вами лист электрон ной таблицы (рис. 16.14).
Рис. 16.14. Редактирование электронной таблицы в отдельном приложении
Настройка свойств календаря
Чтобы разместить в форме календарь, который на панели инструментов Form Controls
(Элементы управления формы), содержащей ActiveX-компоненты, отображается в виде кнопки Элемент управления календарь, нажмите данную кнопку, установите указатель мыши в форму и нарисуйте курсором рамку требуемого размера. Календарь размещен в форме (рис. 16.20).С целью настройки свойств календаря выделите размещенный объект и нажми те правую кнопку мыши. В контекстном меню выберите команду Календарь Свойства. На экране откроется диапоговое окно Свойства: Календарь созданного объекта, содержащее набор параметров, позволяющих настрои календарь (рис. 16.21).
Диаюговое окно Свойства: Календарь содержит три вкладки: Общие (General), Шрифт (Font), Цвет (Color).
Вкладка Общие содержит поля, позволяющие настроить параметры, описанные в табл. 16.2.
Таблица 16.2. Назначение полей окна Свойства: Календарь
Поле | Назначение | ||
Значение (Value) | Текущая дата | ||
Первый день недели (First Day) | День, принимаемый за первый день недели | ||
Формат дня (Day Length) | Формат отображения наименования дня недели; может принимать одно из трех значений: короткий, средний, длинный | ||
Формат месяца (Month Length) | Формат отображения наименования месяца; может принимать одно из двух значений: короткий и длинный | ||
Оформление (Grid Cell Effect) | Стиль отображения ячеек таблицы |
Область Отображение (Show) вкладки Общие (General) содержит флажки, описанные в табл. 16.3.
Таблица 16.3. Назначение флажков области Отображение вкладки Общие
Флажок | Назначение | ||
Заголовок месяца и года (Month/Year Title) | Указывает на необходимость отображения заголовка месяца и года | ||
Выбор месяца и года (Month/Year Selectors) | Указывает на необходимость размещения в заголовке полей для выбора месяца и года | ||
Дни недели (Days of Week) | Указывает на необходимость отображения в заголовке таблицы дней недели | ||
Сетка по горизонтали (Horizontal Grid) | Указывает на необходимость отображения в таблице горизонтальных линий сетки | ||
Сетка по вертикали (Vertical Grid) | Указывает на необходимость отображения в таблице вертикальных линий сетки |
При изменении любого из параметров вкладки становится доступной кнопка Применить, при нажатии на которую сохраняются введенные изменения.
Вкладка Шрифт (Font) окна свойств календаря (рис. 16.22) позволяет настроить шрифты объекта. Список Свойства (Properties) вкладки содержит объекты оформления календаря, для которых можно настроить шрифты:
DayFont - дни недели, расположенные в заголовке таблицы;
GridFont — числа, размещенные в таблице катендаря;
TitleFont — месяц и год в заголовке календаря.
Списки Шрифт (Font) и Размер (Size) позволяют задать наименование и размер шрифта, выбранного из списка Свойства (Properties) объекта, а флажки области Атрибуты (Effects) — стиль оформления.
Рис. 16.20. Форма с размещенным в ней календарем
Рис. 16.21. Диалоговое окно Свойства: Календарь
Рис. 16.22. Вкладка Шрифт диалогового окна Свойства: Календарь
Рис. 16.23. Вкладка Цвет диалогового окна Свойства: Календарь
Вкладка Цвет (Color) окна свойств календаря (рис. 16.23) позволяет изменить цветовое оформление календаря. Список Свойства (Properties) содержит элементы календаря, для которых можно настроить цвета:
Backcolor — фон календаря;
DayFontcolor — дни недели, расположенные в заголовке таблицы;
GridFontCoior — числа, размещенные в таблице календаря;
GridLinesCoior — линии сетки таблицы календаря;
TitleFontcoior — месяц и год в заголовке календаря.
С помощью списка Набор цветов (Color Set) можно установить используемую цветовую схему, а списка Цветовая палитра (Color Palette) — цвет выбранного из списка Свойства элемента.
При нажатии на кнопку Справка открывается окно справочной системы, содержащее список всех методов, свойств и событий ActiveX-KOMihuiviiia (рис. 16.24).
Рис. 16.24. Список всех методов, свойств и событий ActiveX-комггаконм
Отображение ActiveX-компонентов на панели инструментов Form Controls
Для отображения ActiveX-компонентов на панели инструментов Form Controls (Элементы управления формы) при создании форм выполните следующие действия:
Нажмите кнопку View Classes (Просмотр классов) на панели инструментов Form Controls (Элементы управления формы), в результате чего на экране появится меню кнопки.
Рис. 16.10. Панель инструментов, содержащая ActiveX-компоненты
Выберите команду ActiveX Controls (Элементы управления ActiveX) данного меню. На панели инструментов Form Controls (Элементы управления формы) будут размешены кнопки, содержащие значки выбранных вами ActiveX-компонентов в диалоговом окне Options (Параметры) (рис. 16.10). Теперь вы можете размещать данные объекты в форме обычным образом.
Панель инструментов Form Controls
Чтобы использовать панель инструментов Form Controls (Элементы управления формы), вы должны разместить на ней объекты внешней библиотеки. Для этого выполните следующие действия:
Нажмите кнопку View Classes (Просмотр классов)
на панели инструментов Form Controls (Элементы управления формы).Появившееся меню содержит команду Add (Добавить) и список библиотек классов. Для добавления внешней библиотеки нажмите кнопку Add (Добавить).
На экране открывается диалоговое окно Open (Открыть) (рис. 16.1), позволяющее выбрать необходимую библиотеку классов.
Используя раскрывающийся список Папка, найдите папку Classes (Классы), содержащую библиотеки классов Visual FoxPro.
Выберите, например, библиотеку классов Buttons (Кнопки), входящую в поставку Visual FoxPro, и нажмите кнопку Open (Открыть) диалогового окна.
Замечание
Файлы библиотек классов имеют расширение VCX.
Рис. 16.1. Диалоговое окно Open для присоединения внешней библиотеки
Замечание
После выбора библиотеки классов нажмите кнопку View Classes (Просмотр классов) на панели инструментов Form Controls (Элементы управления формы). Обратите внимание на то, что в ее меню добавился пункт с выбранной вами библиотекой классов (в данном примере Buttons (Кнопки)).
Выберите пункт меню с наименованием добавленной вами библиотеки. На панели инструментов Form Controls (Элементы управления формы) будут размешены кнопки элементов управления выбранной библиотеки (рис. 16.2). Используя панель инструментов, вы теперь можете размешать эти объекты в форме так же, как и стандартные элементы управления.
Рис. 16.2. Меню кнопки View Classes и панель инструментов, содержащая элементы управления внешней библиотеки
Библиотека Buttons (Кнопки) содержит набор кнопок, назначение которых описано в табл. 16.1.
Таблица 16.1. Кнопки библиотеки Buttons
Кнопка | Наименование | Назначение | |||
mailbtn | Размещает в форме кнопку, позволяющую передач. данные таблицы по электронной почте | ||||
vcr | Размещает набор кнопок перемещения по записям таблицы | ||||
cmdok | Размещает в форме кнопку ОК | ||||
cmdHelp | Размещает в форме кнопку Help | ||||
cmdCancel | Размещает в форме кнопку Cancel |
Рассмотрим размещение этих кнопок в форме:
В проекте sales выберите любую из созданных ранее форм и откройте ее в конструкторе.
Удалите в нижней части формы кнопки перемещения по записям, созданные вами ранее.
Выберите инструмент vcr на панели инструментов Form Controls (Элементы управления формы) и поместите его на месте удаленных кнопок (рис. 16.3).
Рис. 16.3. Размещение объекта vcr в форме
Рис. 16.4. Форма с размещенным объектом vcr для перемещения по записям
Запустите форму на выполнение. Убедитесь в том, что используя размещенные для управления таблицей кнопки, можно перемещаться по записям таблицы (рис. 16.4).
Работа с ActiveX-компонентами после запуска формы на выполнение
При запуске формы, содержащей ActiveX-компоненты, они активизируются. Поведение ActiveX-компонентов определяется заданными для них алгоритмами управления. Например, для редактирования информации в электронной таблице достаточно дважды щелкнуть на объекте (рис. 16.17).
Рис. 16.17. Редактирование электронной таблицы
Размещение ActiveX-компонентов в форме
Рассмотрим пример создания формы, содержащей две вкладки, на которых разместим такие ActiveX-компоненты, как электронная таблица и документ Microsoft Word. Для создания формы выполните следующие действия:
Откройте проект sales.
Выберите вкладку Documents (Документы), перейдите в группу Forms (Формы), а затем нажмите кнопку New (Новый).
В открывшемся диалоговом окне New Form (Новая форма) выберите опцию New Form (Новая форма). Откроется окно конструктора форм.
Нажмите кнопку View Classes (Просмотр классов) на панели инструментов Form Controls (Элементы управления формы), в результате чего на экране появится меню данной кнопки, содержащее команды выбора библиотеки из ранее размещенных на панели инструментов ActiveX-компонентов и добавления новой библиотеки.
Выберите значение Standard (Стандартная). Это необходимо, чтобы на панели инструментов Form Controls (Элементы управления формы) были размещены стандартные элементы управления.
Разместите в форме объект Page Frame (Вкладка), используя кнопку Page Frame (Вкладка) на панели инструментов Form Controls (Элементы управления формы).
Введите название формы, воспользовавшись свойством caption (Надпись).
Задайте для объекта Page Frame (Вкладка) две вкладки, используя свойство PageCount (Количество вкладок).
Используя свойство caption (Надпись) каждой вкладки, присвойте им названия (рис. 16.11).
Форма готова. Теперь можно разместить в ней ActiveX-компоненты. Для этого необходимо отобразить на панели инструментов элементов управления формы ActiveX-компоненты: нажмите кнопку View Classes (Просмотр классов) на панели инструментов Form Controls (Элементы управления формы).
Выберите из появившегося меню пункт ActiveX Controls (Элементы управления ActiveX).
Рис. 16.11. Форма с размещенным в ней объектом Page Frame
Связь ActiveX-компонентов с базой данных
В предыдущем разделе мы рассмотрели размещение в форме ActiveX-компонентов. Но форма предназначена в основном для работы с базой данных. Возникает вопрос, а как же использовать ActiveX-компоненты для работы с таблицами базы данных9 Связь ActiveX-компонентов с базой данных рассмотрим на примере RTF-объекта, который используется для ввода в Memo-поля таблицы форматированного текста. Чтобы создать форму с размещенным в ней RTF-объектом, будем использовать таблицу customer, содержащую Memo-поле mNotes с дополнительной информацией о клиенте. Для этого:
Добавьте на панель инструментов Form Controls (Элементы управления формы) кнопку Microsoft Rich TextBox Control (Элемент управления для редактирования текста в формате RTF). Для этого на вкладке Controls (Элементы управления) диалогового окна Options (Параметры) в списке Selected (Выбранные) установите флажок рядом со значением Microsoft Rich TextBox Control (Элемент управления для редактирования
текста в формате RTF) и нажмите кнопку ОК.Для управления RTF-объектом нам понадобятся элементы управления, которые содержатся в библиотеке классов samples (Образцы), содержащейся в поставке Visual FoxPro. Присоедините данную библиотеку. После этого при нажатии кнопки View Classes (Просмотр классов) появляется меню, содержащее команды для размещения на панели инструментов Form Controls (Элементы управления формы) ActiveX-компонентов и объектов из библиотеки samples (Образцы).
Замечание
Присоединение внешних библиотек мы рассмотрели в начале данной главы.
Откройте проект sales (Продажи).
Откройте в конструкторе форму, позволяющую вводить информацию В таблицу Customer.
Удалите из формы поле, которое использовалось вами ранее для ввода информации в пое таблицы mNotes.
Чтобы отобразить на панели инструментов Form Controls (Элементы управления формы) кнопки для размещения в форме ActiveX-компонентов, нажмите кнопку View Classes (Просмотр классов) и в появившемся меню выберите команду ActiveX Controls (Элементы управления ActiveX).
Выберите на панели инструментов Form Controls (Элементы управления формы) кнопку Microsoft Rich TextBox Control (Элемент управления для редактирования текста в формате RTF) и разместите в форме поле, предназначенное для ввода примечания.
Чтобы можно было управлять созданным полем, необходимо поместить в форму элементы управления RTF-объектом. Для этого на панели инструментов Form Controls (Элементы управления формы) нажмите кнопку View Classes (Просмотр классов) и в появившемся меню кнопки выберите команду Samples (Образцы).
Рис. 16.18. Форма с размещенным ActiveX-компонентом и объектом из библиотеки Samples
Рис. 16.19. Использование в форме ActiveX-компонента для ввода форматированной информации в Memo-поле таблицы
Нажмите на панели инструментов Form Controls (Элементы управления формы) кнопку rtfcontrols (Элементы управления RTF) из библиотеки samples (Образцы) и разместите в форме элементы управления. В результате форма примет вид, представленный на рис. 16.18.
Чтобы связать размещенное в форме поле с полем таблицы Customer откройте окно Properties (Свойства) и для свойства controisour (Источник данных) задайте поле mNotes.
Для элементов управления RTF-объектом задайте методы, устанавливающие значения свойств объекта.
Результат размещения в форме RTF-объекта приведен на рис. 16.19.
Использование мастера при создании этикеток
Сначала рассмотрим создание этикетки с помощью мастера. Выполните следующие действия:
Откройте созданный проект.
Выберите вкладку Documents (Документы).
Установите курсор в группу Labels (Этикетки) и нажмите кнопку New (Новый) окна конструктора проекта.
Открывается диалоговое окно New Label (Новая этикетка). Выберите в нем опцию Label Wizard (Мастер этикетки).
Совет
Для запуска мастера создания этикеток вы можете также в меню Tools (Сервис) выбрать команду Wizards (Мастера), а затем в открывшемся меню — опцию Label (Этикетка).
Запускается мастер по созданию почтовой этикетки. В его первом диалоговом окне выберите источник данных (рис. 17.2), т. е. укажите таблицу, из которой будут выбираться данные, и нажмите кнопку Next (Далее).
На втором шаге из предложенного списка наиболее часто используемых размеров этикеток выберите подходящий (рис. 17.3). Столбец Avery содержит наименования этикеток. В столбце Dimensions (Размеры) отображается размер этикетки, а в столбце Columns (Колонки) — количество колонок этикеток, помещаемых на странице. По умолчанию размер этикеток указывается в дюймах, а при установке опции Metric (Метрический) — в миллиметрах.
В этот список можно добавить новые размеры этикеток. Для этого нажмите кнопку New Label (Новая этикетка). Открывается диалоговое окно Custom Labels (Пользовательские этикетки) (рис. 17.4) со списком пользовательских этикеток. В этом окне можно ввести новые размеры этикеток или изменить существующие.
Для создания новой или редактирования существующей этикетки необходимо нажать кнопку New (Новый) или Edit (Редактировать) соответственно. При этом открывается диалоговое окно New Label Definition (Определение размеров новой этикетки) (рис. 17.5), позволяющее ввести размеры этикетки или отредактировать установленные. Введите на схеме размеры этикетки, укажите в поле Label Name (Наименование этикетки) наименование этикетки и нажмите кнопку Add (Добавить) или Update (Обновить) для добавления или изменения этикетки соответственно.
Использование в отчетах отношения "один-ко-многим"
Visual FoxPro поддерживает в отчетах отношение "один-ко-многим". Эта возможность упрощает отображение в отчете иерархических данных.
Добавим в форму просмотра телефонов клиентов и их заказов, созданную в главе 15, средства для печати телефонов просматриваемого клиента. Для этого в форме расположим кнопку для печати телефонов (рис. 17.14) и создадим соответствующий отчет.
Откройте проект sales.
Откройте для модификации форму Клиенты и продажи.
Добавьте в форму кнопку с надписью Печать.
Откройте окно свойств кнопки. Выберите метод click (Нажатие) и введите в окне процедуры следующий текст программы вызова отчета:
curiCdCustomer=icdCustomer
REPORT FORM RepCust TO PRINTER;
FOR PhonCust.icdCustomer=curiCdCustoraer
SELECT PhonCust
SET SKIP TO
select Customer
ThisForm.Refresh!)
Откройте новое окно конструктора отчетов и добавьте в окно Data Environment (Среда окружения) таблицы customer и PhonCust.
Главной таблицей отчета является customer, а подчиненной по отношению к ней — таблица PhonCust. Установите связи между этими таблицами и определите свойство опетомапу (Один-ко-многим), выбрав значение True (Истина) (рис. 17.15).
Рис. 17.14. Форма Клиенты и продажи
Рис. 17.15. Установка отношения "один-ко-многим"
Рис. 17.16. Отчет для печати телефонов клиентов
Рис. 17.17. Отчет для печати телефонов клиентов в окне просмотра
В заголовке отчета расположите его название.
Добавьте в отчет группировку по коду клиента.
В полосе Group Header (Группа сверху) разместите поля из таблицы customer и надписи к ним, а также надписи к полям из таблицы Phoncust.
В полосе Detail (Детали) разместите поля из таблицы Phoncust.
Созданный отчет представлен на рис. 17.16. Сохраните отчет под именем RepCust.
Запустите на выполнение форму Клиенты и продажи. Для печати телефонов клиента, на котором установлен курсор, нажмите кнопку Печать телефонов. На рис. 17.17 приведен вариант просмотра отчета на экране.
Использование в отчетах представлений данных
Вопросы создания отчетов нами уже обсуждались. В этой главе рассмотрим использование при создании отчетов представлений данных, создание отчетов для таблиц, имеющих отношение "один-ко-многим", а также конструирование этикеток.
В главе 14 мы познакомились с представлениями данных, содержащими результат выборки из базовых таблиц базы данных. Их удобно использовать при создании отчетов, так как задавая параметры для представлений данных, можно печатать отчеты, содержащие информацию за определенный интервал времени, о конкретном клиенте и т. п.
Рассмотрим создание отчета, данные для которого находятся в представлении данных, содержащем итоговые суммы продаж по клиентам.
Откройте Проект Sales.
Для создания нового отчета откройте окно конструктора отчетов.
Откройте окно Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид) или выбрав команду Data Environment (Среда окружения) контекстного меню.
Для добавления представления данных в среду окружения выполните команду Add (Добавить) из меню Data Environment (Среда окружения).
В открывшемся диалоговом окне Add Table or View (Добавить таблицу или представление данных) установите опцию Views (Представления данных) и выберите из списка представление данных sumcust.
Закройте окно Data Environment (Среда окружения).
Создайте стандартный отчет, используя команду Quick Report (Стандартный отчет) из меню Report (Отчет). При создании отчета воспользуйтесь размещением по строкам и выберите все поля представления данных.
Скорректируйте заголовки полей в полосе Page Header (Верхний колонтитул) отчета.
Добавьте в отчет группировку по коду клиента, воспользовавшись командой Data Grouping (Группировка данных) из меню Report (Отчет).
В полосе Group Footer (Группа снизу) создайте итоговое поле, которое будет суммировать продажи по каждому клиенту.
Добавьте в отчет полосы для размещения заголовка и итоговой части отчета, выполнив команду Title/Summary (Титул/Итоги) из меню Report (Отчет).
В заголовке отчета введите текст Стоимость продаж по клиентам.
На рис. 17.1 представлен отчет в окне просмотра, данные для которого находятся в представлении данных sumCust.
Рис. 17.1. Использование представления данных в отчетах
Этикетки
На практике часто возникает необходимость в создании отчетов, предназначенных для рассылки информации рекламного характера потенциальным клиентам или рассылки сведений о результатах деятельности предприятия за отчетный период. В Visual FoxPro для этих целей имеется специальный тип отчетов и соответствующий мастер для создания почтовых этикеток. В данном разделе мы рассмотрим создание этикеток как с помощью мастера, так и в окне конструктора этикеток.
Создание этикетки с помощью конструктора
При создании сложных этикеток вы можете использовать конструктор этикеток. Для его открытия выполните одно из перечисленных ниже действий.
В меню File (Файл) выберите команду New (Новый). В открывшемся диалоговом окне New (Новый) установите опцию Label (Этикетка) и нажмите кнопку New file (Новый файл).
Нажмите кнопку New (Новый), предварительно выбрав на вкладке Documents (Документы) в окне проекта группу Labels (Этикетки), и в открывшемся диалоговом окне New Label (Новая этикетка) выберите опцию New Label (Новая этикетка).
Рис. 17.10. Диалоговое окно New Label
Открывается диалоговое окно New Label (Новая этикетка) (рис. 17.10), где в табличном виде находится список наиболее часто используемых этикеток. Столбцы таблицы имеют следующее назначение:
Avery No — наименование этикетки;
Height — высота этикетки;
Width — ширина этикетки;
Columns — число колонок.
Выберите из предложенных вариантов требуемый тип этикетки и нажмите кнопку ОК. На экране откроется окно конструктора этикеток (рис. 17.11).
Окно конструктора этикеток выглядит примерно так же, как окно конструктора отчетов. Отличие заключается в том, что для этикетки заданы размеры отчета и количество колонок в отчете. В остальном создание этикетки аналогично созданию отчета.
Рассмотрим создание этикетки на примере подготовки адресов для рассылки корреспонденции клиентам, используя информацию из таблицы customer. Этот пример аналогичен примеру создания многоколоночного отчета, описание которого дано в главе 8.
Основное преимущество этикеток, по сравнению с отчетами, состоит в автоматическом выборе размеров этикетки и расстояния между ними. Нет необходимости самостоятельно рассчитывать размер получаемого отчета и заботиться о том, чтобы он поместился на бумаге. При печати на обычной бумаге это преимущество не вполне очевидно, но как только вы начнете использовать для этих целей специальные листы с наклейками, вы ощутите удобство выбора типа наклейки.
Рис. 17.11. Окно конструктора этикеток
Для создания этикетки выполните следующие действия:
Фраза HAVING
Для применения условий к группам, созданным фразой group by, используется фраза having, которая играет такую же роль для групп, что и фраза where для записей.
Замечание
Разница между фразами where и having состоит в том, что where применяется к строкам, в то время как having применяется к группам.
Запрос может содержать и фразу where, и фразу having. В этом случае первой выполняется фраза where, поскольку она выполняется до разбиения на группы.
Рассмотрим пример выборки городов, в которых имеется более десяти покупателей:
SELECT cCountry
FROM Customer ;
GROUP BY cCountry;
HAVING COUNT(*)>10
Предупреждение
Вы не можете использовать фразу having отдельно от фразы group by.
Использование переменных при формировании запросов
При формировании выборки в программах вы можете использовать переменные для определения условий выборки и задания имени таблицы, в которую записываются результаты выборки.
Рассмотрим пример создания запроса, в котором определяется итоговая сумма по каждому заказу. За основу возьмем аналогичный запрос, созданный ранее в интерактивном режиме. В него добавим возможность задания интервала, за который будет осуществляться выборка, а также имени результирующей таблицы.
Откройте новое окно редактирования программы. Для этого в меню File (Файл) выберите команду New (Новый).
В открывшемся диалоговом окне выберите опцию Program (Программа) и нажмите кнопку New file (Новый файл).
Откройте окно созданного ранее запроса, содержащего выборку из таблиц ordsalem и Ordsaied с итоговой суммой по каждому заказу.
Нажмите кнопку Show the SQL Window (Показать окно SQL) на панели инструментов Query Designer (Конструктор запроса) или в меню Query (Запрос) выберите команду View SQL (Показать SQL).
В окне просмотра выделите команду select и сохраните ее во временном буфере Windows.
Скопируйте содержимое буфера Windows в окно редактирования программы.
Укажите перед командой select начальную и конечную даты, определяющие промежуток времени, а также значение переменной, которая задает имя результирующей таблицы:
dBeg=CTOD("01.04.03") && начальная дата
dEnd=CTOD("30.0<3.03") && конечная дата
cOutput="Ords" && имя результирующей таблицы
Добавьте в конструкцию select условие задания периода времени, используя переменные dBeg и dEnd:
SELECT Ordsalem.icdorder AS заказ,;
SUM(Ordsaled.nQuant*Ordsaled.nUnitPrice) AS стоимость;
FROM sales!ordsalem INNER JOIN sales!ordsaled ;
ON Ordsalem.icdorder = Ordsaled.icdorder;
WHERE Ordsalem.dDoc BETWEEN dBeg AND dEnd;
GROUP BY Ordsalem.icdorder;
INTO TABLE &cOutput
Сохраните программу под именем Ords.prg и проверьте синтаксис.
Рис 18.8. Программа и полученная в результате ее выполнения таблица Ords
Выполните программу, в результате чего в таблицу ords будет записана итоговая сумма по заказам (рис 18.8). В дальнейшем вы можете использовать эту таблицу для просмотра, печати отчета или построения графика.
Использование в программах команды Select
При создании приложений для выборки данных широко используется команда select. В отличие от интерактивного режима, при программировании вы можете использовать переменные и пользовательские функции. Кроме того, в программах вы можете использовать более сложные выборки, включая вложенные запросы, кванторы существования и объединение запросов.
Оператор EXISTS
Оператор exists принимает значение True (Истина), если результат выполнения подзапроса является непустым множеством. Если порожденное подзапросом множество пусто, то exists принимает значение False (Ложь). Оператор not exists работает в точности наоборот. Он истинен, если результат подзапроса пуст, и ложен в противном случае.
Замечание
Операторы exists и not exists всегда помещаются перед подзапросом.
В качестве примера выберем наименования товаров, которые заказати покупатели из Новгорода:
SELECT cNmGoods ;
FROM Goods
WHERE EXISTS
(SELECT *
FROM Customer, Ordsalem, Ordsaled ;
WHERE Ordsalem.icdOrder=Ordsaled.icdOrder ;
AND Ordsalem.iCdCustomer = Customer.iCdCustomer ;
AND Ordsaled.iCdGoods = Goods.iCdGoods ;
AND Customer.cCity = 'Новгород')
Оператор UNION
Для объединения результатов запросов используется оператор union. Результатом объединения является результирующее множество, состоящее из всех строк, входящих в какое-либо одно или в оба результирующих множества объединяемых запросов.
В качестве примера выберем список покупателей, которые живут в Новгороде или покупают товар с кодом 2103:
SELECT icdCustomer ;
FROM Customer ;
WHERE cCity = 'Новгород' ;
UNION ;
SELECT icdCustomer;
FROM Ordsalem, Ordsaled ;
WHERE Ordsalem.icdOrder=Ordsaled.icdOrder ;
AND icdGoods = 2103
Из результата выборки, использующей оператор union, исключаются повторяющиеся строки. Для отображения их в результирующей выборке используйте опцию ALL.
Предупреждение
Фраза order by в запросе с использованием оператора union может входить только в последний оператор select.
Подзапросы
При определении условия выборки можно применять вложенные запросы, которые называются подзапросами. Например, определим список наиболее дорогих товаров, цены которых ниже максимальной цены не более чем на 10%.
SELECT icdGoods ;
FROM Goods;
WHERE nUnitPrice >;
(SELECT 0.9 * MAX (nUnitPrice) ;
FROM Goods)
Представление результатов запроса на экране
На рис. 18.4 показано диалоговое окно Query Destination (Результаты запроса), в котором выбрана опция Screen (Экран).
Рис. 18.4. Диалоговое окно Query Destination с выбранной опцией Screen
Область Secondary output (Вторичный вывод) содержит опции, указывающие, куда дополнительно направляются результаты запроса:
None (Нет) — вывода результатов запроса не происходит;
То printer (На принтер) — результаты запроса выводятся на принтер;
То text file (В текстовый файл) — вывод результатов осуществляется в текстовый файл.
В области Options (Параметры) диалогового окна расположены два флажки. При установке флажка Suppress column headings (He отображать заголовки столбцов) в отображаемом запросе не указываются заголовки столбцов. Установленный флажок Pause between screens (Пауза между экранами) указывает на необходимость делать паузу при заполнении экрана.
Замечание
Если при выдаче информации на экран делаются паузы, то при повторном выводе заголовки столбцов будут повторяться каждый раз при заполнении нового экрана.
Просмотр результатов запроса в режиме Browse
По умолчанию Visual FoxPro помещает результаты запроса во временную таблицу и выводит ее на экран в режиме Browse (Обзор) (рис. 18.2). После закрытия окна временная таблица удаляется из памяти. Этот режим удобен в том случае, если вы хотите просто просмотреть результаты запроса.
Рис. 18.2. Просмотр запроса в режиме Browse
Сохранение результатов запроса в формате HTML
Visual FoxPro позволяет сохранять результат выполнения запроса, как и любую другую таблицу, в формате HTML. Для этого предназначена команда Save As HTML (Сохранить как HTML-файл) из меню File (Файл), открывающая соответствующее диалоговое окно (рис. 18.5), содержащее три опции, приведенные в табл. 18.2.
Таблица 18.2. Опции диалогового окна Save As HTML
Опция | Назначение | ||
Save file for later use (Сохранить файл) | Сохраняет результат запроса на диске в формате файла HTML | ||
Save and edit file (Сохранить файл и открыть для редактирования) | Сохраняет результат запроса на диске в формате файла HTML и открывает его для редактирования (рис. 18.6) | ||
Save file and view in web browser (Сохранить файл и открыть для просмотра в Web-браузере) | Сохраняет результат запроса на диске в формате файла HTML и открывает его для просмотра в окне Web-браузера (рис. 18.7) |
Рис. 18.5. Диалоговое окно Save As HTML
Рис. 18.6. Окно редактирования запроса в формате HTML
Рис. 18.7. Просмотр HTML-файла в окне Web-браузера
Поле, расположенное в нижней части диалогового окна Save As HTML (Сохранить как HTML-файл), позволяет указать расположение сохраняемого файла. Если хотите изменить указанный по умолчанию адрес, воспользуйтесь кнопкой открытия окна диалога Save As (Сохранить как), расположенной справа от поля, укажите имя создаваемого файла с расширением НТМ. а также папку, в которой файл будет сохранен.
Сохранение результатов запроса в курсоре
В том случае, если вы хотите ссылаться на результаты запроса из программы, вам необходимо сохранить их в курсоре. Курсор является временной таблицей, доступной только для чтения и удаляемой из памяти при закрытии курсора.
Для направления результатов запроса в курсор в диалоговом окне Query Destination (Результаты запроса) установите опцию Cursor (Курсор) (рис. 18.3), в поле Cursor name (Имя курсора) введите имя курсора и нажмите кнопку ОК. Введенное имя будет служить псевдонимом для ссылки на результаты запроса. В окне расположены флажки следующего назначения:
READWRITE — указывает, что курсор является временным и модифицируемым. Для таблиц, содержащих автоинкрементные поля, эти свойства в курсоре не наследуются;
NOFILTER — указывает, что создается курсор, который может использоваться в последующих запросах.
Рис. 18.3. Диалоговое окно Query Destination с установленной опцией Cursor
Совет
Для повышения быстродействия и избежания проблем, связанных с именами файлов при работе в сети, небольшие курсоры желательно держать в памяти или на локальном диске. При увеличении размера курсоров и отсутствии достаточного количества места Visual FoxPro записывает их на физический носитель.
Сохранение результатов запроса в таблице
Для сохранения результатов запроса в таблице предназначена кнопка Table (Таблица) диалогового окна Query Destination (Результаты запроса). При ее нажатии становится доступным поле Table name (Имя таблицы), используемое для ввода имени таблицы, в которой будут сохранены результаты. Для указания папки, в которой требуется сохранить таблицу, воспользуйтесь расположенной справа от поля кнопкой, открывающей диалоговое окно Open (Открыть).
Таблицу с результатами запроса можно в любой момент открыть, просмотреть, ввести в нее изменения.
Вывод результатов запроса
В главе 9 нами были рассмотрены основные вопросы создания запросов. Результаты запроса отображались в табличном виде на экране. В этой главе рассмотрим, как еще можно использовать результаты выполнения запроса.
Visual FoxPro может направить результат выборки в стандартную результирующую таблицу, которая отображается на экране в режиме Browse (Обзор), во вновь создаваемую таблицу, в курсор или в активное окно.
Для изменения направления вывода используется диалоговое окно Query Destination (Результат запроса) (рис. 18.1). Чтобы его открыть, выполните одно из приведенных далее действий.
Нажмите кнопку Query Destination (Результат запроса) на панели инструментов Query Designer (Конструктор запроса).
В меню Query (Запрос) выберите команду Query Destination (Результаты запроса).
Диалоговое окно Query Destination (Результаты запроса) содержит кнопки, описанные в табл. 18.1.
Таблица 18.1. Назначение кнопок диалогового окна Query Destination
Кнопка | Назначение | |
Browse (Обзор) | Сохраняет результат выборки в стандартной результирующей таблице и отображает результаты запроса в режиме Browse (Обзор) на экране | |
Cursor (Курсор) | Обеспечивает временное хранение результатов запроса в виде, доступном только для чтения | |
Table (Таблица) | Сохраняет результаты запроса в таблице | |
Screen (Экран) | Отображает результаты выборки в активном окне |
Рис. 18.1. Диалоговое окно Query Destination
При нажатии этих кнопок диалоговое окно видоизменяется, позволяя определить дополнительные параметры вывода данных запроса.
Базовые классы Visual FoxPro
При создании объектов приложения вы можете использовать базовые классы Visual FoxPro, классы внешних библиотек, а также создавать новые классы.
Visual FoxPro содержит большое число базовых классов (табл. 19.1), которые можно использовать при создании форм любой сложности. Единственным недостатком базовых классов является невозможность их модификации, но вы можете использовать базовые классы для создания пользовательских классов, полностью вами управляемых. Далее при создании форм можно применять пользовательские классы вместо базовых.
Таблица 19.1. Базовые классы Visual FoxPro
Наименование | Назначение | Видимый | Контейнер | ||||
ActiveDoc | Активный документ | Нет | Нет | ||||
CheckBox | Флажок | Да | Нет | ||||
Column | Столбец | Да | Да | ||||
ComboBox | Раскрывающийся список | Да | Нет | ||||
CommandButton | Кнопка управления | Да | Нет | ||||
CommandGroup | Набор кнопок управления | Да | Да | ||||
Container | Контейнер | Да | Да | ||||
Control | Базовый визуальный класс | Да | Нет | ||||
Custom | Базовый невизуальный класс | Нет | Нет | ||||
EditBox | Поле редактирования | Да | Нет | ||||
Form | Форма | Да | Да | ||||
FormSet | Набор форм | Нет | Да | ||||
Grid | Таблица | Да | Да | ||||
Header | Заголовок столбцов таблицы | Да | Нет | ||||
HyperLink Object | Гиперссылка | Нет | Нет | ||||
Image | Изображение | Да | Нет | ||||
Label | Надпись | Да | Нет | ||||
Line | Линия | Да | Нет | ||||
ListBox | Список | Да | Нет | ||||
01eContainerControl | OLE-объект управления | ||||||
OleBoundControl | OLE-объект данных | ||||||
OptionButton | Переключатель | Да | Нет | ||||
OptionGroup | Набор переключателей | Да | Да | ||||
Page | Вкладка формы | Да | Да | ||||
PageFrame | Макет страницы | Нет | Да | ||||
ProjectHook | Проект | Нет | Да | ||||
Separator | Разделитель | Да | Нет | ||||
Shape | Обрамление | Да | Нет | ||||
Spinner | Счетчик | Да | Нет | ||||
TextBox | Поле ввода | Да | Нет | ||||
Timer | Таймер | Нет | Нет | ||||
ToolBar | Панель управления | Да | Да |
Почти все базовые классы являются визуальными. Объекты, созданные на их основе, отображаются на экране. Некоторые из базовых классов невидимы. Они используются для объединения объектов (например, FormSet), обработки специальных событий (например, Timer) или создания невизуальных объектов (например, ProjectHook).
В Visual FoxPro широко применяется вложенность классов. Вложенным является класс, являющийся частью другого класса, называемого контейнером (container class). Наиболее яркий пример контейнера представляет собой таблица, компоненты которой — это столбцы и надписи к ним. При создании формы и после запуска ее на выполнение вы можете получить доступ ко всем компонентам контейнера.
Каждый базовый класс предназначен для выполнения определенных функций и обладает соответствующим набором свойств, методов и событий. Кроме свойств и событий, специфических для данного класса, каждый базовый класс содержит основной набор свойств (табл. 19.2) и событий (табл. 19.3).
Таблица 19.2. Минимальный набор свойств класса
Наименование | Описание |
Class | Тип класса |
BaseClass | Базовый класс, на основе которого создан данный класс |
ClassLibrary | Библиотека классов, в которой хранится данный класс |
ParentClass | Определенный пользователем класс, на основе которого создан данный класс |
Наименование | Описание |
Init | Наступает при создании объекта |
Destroy | Наступает при освобождении обьекта из памяти |
Error | Наступает при возникновении ошибки, связанной с объектом |
Библиотека классов
Библиотеки классов используются для хранения созданных в Visual FoxPro пользовательских классов. Для создания библиотеки предназначено диалоговое окно New Class (Новый класс), рассмотренное нами в предыдущем разделе. При разработке приложения удобно иметь несколько библиотек классов, в которых размещаются отдельные группы классов. Например, в одной библиотеке можно располагать все классы кнопок, используемых в приложении, а в другой — классы форм.
В случае необходимости вы можете копировать класс из одной библиотеки в другую. Для этого перейдите на вкладку Classes (Классы) окна проекта и раскройте обе библиотеки. Затем выберите копируемый класс, нажмите кнопку мыши и, удерживая ее нажатой, перенесите класс в новую библиотеку. В заключение отпустите кнопку мыши.
Для удаления класса из библиотеки выберите класс и нажмите кнопку Remove (Удалить) в окне проекта.
При необходимости вы можете переименовать выбранный класс, используя команду Rename (Переименовать) контекстного меню окна проекта.
Замечание
Для удаления класса из библиотеки классов вы можете воспользоваться командой remove class, а для изменения имени класса — командой rename CLASS.
Форма просмотра информации о клиентах на основе пользовательских классов
Рассмотрим создание формы просмотра информации о клиентах, используя класс bcsingieTabie, созданный в предыдущем примере.
Откройте диалоговое окно Options (Параметры).
На вкладке Forms (Формы) установите флажок Form (Форма).
В открывшемся диалоговом окне Form Template (Шаблон формы) (см. рис. 19.23) выберите пользовательскую библиотеку Forms (Формы).
В области Class Name (Имя класса) выберите требуемый класс bcSingleTable.
Нажмите кнопку ОК.
6. Вернувшись в диалоговое окно Options (Параметры), нажмите кнопку ОК для его закрытия.
Откройте проект sales.
В окне проекта выберите вкладку Documents (Документы), затем перейдите в раздел Forms (Формы) и нажмите кнопку New (Новый). На экране открывается окно конструктора форм, которое содержит объекты класса bcSingleTable (рис. 19.24).
Выберите текстовый объект, расположенный в верхней части формы, и измените его свойство caption (Надпись), введя Просмотр информации о клиентах.
В окно окружения формы добавьте таблицу customer.
Установите свойства объекта Grid (Таблица). Для этого задайте количество столбцов в таблице, свяжите их с полями таблицы customer и определите заголовки полей. На этом создание формы заканчивается (рис. 19.25).
Сохраните форму и запустите ее на выполнение.
Рис. 19.24. Начальная стадия создания формы, основанной на пользовательском классе
Рис. 19.25. Форма просмотра информации о клиентах
Формирование списка библиотек, используемых в конструкторах форм и классов
Для добавления библиотек классов на панель инструментов Form Controls (Элементы управления формы) можно использовать не только опцию Add (Добавить) всплывающего меню кнопки View Classes (Показать классы), но и вкладку Controls (Элементы управления) (рис. 19.21) диалогового окна Options (Параметры). Для его открытия выполните команду Options (Параметры) из меню Tools (Сервис).
Чтобы определить библиотеки классов, установите переключатель Visual class libraries (Библиотеки визуальных классов). Затем заполните список Selected (Выбранные) названиями библиотек классов, которые вы собираетесь отображать на панели инструментов. Для добавления нового класса в этот список используется кнопка Add (Добавить), при нажатии которой открывается диалоговое окно Open (Открыть). В этом окне найдите и выберите требуемую библиотеку классов. Удаление из списка выбранной библиотеки осуществляется нажатием кнопки Remove (Удалить). При нажатии кнопки Set As Default (Использовать по умолчанию) введенные установки будут использоваться и в следующих сеансах работы с Visual FoxPro.
Рис. 19.21. Вкладка Controls диалогового окна Options
Использование базовых классов при создании форм
При создании форм мы широко использовали базовые классы, список которых содержится на панели инструментов конструктора формы. Для создания объектов на основе базового класса достаточно выбрать его на панели инструментов, поместить в требуемом месте, а затем определить свойства и методы созданных объектов. Созданный объект будет обладать всеми характеристиками базового класса. Пример создания объекта на основе базового класса Grid (Таблица) показан на рис. 19.1.
Для создания новых объектов можно использовать не только конструктор форм, но и функцию createobject, которая имеет следующий синтаксис:
CREATEOBJECT(имяКласса [, параметр!!, параметр2, ...])
Функция createobject возвращает идентификатор созданного объекта, который вы можете применять для ссылки на него. Например, для создания формы, определения ее заголовка и отображения формы на экране необходимо выполнить такую последовательность команд:
frmNew=CREATEOBJECT("FORM")
frmNew.Caption="3ar<MOBOK формы"
fnnNew. Show ()
Рис. 19.1. Создание объекта в конструкторе форм
Использование формы для создания класса
В Visual FoxPro имеется возможность использования существующей формы для создания класса. Вы можете сохранить всю форму в виде класса или же выбрать определенные объекты формы и сохранить их в виде одного класса. Созданная в предыдущем примере форма содержит некоторую часть информации о клиентах. В создаваемом приложении могут понадобиться еще несколько форм для просмотра информации о клиентах, каждая из которых отображает определенную часть информации. В этом случае желательно иметь класс формы просмотра информации о клиентах, который содержит всего лишь два поля icdCustomer и cCompany таблицы Customer. Для создания такого класса воспользуемся формой, созданной в предыдущем примере.
Откройте окно конструктора для формы, созданной в предыдущем примере.
В объекте Grid (Таблица) удалите все столбцы, за исключением столбцов с полями icdCustomer и cCompany (рис. 19.26).
Рис. 19.26. Подготовка формы для создания класса
В меню File (Файл) выберите команду Save As Class (Сохранить как класс).
В открывшемся диалоговом окне Save As Class (Сохранить как класс) (рис. 19.27) установите переключатель Save (Сохранить) в положение Current form (Текущая форма). В поле Name (Имя) укажите имя класса и имя библиотеки, в которой будет располагаться класс, а в поле Description (Описание) — его краткое описание. После ввода всех атрибутов нажмите кнопку ОК, в результате в указанной библиотеке будет создан новый класс.
Рис. 19.27. Сохранение формы просмотра в качестве класса
Совет
Для сохранения объектов формы в виде класса выделите их в форме, а затем в диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Selected controls (Выбранные элементы управления). Для сохранения набора форм в виде класса откройте окно конструктора для набора форм и в диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Entire form set (Набор форм). Опция DataEnvironment (Окружение данных) позволяет сохранить также окружение данных, которое используется в классе.
Использование классов
Классы и объекты тесно связаны друг с другом, но, тем не менее, эти понятия не тождественны. Класс содержит информацию о том, как должен выглядеть объект и определяет выполняемые им действия. Объект является экземпляром класса, который наследует характеристики класса.
Использование пользовательских классов для создания объектов формы
В данной главе был рассмотрен пример создания класса формы, причем при создании кнопок перемещения по записям и выхода использовался базовый класс кнопки. Теперь, после создания собственных классов кнопок, можно заменить базовые классы на пользовательские. Для этого выполните следующие действия:
Откройте проект sales.
В окне проекта перейдите на вкладку Classes (Классы), выберите в библиотеке Forms (Формы) класс bcsingieTabie и нажмите кнопку Modify (Модифицировать).
В окне конструктора классов появится созданный нами ранее пользовательский класс формы для просмотра данных из одиночной таблицы.
Удалите из него созданные ранее кнопки.
Нажмите кнопку View Classes (Показать классы)
на панели инструментов Form Controls (Элементы управления формы).На экране появляется меню кнопки, содержащее список библиотек классов, а также команду Add (Добавить), которая позволяет добавить в этот список новую
библиотеку. Выберите команду Add (Добавить).В открывшемся диалоговом окне Open (Открыть) выберите созданную пользовательскую библиотеку Buttons (Кнопки) и нажмите Open (Открыть). В результате выбора наименования библиотеки классов в меню кнопки View Classes (Показать классы) появляется команда Buttons (Кнопки).
Выберите команду Buttons (Кнопки). На панели инструментов Form Controls (Элементы управления формы) размещаются значки классов выбранной библиотеки. Теперь можно размещать эти объекты в классе обычным образом.
Выберите на панели инструментов кнопки перемещения по записям и кнопку выхода из формы и разместите их в форме. Создание кнопок управления на этом заканчивается, так как действия, выполняемые ими, наследуются из классов кнопок. Вкладка Other (Другие) окна свойств содержит наименования класса объекта и библиотеки классов (рис. 19.17).
Рис. 19.17. Размещение объекта, основанного на пользовательском классе
Использование вложенных объектов
В Visual FoxPro имеются базовые классы, предназначенные для создания вложенных объектов, например класс Grid (Таблица). При ссылке на вложенный объект необходимо перечислить все объекты, в которые он входит, разделяя элементы списка точками. Например, ссылка на столбец coicusto-merid объекта Customer типа Grid (Таблица) определяется следующим образом:
Customer.colCustomerld
Ссылка такого типа называется абсолютной. В Visual FoxPro кроме абсолютной ссылки, которая при большой глубине вложения объекта является слишком громоздкой, вы можете использовать относительные ссылки, т. е. ссылки относительно активных в данный момент объектов (сам объект, форма, в которую входит объект, и группа форм), что значительно сокращает список объектов ссылки и позволяет получить доступ к объекту, даже если вы не знаете его имени.
Ссылка на активную форму осуществляется с помощью свойства ActiveForm (Активная форма) объекта (_screen). Например, следующее выражение позволяет изменить заголовок активной формы:
_SCREEN.ActiveForm.Caption="Заголовок формы"
Аналогично, свойство Activecontroi (Активный элемент управления) позволяет получить доступ к объекту формы, а свойство ActivePage (Активная вкладка) — к активной вкладке формы. Например, следующее выражение позволяет изменить надпись активной кнопки
„SCREEN.ActiveControl.Caption="Печать отчета"
При ссылке на вложенный объект вы можете использовать свойство Parent (Родительский) и ключевые слова для идентификации объекта, к которому вы хотите получить доступ. Свойство parent (Родительский) содержит ссылку на непосредственный контейнер объекта. Список ключевых слов и определяемые ими ссылки приведены в таблице 19.7.
Таблица 19.7. Ключевые слова для идентификации объектов
Наименование | Ссылка | ||
THIS | На сам объект | ||
THISFORM | На форму, которая содержит объект | ||
THISFORMSET | На группу форм, которая содержит объект |
Для примера определим цвет текущего объекта и объекта, являющегося его непосредственным контейнером, а также заголовки формы и группы форм, которые содержат данный объект:
THIS.BackColor=RGB(255,255,255)
THIS.Parent.BackColor=RGB(192,0,0)
THISFORM.Caption="Форма, содержащая объект"
THISFORMSET.Caption="rpynna форм, содержащая объект"
Каждый объект обрабатывает связанные с ним события независимо. Поэтому контейнер не может реагировать на события вложенного в него объекта даже в том случае, если данный объект не содержит метода для обработки события, а контейнер может реагировать на данное событие.
Ранее мы рассмотрели команды создания формы и присвоения ей заголовка. Теперь дополним эти команды командами размещения в форме кнопки, являющейся по отношению к ней вложенным объектом:
frmNew=CREATEOBJECT ( " FORM" )
frmNew.Caption="Форма, созданная с помощью команд"
fmiNew.ShowO
fnriNew.AddObject("Button", "CommandButton")
cmdButton=frmNew.Button
andButton.Visible=.T.
cmdButton.Top=190
ondButton.Left=160
cmdButton.Width=7 0
cmdButton.Height=30
cmdButton.Caption="Выход"
Команда frmNew. AddObjееt ("Button" , "CoiranandButton") создает В frmNew на основе базового класса CommandButton (Кнопка управления) новый объект Button (Кнопка). Следующая команда делает видимой созданную кнопку. На рис. 19.7 показана форма, созданная этими командами.
Совет
В прикладных программах объекты желательно сохранять невидимыми до полного определения всех их свойств.
Рис. 19.7. Форма с вложенным объектом — кнопкой
Наследование событий и методов
Visual FoxPro является языком, управляемым по событиям. Событие представляет собой некоторое действие, которое активизирует стандартную реакцию объекта. В качестве события в Visual FoxPro могут рассматриваться, например, нажатие кнопки мыши, выбор пункта меню или открытие таблицы.
Аналогично свойствам наследуются события и методы базового класса, на основе которого создается объект. Список методов, определенных для объекта, можно просмотреть на вкладке Methods (Методы) окна свойств объекта (рис. 19.4).
Для каждого события определен соответствующий ему метод, который выполняется при возникновении данного события. Например, метод click (Нажатие) выполняется при нажатии кнопки мыши.
Список доступных методов обработки событий определяется базовым классом. Именно эти методы обеспечивают обработку всех действий пользователя (нажатие клавиш, управление мышью). Visual FoxPro предоставляет возможность модифицировать действия, выполняемые при обработке события данного объекта. Для редактирования метода установите курсор на этот метод в списке методов и дважды щелкните мышью. На экране откроется окно редактирования метода (рис. 19.5), в котором вы можете написать программу обработки события. Например, для кнопки формы вы можете определить программу перемещения по записям.
Для каждого события объекта выполняется определенное в базовом классе действие. В некоторых случаях вам может понадобиться запретить выполнение этих действий. Для этого используйте ключевое слово nodefault в начале метода, связанного с этим событием.
Рис. 19.4. Вкладка Methods окна свойств объекта
Рис. 19.5. Окно редактирования методов
Замечание
Методы, выполняющиеся при наступлении событий, в окне свойств объекта в списке методов в дополнение к имени содержат слово Event (Событие).
Команда mouse позволяет вам программным путем имитировать события click (Нажатие), Doubleclick (Двойное нажатие), MouseMove (Перемещение мыши) и DragDrop (Перенести и оставить). Остальные события не могут имитироваться программно, но вы можете вызвать методы, связанные с этими событиями.
Кроме методов, связанных с событиями, объект может содержать и дополнительные методы, которые выполняются только при их вызове. Например, для формы могут быть определены методы перехода на следующую запись, удаления записи и т. п. Эти методы могут наследоваться из базового класса, но вы можете создавать новые методы и для отдельных объектов.
Для создания нового метода в меню Form (Форма) выберите команду New Method (Новый метод) и в открывшемся диалоговом окне New Method (Новый метод) (рис. 19.6) определите имя и краткое описание метода. Созданный вами метод добавляется в список методов объекта, и вы можете открыть окно редактирования метода для ввода программного кода.
Для выполнения метода необходимо не только указать имя метода, но и объект, к которому данный метод будет применяться. Имя объекта и имя метода разделяются точкой. Например, для выполнения метода caicsum формы Sales необходимо выполнить команду Sales.CalcSumO.
Рис. 19.6. Диалоговое окно New Method
В табл. 19.5 и. 19.6 приведены основные события и методы, которые распознаются и используются Visual FoxPro, а также их краткое описание. Полный их список и подробное описание вы найдете в справочной системе.
Таблица. 19.5. События, распознаваемые Visual FoxPr
Событие | Возникает |
Activate | При активизации объектов FormSet (Набор форм), Form (Форма), Page (Вкладка формы) или при отображении объекта Toolbar (Панель управления) |
AfterBuilld | При перестроении проекта или приложения, а также при создании динамической библиотеки (dll) или выполняемого файла (ехе) на основе проекта |
AfterCloseTables | После закрытия таблиц или представлений данных |
AfterDock | После того, как фиксируется панель инструментов |
AfterRowColChange | При переходе в другую строку или другой столбец объекта Grid (Таблица) |
BeforeDock | Имеет место перед фиксацией объекта ToolBar (Панель управления) |
BeforeOpenTables | Перед открытием таблиц и представлений, связанных со средой данных формы, набора форм или отчета |
BeforeRowCoIChange | Перед тем, как пользователь изменяет активную строку или столбец объекта Grid (Таблица) |
Click | При нажатии и отпускании левой кнопки мыши |
ConunandTargetExec | При активизации программой-контейнером приложения типа Active Document (Активный документ) |
CommandTa rget Query- | При изменении программой-контейнером пользовательского интерфейса |
Con tainerRel ease | При закрытии программой-контейнером приложения типа Active Document (Активный документ) |
DblClick | При двойном нажатии и отпускании левой кнопки мыши |
Deactivate | Когда деактивизируется объект типа форма |
Deleted | Когда пользователь удаляет пометку записи на удаление или когда выдается команда delete |
Destroy | Когда освобождается объект |
DownClick | При нажатии кнопки со стрелкой, направленной вниз на объектах типа comboBox (Раскрывающийся список). ListBox (Список) и Spinner (Счетчик) |
DragDrop | После завершения операция "перенести-и-оставить" |
DragOver | Когда элемент управления, переносимый с помощью мыши, накрывает объект назначения |
DropDown | В момент, когда после нажатия кнопки со стрелкой в элементе управления ComboBox (Раскрывающийся список) должен появиться список |
Error | При возникновении ошибки |
ErrorMessage | Используется для определения сообщения об ошибке, когда событие Valid возвращает значение False |
GotFocus | Когда объект получает фокус в результате действий пользователя или выполнения программного кода |
HideDoc | При переходе из активного документа |
Init | При создании объекта, когда объект еще не выведен на экран |
Interactive Change | При изменении значения элемента управления с помощью клавиатуры или мыши |
KeyPress | При нажатии и отпускании клавиши |
Load | Имеет место непосредственно перед созданием объекта |
LostFocus | Когда объект теряет фокус |
Message | Отображает сообщение в строке состояния, когда объект получает управление |
MiddleClick | При нажатии средней кнопки мыши (для трехкнопочной мыши) |
MouseDown | При нажатии кнопки мыши |
MouseMove | При перемещении указателя мыши по объекту |
MouseUp | При отпускании кнопки мыши |
MouseWheel | При вращении колесика мыши, если мышь его содержит |
Moved | При перемещении объекта на новое место или когда значения свойства тор или Left объекта-контейнера изменяются программным способом |
OLECompleteDrag | Когда данные помещены на новое место или отменена операция "перенести-и-оставить" |
OLEDragOver | Возникает в том случае, если свойство OLEDropMode имеет значение 1 и данные перенесены от источника к приемнику |
OLEGiveFeedBack | После каждого события OLEDragOver |
OLESetData | Возникает у источника данных при выполнении метода GetData, если нет данных в нужном формате |
OLEStartDrag | В начале переноса данных с помощью механизма "пере-нести-и-оставить" |
Paint | При перерисовывании формы или панели инструментов |
ProgrammaticChange | При изменении в коде значения элемента управления |
QueryAddFile | Перед добавлением файла в проект |
QueryModifyFile | Перед изменением файла в проекте |
QueryRemoveFile | Перед удалением файла из проекта |
QueryRunFile | Перед выполнением файла или предварительным просмотром отчета или почтовой этикетки |
QueryUnload | Перед выгрузкой объекта Form (Форма) |
RangeHigh | Возвращает наибольшее значение счетчика или число элементов списка и имеет место, когда элемент управления Spinner (Счетчик) или TextBox (Поле ввода) теряет фокус и когда элемент управления ComboBox (Раскрывающийся список) или ListBox (Список) получает фокус |
RangeLow | Возвращает наименьшее значение счетчика или значение первого элемента списка и имеет место, когда элемент управления spinner (Счетчик) или TextBox (Поле ввода) теряет фокус или когда элемент управления ComboBox (Раскрывающийся список) или ListBox (Список) получает фокус |
ReadActivate | При активизации новой формы в наборе форм |
ReadDeactivate | При деактивизации формы в наборе форм |
ReadShow | Когда выдана команда show gets, в активном объекте FormSet (Набор форм) активизируется объект FormSet (Набор форм) |
ReadValid | Имеет место после деактивизации объекта FormSet (Группа форм) |
ReadWhen | Имеет место после загрузки объекта FormSet (Набор форм) |
Resize | При изменении размеров объекта |
RightClick | При нажатии и отпускании правой кнопки мыши |
Run | Имеет место, когда Active Document (Активный документ) готов к выполнению кода пользователя |
Scrolled | При прокрутке данных в объекте управления Grid (Таблица) |
ShowDoc | При переходе в активный документ |
Timer | Когда истекает интервал времени, заданный свойством Interval (Интервал) |
UIEnable | Имеет место для всех объектов, содержащихся внутри обьекта Page (Вкладка формы), каждый раз когда объект Page (Вкладка формы) активизируется или деактивизи-руется |
UnDock | При перемещении объекта ToolBar (Панель управления) с помощью мыши |
Unload | При освобождении объекта |
UpClick | При нажатии кнопки с направленной вверх стрелкой на объектах управления типа ComboBox (Раскрывающийся список), ListBox (Список) и Spinner (Счетчик) |
Valid | Перед тем, как элемент управления теряет фокус |
When | Перед тем, как элемент управления получает фокус |
Таблица 19.6. Методы, используемые Visual FoxPro
Метод | Описание |
ActivateCell | Активизирует ячейку в элементе управления Grid (Таблица) |
AddColumn | Добавляет объект Column (Столбец) в элемент управления Grid (Таблица) |
Add I tern | Добавляет новый элемент списка в объект ComboBox (Раскрывающийся список) или ListBox (Список), предоставляя при этом возможность задать индекс элемента |
AddListltem | Добавляет новый элемент списка в объект ComboBox (Раскрывающийся список) или ListBox (Список), давая возможность задать идентификатор элемента |
AddObject | Добавляет объект в контейнер на этапе выполнения |
AddProperty | Добавляет новое свойство в объект |
AddToSCC | Добавляет файл в проект |
Box | Рисует прямоугольник в форме |
Build | Перестраивает проект или создает приложение (арр), динамическую библиотеку (dll) или выполняемый файл (ехе) из проекта |
Checkln | Запоминает изменения, осуществленные в выбранном файле проекта |
Checkout | Выбирает файл из проекта для изменения |
Circle | Рисует окружность или эллипс в форме |
Cleanup | Очищает таблицу проекта, удаляя записи с пометкой на удаление и сжимая Memo-поля |
Clear | Очищает содержимое элемента управления comboBox (Раскрывающийся список) или ListBox (Список) |
ClearData | Очищает все данные и форматы данных в объекте Dataobject (Объект данных). Доступен только в режиме выполнения программы |
CloneObject | Создает копию объекта со всеми его свойствами, событиями и методами |
Close | Закрывает проект и очищает объекты ProjectHook (Проект) и Project (Проект) |
CloseTables | Закрывает таблицы и представления данных, связанные со средой |
Cls | Удаляет графику и текст из формы |
DataToClip | Копирует группу записей в текстовом виде в буфер обмена Windows |
DeleteColumn | Удаляет объект Column (Столбец) из элемента управления Grid (Таблица) |
Dock | Располагает объект ToolBar (Панель управления) у границы основного окна Visual FoxPro |
DoCmd | Выполняет команду Visual FoxPro для сервера приложения Visual FoxPro |
DoScroll | Моделирует работу пользователя с полосами прокрутки в объекте Grid (Таблица) |
DoVerb Drag |
Выполняет команду для заданного OLE-объекта Начинает, заканчивает или отменяет операцию переноса объекта с помощью мыши |
Draw | Перерисовывает объект формы |
Eval | Вычисляет выражение и возвращает результат |
GetData | Заполняет данные из объекта DataObject (Объект данных). Доступен только в режиме выполнения программы |
GetFormat | Возвращает True, если заданный формат доступен для объекта Dataobject (Объект данных). Доступен только в режиме выполнения программы |
GetLatestVersion | Определяет последнюю версию файла проекта и копирует файл с пометкой только для чтения на диск |
GoBack | Возникает при возврате назад в списке хронологии программы-контейнера |
GoForward | Возникает при переходе вперед в списке хронологии программы-контейнера |
Help | Открывает окно справки |
Hide | Скрывает объект Form (Форма), FormSet (Набор форм) или ToolBar (Панель управления), присваивая его свойству Visible значение False |
IndexToItemID | Возвращает индекс элемента с указанным идентификатором для объектов типа ComboBox (Раскрывающийся список) и ListBox (Список) |
Item | Возвращает объектную ссылку на определенный файл, проект или сервер в файловом, проектном, серверном сборнике |
ItemlDToIndex | Возвращает индекс позиции элемента в списке данного элемента управления для объектов типа ComboBox (Раскрывающийся список)и ListBox (Список) |
Line | Рисует линию в форме |
Modify | Открывает файл проекта для редактирования в соответствующем конструкторе или редакторе |
Move | Перемещает объект |
NavigateTo | Active Document (Активный документ) перемещается в контейнере в определенное место |
OLEDrag | Начинает операцию "перенести-и-оставить" |
Point | Возвращает цвет в модели RGB (красный-зеленый-синий) для заданной точки формы |
Выдает в объекте Form (Форма) символьную строку, которую нужно напечатать | |
PSet | Устанавливает для точки формы или основного окна Visual FoxPro основной цвет символов |
Quit | Завершает работу Visual FoxPro |
ReadExpression | Возвращает выражение, введенное в качестве значения свойства в окне свойств |
ReadMethod | Возвращает текст заданного метода |
Refresh | Перерисовывает объект Form (Форма) или элемент управления, обновляя все значения |
Release | Освобождает объект FormSet (Набор форм) или Form (Форма) из памяти |
Remove | Удаляет файл из сборника файлов и проектов |
RemoveFromSCC | Удаляет файл из проекта |
RemoveItem | Удаляет элемент из списка элемента управления типа СотЬоВох (Раскрывающийся список) или ListBox (Список) |
RemoveListltem | Удаляет элемент из списка элемента управления типа СотЬоВох (Раскрывающийся список) или ListBox (Список) |
RemoveObj ec t | Удаляет заданный объект из объекта-контейнера на этапе выполнения |
Requery | Повторно опрашивает источник строк, к которому привязан элемент управления типа ListBox (Список) или СотЬоВох (Раскрывающийся список) |
RequestData | Создает массив, содержащий данные из таблицы Visual FoxPro |
Reset | Сбрасывает элемент управления Timer в нулевое состояние |
ResetToDefault | Восстанавливает принятые по умолчанию в Visual FoxPro значения свойства, события или метода |
Run | Запускает файл проекта на выполнение или предварительный просмотр |
SaveAs | Сохраняет объект в виде файла с расширением SCX |
SaveAsClass | Сохраняет экземпляр объекта в качестве определения класса в библиотеке классов |
SetAll | Присваивает установку некоторого свойства всем элементам управления данного объекта container (Контейнер) или определенному классу таких элементов управления |
SetData | Помещает данные в Dataobject (Объект данных). Доступен в режиме выполнения программы |
SetFocus | Устанавливает фокус в элементе управления |
SetFormat | Помещает формат данных в Dataobject (Объект данных). Доступен в режиме выполнения программы |
SetMain | Делает текущий файл главным в проекте |
SetVar | Создает переменную и хранит ее значение |
SetViewPort | Определяет значения ViewPortLeft и ViewPortTop для формы |
Show | Отображает объект Form (Форма) и определяет его тип — модальный или немодальный |
ShowWhatsThis |
Отображает тему справочной системы, заданную свойством WhatsThisHelpID |
TextHeight | Возвращает высоту текстовой строки, используя единицу измерения, устанавливаемую свойством ScaleMode объекта Form (Форма) |
TextWidth | Возвращает ширину текстовой строки, используя единицу измерения, устанавливаемую свойством ScaleMode объекта Form (Форма) |
UndoCheckOut | Отменяет все изменения, осуществленные в выбранном файле, и оставляет его в проекте в неизмененном виде |
WhatsThisMode | Отображает курсор мыши в виде вопросительного знака и устанавливает режим whats This Help (Справка типа что это?) |
WriteExpression | Записывает символьную строку в таблицу свойств |
WriteMethod | Записывает указанный текст в заданный метод |
ZOrder | Помещает заданный объект Form (Форма) или элемент управления в заданную позицию данного объекта по отношению к другим объектам |
Пользовательские классы
В предыдущих главах при создании форм мы использовали базовые классы Visual FoxPro. В случае необходимости вы могли добавлять в объекты, созданные на основе базовых классов, новые свойства и методы. Одним из способов повышения производительности разработки является определение стандартных объектов создаваемого приложения и разработка классов для таких объектов. При разработке приложений для больших фирм классы часто используются для стандартизации пользовательского интерфейса. Вы можете определить класс форм, в котором задан определенный цвет фона и стандартный набор кнопок для управления данными. В целях обеспечения стандартизации разработки полезно иметь один или несколько пользовательских классов для каждого базового класса. Например, вы можете определить отдельный класс для поля ввода, которое доступно только для чтения, и класс для редактируемого поля ввода. Если в дальнейшем вам понадобится изменить стандарт, то будет достаточно изменить только пользовательские классы, на основе которых создаются объекты приложения.
Просмотр информации о классе и определение значка для его обозначения
Для просмотра информации о классе и определения значка для него используется диалоговое окно Class Info (Информация о классе), открываемое при выборе из меню Class (Класс) команды Class Info (Информация о классе).
Вкладка Class (Класс) содержит поля ввода изображений значков классов и поле редактирования Description (Описание), в которое можно ввести краткое описание класса.
На вкладке Members (Члены) (рис. 19.18) отображается список объектов класса, а также перечень методов и свойств. Столбец Class (Класс) содержит наименование объектов, а столбец Name (Наименование) — свойства и методы класса. С помощью параметра Visibility (Видимость), который может принимать одно из трех значений — Public (Открытый), Protected (Защищенный) и Hidden (Скрытый), вы можете установить степень защищенности объекта, а в столбце No Init (He инициатизировать) указать, будет ли выполняться метод mit (Инициализация) при создании объекта.
Рис. 19.18. Вкладка Members диалогового окна Class Info
Для каждого класса вы можете указать два значка, вид которых задается на вкладке Class (Класс) (рис. 19.19). Имя первого из них вводится в поле ввода Toolbar icon (Значок на панели инструментов) и в дальнейшем отображается на панели инструментов Form Controls (Элементы управления формы) в окнах конструктора форм и конструктора классов при выборе библиотеки классов, содержащей данный класс. Имя второго значка вводится в поле ввода Container icon (Значок контейнера) и отображается в диалоговом окне Class Browser (Обзор класса). Для задания значка вы можете ввести имя графического файла непосредственно в поля ввода или использовать кнопки выбора файла, расположенные справа от полей.
Совет
Настоятельно рекомендуется определять значки для создаваемых классов. В противном случае вам будет трудно выбирать пользовательские классы на панели инструментов Form Controls (Элементы управления формы), так как они будут иметь значки базовых классов и отличить один от другого можно только по всплывающей подсказке.
Рис. 19.19. Вкладка Class диалогового окна Class Info
Рис. 19.20. Диалоговое окно Edit Property/Method
С помощью кнопки Modify (Модифицировать), расположенной на вкладке Members (Члены) диалогового окна Class Info (Информация о классе), вы можете изменить параметры объектов, свойств и методов объектов, входящих в класс. При нажатии на эту кнопку открывается диалоговое окно Edit Property/Method (Редактирование свойства/метода) (рис. 19.20), которое содержит таблицу с перечнем всех объектов, свойств и методов (табл. 19.9).
Таблица 19.9. Назначение столбцов таблицы диалогового окна Edit Property/Method
Столбец | Назначение |
Name (Наименование) | Наименование объекта, свойства или метода |
Туре (Тип) | Тип объекта: О — объект, М — метод, Р — свойство |
Access (Доступ) | Данный столбец указывает, создан ли метод Access для свойства |
Assign (Назначение) | Данный столбец указывает, создан ли метод Assign для свойства |
Visibility (Видимость) | Определяет тип свойства или метода |
Создание форм на основе пользовательских классов
С помощью вкладки Forms (Формы) (рис. 19.22) диалогового окна Options (Параметры) вы можете задать класс формы, который будет использоваться при создании новой формы.
Для выбора класса, используемого при создании формы, выполните следующие действия:
На вкладке Forms (Формы) диалогового окна Options (Параметры) в области Template classes (Шаблон классов) установите флажок Form (Форма).
Откроется диалоговое окно Form Template (Шаблон формы) (рис. 19.23). Выберите библиотеку, а затем в области Class Name (Имя класса) — требуемый класс.
Нажмите кнопку ОК.
Вернувшись в диалоговое окно Options (Параметры), нажмите кнопку ОК для его закрытия.
Аналогичным образом вы можете установить и пользовательский класс для создания наборов форм.
Рис. 19.22. Выбор класса, используемого при создании формы
Рис. 19.23. Диалоговое окно Form Template
Замечание
Пользовательский класс, используемый при создании набора форм, определяется аналогичным образом. Только на вкладке Forms (Формы) диалогового окна Options (Параметры) необходимо установить флажок Form set (Набор форм).
Создание класса типа форма
Рассмотрим создание класса для просмотра данных из одиночной таблицы, который содержит кнопки для перемещения по записям и выхода из формы.
Откройте проект sales, в окне проекта выберите вкладку Classes (Классы) и нажмите кнопку New (Новый).
В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcSingleTable.
Из списка Based On (Базовый класс) выберите базовый класс Form (Форма).
В поле Store In (Сохранить в) введите имя библиотеки классов Forms (Формы), в которой будет храниться создаваемый класс.
На экране появляется пустая форма. Прежде всего, изменим свойство caption (Надпись) формы, введя в поле ввода значения свойства текст Табличная форма просмотра.
Далее разместим в верхней части формы текст заголовка и определим для него цвет и размер шрифта (рис. 19.10). Форма, созданная на основе данного класса, будет содержать размещенный в классе текст заголовка. Разработчику формы потребуется только изменить текст заголовка, причем будут соблюдены все стандарты на создаваемую форму.
Рис. 19.10. Размещение заголовка формы
Разместите в форме объект Grid (Таблица) и определите его свойства отображения данных, такие как шрифт, цвет, которые будут стандартными для просмотра данных в табличном виде.
Установите для объекта Grid (Таблица) значение свойства Readonly (Только чтение) равным True (Истина), так как данную форму предполагается использовать только для просмотра данных.
Для перемещения по записям, а также для выхода из формы используются кнопки, которые мы также разместим в форме и определим для них действия, выполняемые при нажатии кнопок.
Законченный вид класса приведен на рис. 19.11. Отметьте, что создание класса аналогично созданию формы.
Рис. 19.11. Класс для просмотра данных в табличном виде
Создание кнопки, содержащей изображение, для выхода из формы
На многих кнопках, используемых в Windows, имеется графическое изображение, которое занимает меньше места, чем текст, и является более информативным. В качестве примера использования подклассов создадим кнопку, предназначенную для выхода из формы (она будет содержать изображение вместо текста). Для этого выполните следующие действия:
На вкладке Classes (Классы) нажмите кнопку New (Новый).
В открывшемся диалоговом окне New Class (Новый класс) введите в поле ввода Class Name (Имя класса) имя создаваемого класса bcCmdPicExit. В поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons, в которой будет храниться создаваемый класс. В качестве базового класса для создания нового класса выберите созданный на предыдущем шаге класс bcCmdTxtExit из библиотеки классов Buttons (Кнопки).
Для создаваемого класса наследуется метод, выполняемый при нажатии кнопки мыши, поэтому нам необходимо только изменить внешний вид кнопки. Удалите надпись кнопки.
Рис. 19.16. Определение кнопки с изображением
В поле ввода свойства Picture (Изображение) укажите имя файла с изображением, которое будет отображаться на кнопке (рис. 19.16).
Совет
Аналогичным образом вы можете создать классы для кнопок перемещения по записям и разместить их в библиотеке Buttons (Кнопки).
Создание панели инструментов
Панели инструментов являются неотъемлемой частью приложений Windows. Visual FoxPro также позволяет разрабатывать класс панели инструментов и использовать его при создании объекта панели инструментов. Этот объект может использоваться в формах для управления перемещением по записям, поиска данных и т. п.
В качестве примера создадим класс панели инструментов, предназначенный для просмотра данных таблицы. На панели содержатся кнопки перемещения по записям и выхода из формы. Выполните следующие действия:
Откройте проект sales.
В окне проекта перейдите на вкладку Classes (Классы) и нажмите кнопку New (Новый).
В диалоговом окне New Class (Новый класс) выберите базовый класс Toolbar (Панель управления), введите имя класса bстаblетооlваr и укажите пользовательскую библиотеку классов ForForms, а затем нажмите кнопку ОК. В окне конструктора классов появляется панель инструментов, не содержащая ни одного объекта.
Используя ранее созданные классы кнопок, разместите на создаваемой панели инструментов графические кнопки перемещения по записям и выхода из формы (рис. 19.30).
Рис. 19.30. Создание класса панели управления для перемещения по записям таблицы
После создания класса панели инструментов кет необходимости размешать в формах кнопки перемещения по записям. Вместо них можно при инициализации формы создавать панель инструментов и использовать ее для перемещения по записям и выхода из формы. Рассмотрим пример создания формы, в которой для перемещения по записям используется панель инструментов:
Откройте проект sales.
В окне проекта перейдите на вкладку Classes (Классы) и нажмите кнопку New (Новый).
В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcSingleTableToolbar. Из списка Based On (Базовый класс) выберите базовый класс Form (Форма), а затем в поле ввода Store In (Сохранить в) введите имя библиотеки классов Forms (Формы), в которой будет храниться создаваемый класс.
Разместите в форме текст заголовка и объект Grid (Таблица).
Нам необходимо создать в форме объект типа панель инструментов на основе созданного в предыдущем примере класса. Для этого определите новое свойство oTooiBar формы, выполнив команду New Property (Новое свойство) из меню Class (Класс), а затем в методе Activate (Активизация) формы создайте объект типа панель инструментов и отобразите его на экране:
* Создаем панель инструментов
_screen.ActiveForm.oToolBar=CREATEOBJECT("bcTableToolBar")
* Отображаем панель инструментов на экране _screen.ActiveForm.oTooiBar.Show()
Результат выполненных действий показан на рис. 19.31. Сохраните созданный класс и закройте окно конструктора классов.
Теперь приступим к созданию формы на основе созданного в этом примере класса. Для этого откройте диалоговое окно Options (Параметры), перейдите на вкладку Forms (Формы) и установите в поле ввода Form (Форма) имя пользовательского класса bcSingieTabieTcoibar из библиотеки Forms (Формы).
Откройте проект sales.
В окне проекта выберите вкладку Documents (Документы), перейдите в раздел Forms (Формы) и нажмите кнопку New (Новый). На экране откроется окно конструктора форм, которое содержит объекты класса bcSingleTableToolbar. Обратите внимание на то, что в форме панель инструментов отсутствует. Она создается при запуске формы на выполнение.
Рис. 19.31. Создание класса формы, в которой используется панель инструментов
Рис. 19.32. Использование панели инструментов для просмотра таблицы
Выберите текстовый объект, расположенный в верхней части формы, и измените его свойство caption (Надпись), введя Просмотр информации о клиентах.
Добавьте в окружение формы таблицу Customer.
Установите свойства объекта Grid (Таблица). Для этого свяжите столбцы таблицы с полями таблицы Customer и определите заголовки столбцов.
На этом создание формы заканчивается. Сохраните ее и запустите на выполнение. На рис. 19.32 вы видите созданную форму в режиме выполнения.
Совет
Если при запуске данной формы на выполнение появляется сообщение о том, что. класс bcTableToolBar не найден, вам необходимо в методе Activate (Активизация) формы перед созданием объекта типа панель инструментов вставить команду set classlib to с указанием папки расположения класса.
Создание подклассов
При разработке приложений широко применяются подклассы, которые позволяют использовать уже имеющиеся пользовательские классы в качестве базы для создания следующих классов. Поскольку подкласс создается на базе ранее созданного класса и наследуются все свойства и методы, то достаточно добавить в подкласс новые свойства и методы или изменить некоторые свойства и методы базового класса.
Рассмотрим использование подклассов на примере создания нескольких классов кнопок. Сначала создадим подкласс пользовательской кнопки, для которой определим ее внешний вид. Далее на базе этого класса создадим текстовую кнопку перемещения на следующую запись. При определении этого класса определим надпись кнопки и выполняемое при нажатии на кнопку действие. Если понадобится кнопка для перемещения на следующую запись, содержащая вместо надписи графическое изображение, нет необходимости определять заново выполняемое при ее нажатии действие. Достаточно использовать в качестве базового класса кнопку с надписью и определить для нее графическое изображение. Если затем понадобится изменить свойства отображения кнопок, достаточно будет скорректировать данные свойства в первом из созданных подклассов кнопки, и изменения будут отслеживаться во всей иерархии подклассов, созданных на базе этого класса.
Создание пользовательского класса на основе базовых классов Visual FoxPro в конструкторе классов
Для создания нового класса вы можете выполнить одно из следующих действий:
в окне проекта выбрать вкладку Classes (Классы) и нажать кнопку New (Новый);
в меню File (Файл) выбрать команду New (Новый), а затем в открывшемся диалоговом окне — опцию Class (Класс) и нажать кнопку New File (Новый файл);
в командном окне ввести команду create class .
Независимо от выбранного вами способа, на экране откроется диалоговое окно New Class (Новый класс) (рис. 19.8).
Рис. 19.8. Диалоговое окно New Class
В поле ввода Class Name (Имя класса) этого диалогового окна укажите имя создаваемого класса, а в следующем поле ввода Based On (Базовый класс) — имя класса, на основе которого создается новый класс. Поле From (Откуда) доступно только для чтения и содержит имя библиотеки классов, из которой выбран базовый класс. При использовании базовых классов Visual FoxPro данное поле остается пустым.
В поле ввода Store In (Сохранить в) необходимо ввести имя библиотеки, в которой будет храниться создаваемый класс. Библиотека классов представляет собой файл с расширением VCX. Вы можете выбрать созданные ранее библиотеки или указать новую библиотеку в диалоговом окне Save as (Сохранить как), которое вызывается при нажатии на кнопку, расположенную с правой стороны поля ввода.
Замечание
Для создания библиотеки классов вы можете воспользоваться командой CREATE CLASSLIB в командном окне..
Рис. 19.9. Окно конструктора классов
После ввода значений в поля нажмите кнопку ОК, в результате чего на экране появится окно конструктора классов. В основное меню Visual FoxPro добавляется пункт Class (Класс) (рис. 19.9), который содержит команды, описанные в табл. 19.8.
Таблица 19.8. Назначение команд пункта меню Class
Команда | Назначение | ||
New Property (Новое свойство) | Создает новое свойство | ||
New Method (Новый метод) | Создает новый метод | ||
Edit Property/Method (Правка свойства/метода) | Редактирует наименование созданного ранее метода или свойства | ||
Include File (Включить файл) | Задает имя файла заголовка, содержащего описание предопределенных констант | ||
Class Info (Информация о классе) | Отображает информацию о текущем классе |
Окно конструктора классов аналогично окну конструктора форм. Если создаваемый класс является контейнером, вы можете размещать в классе объекты, которые в свою очередь могут создаваться на основе пользовательских классов. Для каждого объекта класса вы можете определить свойства и методы, а при необходимости добавить новые. Эти действия аналогичны действиям, выполняемым в окне конструктора форм. Обратимся к примеру создания простого класса, который в дальнейшем может использоваться при создании новых форм.
Создание текстовой кнопки выхода из формы
Рассмотрим создание класса кнопки выхода из формы. Будем использовать возможности, предоставляемые системой при создании подклассов.
Откройте проект sales.
В окне проекта выберите вкладку Classes (Классы) и нажмите кнопку New (Новый).
В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcCmdButton. Из списка Based On (Базовый класс) выберите базовый класс commandButton (Кнопка управления), а затем в поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons (Кнопки), в которой будет храниться создаваемый класс. Библиотека BASE.VCX будет содержать пользовательские классы, созданные на основе базовых классов Visual FoxPro, которые содержат свойства, характерные для данного приложения. На начальной стадии разработки вы можете оставить свойства базового класса без изменения. Такой подход позволяет вам достаточно просто изменить свойства объекта, если в этом возникнет необходимость.
Завершив ввод в поля, нажмите кнопку ОК.
На экране появляется окно конструктора классов, содержащее кнопку. Так как кнопка не является контейнером, вы не можете добавить в нее другие объекты. Ваши возможности ограничены изменением свойств и методов объекта. Для создаваемого класса кнопки измените наименование шрифта, а затем установите свойство caption (Надпись), введя в поле ввода значения свойства текст Кнопка (рис. 19.12).
Создание класса кнопки на этом завершено. Сохраните созданный класс и закройте окно конструктора классов.
Теперь приступим к созданию кнопки для выхода из формы. Находясь на вкладке Classes (Классы), нажмите кнопку New (Новый).
Рис. 19.12. Создание класса кнопки
В открывшемся диалоговом окне New Class (Новый класс) введите в поле ввода Class Name (Имя класса) имя создаваемого класса bcCmdTxtExit. В поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons (Классы), в которой будет храниться создаваемый класс. В данном случае для создания нового класса мы используем не базовый класс Visual FoxPro, а созданный на предыдущем шаге пользовательский класс. Поэтому нам необходимо указать не только имя класса, на основе которого будет создаваться новый класс, но и библиотеку, в которой он хранится. Для выбора библиотеки классов, а также класса из этой библиотеки, нажмите кнопку, расположенную правее списка Based On (Базовый класс). Откроется диалоговое окно Open (Открыть) (рис. 19.13).
Рис. 19.13. Выбор класса из библиотеки классов
Левая часть окна содержит стандартные средства выбора файла. В правой части диалогового окна находится список Class Name (Имя класса), который содержит список классов выбранной библиотеки. Выберите класс bcCmdButton, нажмите кнопку Open (Открыть), и вы вернетесь в диалоговое окно New Class (Новый класс), которое теперь будет содержать заполненные поля Based On (Базовый класс) и From (Откуда) (рис. 19.14). Нажмите кнопку ОК. В результате откроется окно конструктора классов, содержащее кнопку, которая наследует свойства класса (надпись на кнопке и шрифт), на основе которого мы будем создавать новый класс.
Рис. 19.14. Диалоговое окно New Class после выбора пользовательского класса
Для создаваемой кнопки измените надпись, введя в свойстве caption (Надпись) текст Выход.
Используя свойство click (Нажатие), определите действия, выполняемые при нажатии этой кнопки (рис. 19.15).
Сохраните класс и закройте окно конструктора классов.
Рис. 19.15. Определение свойств и методов для кнопки выхода из формы
Средство Class Browser
В Visual FoxPro имеется удобное средство, предназначенное для работы с классами, — это Class Browser (Обзор классов), с помощью которого вы можете просматривать библиотеки классов, создавать новые классы и редактировать существующие.
Для открытия окна Class Browser (Обзор классов) выполните одно из следующих действий:
в меню Tools (Сервис) выберите команду Class Browser (Обзор классов);
нажмите на стандартной панели инструментов кнопку
Class Browser (Обзор классов);в командном окне выполните команду do (_browser) .
Независимо от выбранного вами способа, будет запущено приложение Browser.app, которое открывает окно Class Browser (Обзор классов) (рис. 19.28), содержащее панель инструментов для управления классами и список объектов выбранной библиотеки.
Рис. 19.28. Окно Class Browser
После открытия библиотеки классов в левой части окна Class Browser (Обзор классов) будет отображен иерархический список классов выбранной библиотеки со значками, которые вы присвоили с помощью команды Class Info (Информация о классе) из меню Class (Класс). В правой части окна отображается список объектов, входящих в данный класс, его сноипи и методы. В нижней части окна содержатся параметры выбранного кккч или элемента класса.
Замечание
Двойной щелчок на имени класса в левой области окна Class Browser (Обзор классов) автоматически открывает данный класс в конструкторе классов
В окне Class Browser (Обзор классов) могут отображаться несколько библиотек классов. Для добавления новой библиотеки нажмите кнопку Vic-Additional File (Просмотр дополнительного файла)
на панели инструментов окна Class Browser (Обзор классов) и в диалоговом окне Open (Открыть) выберите библиотеку классов.Для просмотра любой другой библиотеки классов нажмите кнопку Open (Открыть)
на панели инструментов и в диалоговом окне Open (Открыть и выберите требуемую библиотеку.Замечание
В окне Class Browser (Обзор классов) могут отображаться не только библиотеки классов, но и формы.
Чтобы просмотреть классы одного типа (например, класс кнопок), выберите из раскрывающегося списка Class Type (Тип класса) наименование требуемого типа.
Свойства объектов, созданных на основе базовых классов
Объект, созданный на основе базовых классов, наследует его свойства, методы и обрабатываемые события. Свойства подобны переменным, однако в отличие от последних они не существуют вне объекта.
Возможность изменения свойств объектов в Visual FoxPro является мощным инструментом управления данными в интерактивном режиме. Например, вы можете:
изменить свойства формы (заголовок, размер, цвет, расположение и т. п.);
изменить цвета полей ввода, тип их отображения, цвет и формат выводимой в них информации;
запретить ввод информации в поля, переход на них или же сделать их невидимыми и многое другое.
Для того чтобы определить какое-либо из свойств объекта в интерактивном режиме, вам необходимо выделить требуемый объект, после чего выполнить одно из следующих действий:
в меню View (Вид) выбрать команду Properties (Свойства);
нажать правую кнопку мыши и из контекстного меню объекта выбрать команду Properties (Свойства).
В результате на экране появляется окно свойств текущего объекта (рис. 19.2). Свойства объектов могут принимать символьные, логические и числовые значения. Некоторые из них могут принимать произвольные значения (например, заголовок поля, его координаты). Другие свойства могут принимать значения из определенного списка.
Рис. 19.2. Окно свойств объекта
При программировании вы можете определить свойство объекта, указав имя объекта и имя свойства, которые разделяются точками. Для изменения свойства достаточно присвоить ему допустимое значение. Например:
* присваиваем заголовку формы значение переменной cName
frmNew.Caption = cName
Язык Visual FoxPro позволяет вам устанавливать не только свойства отдельных объектов, но и определенной группы объектов. Для этого используется конструкция with . . . endwith, которая имеет следующий синтаксис:
WITH имяОбъекта [,имяОбъекта]
[.имяСвойства = выражение] ENDWITH
Например, вы можете установить одинаковый цвет для группы объектов:
WITH cmdNext, cmdPrev
.ForeColor=RGB(0,0,0)
.BackColor=RGB(2 55,2 55,2 55) ENDWITH
Используя язык Visual FoxPro, можно изменять свойства объектов не только на этапе их создания, но и в процессе выполнения программы. Например, вы можете при переходе из режима просмотра в режим редактирования изменить заголовок формы "Просмотр списка клиентов", который является одним из свойств формы, на "Редактирование списка клиентов".
Замечание
Свойства, определенные для объектов с помощью окна свойств или программным путем, сохраняются в описании формы. Поэтому если во время одного сеанса работы вы изменили свойства объектов, они сохранятся до следующего изменения. Изменение свойств объекта не приводит к генерации события, за исключением изменения свойства Value (Значение).
Visual FoxPro позволяет не только применять свойства, наследованные из базового класса, но и создавать новые, которые можно использовать для хранения характеристик объекта и связанных с ним данных.
Чтобы создать новое свойство объекта, используйте диалоговое окно New Property (Новое свойство) (рис. 19.3), которое открывается при выполнении команды New Property (Новое свойство) из меню Form (Форма). В этом диалоговом окне необходимо задать имя создаваемого свойства и описание.
В диалоговом окне New Property (Новое свойство) находятся флажки, определяющие возможности, приведенные в табл. 19.4.
Таблица 19.4. Флажки диалогового окна New Property
Флажок | Назначение |
Access Method (Метод доступа) |
Если установлен этот флажок, то для данного свойства будет автоматически создан метод Access (Доступ) |
Assign Method (Метод назначения) |
Если установлен флажок, то для этого свойства будет автоматически создан метод Assign (Назначение) |
Созданное вами свойство отображается на вкладке Other (Другие) окна свойств объекта. Далее вы можете присвоить созданному свойству требуемое значение в окне свойств объекта или программным путем и использовать его при выполнении приложения.
Рис. 19.3. Диалоговое окно New Property
Управление классами
Для создания нового класса, изменения его имени, удаления его из библиотеки классов вы можете в окне Class Browser (Обзор классов) использовать кнопки, описанные в табл. 19.10.
Таблица 19.10. Кнопки окна Class Browser
Кнопка | Наименование | Описание | |||
Find (Поиск) | Открывает диалоговое окно Find (Найти) для поиска класса и элементов класса по имени,описанию | ||||
New Class (Новый класс) | Открывает диалоговое окно New Class (Новый класс) для создания нового класса | ||||
Rename (Переименовать) | Изменяет имя выбранного класса. Измене ние имени может привести к ошибкам в формах, использующих данный класс | ||||
Redefine (Переопределить родительский класс) | Переопределяет родительский класс выбранного класса | ||||
Clean Up Class Library (Упаковать библиотеку классов) | Упаковывает библиотеку классов, удаляя из нее физически записи, помеченные для удаления | ||||
View Class Code (Просмотр кода класса) | Открывает диалоговое окно с исходным текстом описания класса (рис. 19.29). Вы можете использовать эту информацию при создании собственных классов программным путем |
Рис. 19.29. Исходный текст описания класса
Визуальное объектно-ориентированное программирование
Visual FoxPro — это полнофункциональный язык объектно-ориентированного программирования. Он предлагает мощные средства для интерактивной работы и создания приложений, предназначенных для управления реляционными базами данных. И, что не менее важно, этот язык прост в изучении. Кроме того, программы, написанные на языке Visual FoxPro 8, будут совместимы с программами, написанными на Visual FoxPro предыдущих версий.
Разработка объектно-ориентированных приложений начинается с моделирования реальных объектов, необходимых для выполнения конкретного задания. При создании приложения вы взаимодействуете с хорошо знакомыми объектами: таблицами баз данных, формами, цветовыми схемами. Создание каждого объекта предполагает использование Visual FoxPro. Вам предоставляется возможность скопировать созданные объекты из одного приложения в другое и тем самым сократить объем работы. Например, если вы создали кнопку, которая предназначена для поиска фамилии клиента в указанной таблице, то вы можете использовать эту же кнопку в другом приложении. Вам потребуется лишь изменить наименование поля и таблицы, в которых будет осуществляться поиск.
Visual FoxPro позволяет сэкономить ваше время и деньги на каждом этапе процесса создания приложения. На начальной стадии время, затраченное на разработку прототипов, не пропадает даром. Вы можете сохранить каждый прототип в качестве класса и использовать при создании новых форм. На следующих стадиях разработки приложения (и даже после того, как работа над приложением уже завершена) вы можете в любой момент вернуться к нужному объекту и изменить или расширить его свойства, не нарушая целостности других объектов. Сопровождение и модификация приложений, написанных на Visual FoxPro, осуществляется гораздо более эффективно и требует меньших затрат по сравнению с традиционными линейными программами.