Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Программирование в VisualFoxPro 7.0

Визуальное объектно-ориентированное программирование

Visual FoxPro — это полнофункциональный язык объектно-ориентированного программирования. Он предлагает мощные средства для интерактивной работы и создания приложений, предназначенных для управления реляционными базами данных. И, что не менее важно, этот язык прост в изучении. Кроме того, программы, написанные на языке Visual FoxPro 7.0, будут совместимы с программами, написанными на Visual FoxPro предыдущих версий.

Разработка объектно-ориентированных приложений начинается с моделирования реальных объектов, необходимых для выполнения конкретного задания. При создании приложения вы взаимодействуете с хорошо знакомыми объектами: таблицами баз данных, формами, цветовыми схемами. Создание каждого объекта предполагает использование Visual FoxPro. Вам предоставляется возможность скопировать созданные объекты из одного приложения в другое и тем самым сократить объем работы. Например, если вы создали кнопку, которая предназначена для поиска фамилии клиента в указанной таблице, то вы можете использовать эту же кнопку в другом приложении. Вам потребуется лишь изменить наименование поля и таблицы, в которых будет осуществляться поиск.

Visual FoxPro позволяет сэкономить ваше время и деньги на каждом этапе процесса создания приложения. На начальной стадии время, затраченное на разработку прототипов, не пропадает даром. Вы можете сохранить каждый прототип в качестве класса и использовать при создании новых форм. На следующих стадиях разработки приложения (и даже после того, как работа над приложением уже завершена) вы можете в любой момент вернуться к нужному объекту и изменить или расширить его свойства, не нарушая целостности других объектов. Сопровождение и модификация приложений, написанных на Visual FoxPro, осуществляется гораздо более эффективно и требует меньших затрат по сравнению с традиционными линейными программами.

  Использование классов

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

  Базовые классы Visual FoxPro

При создании объектов приложения вы можете использовать базовые классы Visual FoxPro, классы внешних библиотек, а также создавать новые классы.

Visual FoxPro содержит большое число базовых классов (табл. 19.1), которые можно использовать при создании форм любой сложности. Единственным недостатком базовых классов является невозможность их модификации, но вы можете использовать базовые классы для создания пользовательских классов, полностью вами управляемых. Далее при создании форм можно применять пользовательские классы вместо базовых.

Таблица 19.1. Базовые классы Visual FoxPro

Наименование Назначение Видимый Контейнер
ActiveDoc Активный документ Нет Нет
Checkbox Флажок Да Нет
Column Столбец Да Да
ComboBox Раскрывающийся список Да Нет
CoiranandButton Кнопка управления Да Нет
CommandGroup Набор кнопок управления Да Да
Container Контейнер Да Да
Control Базовый визуальный класс Да Нет
Custom Базовый невизуальный класс Нет Нет
EditBox Поле редактирования Да Нет
Form Форма Да Да
Forms et Набор форм Нет Да
Grid Таблица Да Да
Header Заголовок столбцов таблицы Да Нет
HyperLink Object Гиперссылка Нет Нет
Image Изображение Да Нет
Label Надпись Да Нет
Line Линия Да Нет
ListBox Список Да Нет
OleContainerControl OLE-объект управления
OleBoundControl OLE-объект данных
OptionButton Переключатель Да Нет
OptionGroup Набор переключателей Да Да
Page Вкладка формы Да Да
Page Frame Макет страницы Нет Да
ProjectHook Проект Нет Да
Separator Разделитель Да Нет
Shape Обрамление Да Нет
Spinner Счетчик Да Нет
TextBox Поле ввода Да Нет
Timer Таймер Нет Нет
ToolBar Панель управления Да Да

Почти все базовые классы являются визуальными. Объекты, созданные на их основе, отображаются на экране. Некоторые из базовых классов невидимы. Они используются для объединения объектов (например, FormSet), обработки специальных событий (например, Timer) или создания невизуальных объектов (например, ProjectHook).

В Visual FoxPro широко применяется вложенность классов. Вложенным является класс, являющийся частью другого класса, называемого контейнером (container class). Наиболее яркий пример контейнера представляет собой таблица, компоненты которой — это столбцы и надписи к ним. При создании формы и после запуска ее на выполнение вы можете получить доступ ко всем компонентам контейнера.

Каждый базовый класс предназначен для выполнения определенных функций и обладает соответствующим набором свойств, методов и событий. Кроме свойств и событий, специфических для данного класса, каждый базовый класс содержит основной набор свойств (табл. 19.2) и событий (табл. 19.3).

Таблица 19.2. Минимальный набор свойств класса

Наименование Описание
Class Тип класса
BaseClass Базовый класс, на основе которого создан данный класс
ClassLibrary Библиотека классов, в которой хранится данный класс
ParentClass Определенный пользователем класс, на основе которого создан данный класс

Таблица 19.3. Минимальный набор событий

Наименование Описание
Init Наступает при создании объекта
Destroy Наступает при освобождении объекта из памяти
Error Наступает при возникновении ошибки, связанной с объектом

  Использование базовых классов при создании форм

При создании форм мы широко использовали базовые классы, список которых содержится на панели инструментов конструктора формы. Для создания объектов на основе базового класса достаточно выбрать его на панели инструментов, поместить в требуемом месте, а затем определить свойства и методы созданных объектов. Созданный объект будет обладать всеми характеристиками базового класса. Пример создания объекта на основе базового класса Grid (Таблица) показан на рис. 19J.

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

CREATEOBJECT(имяКласса [, параметр1, параиетр2, ...])

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

frmNew=CREATEOBJECT("FORM")

f rrriNew. Caption="Заголовок формы"

f rmNew.Show()

gl19-1.jpg

Рис. 19.1. Создание объекта в конструкторе форм

Свойства объектов, созданных на основе базовых классов

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

Возможность изменения свойств объектов в Visual FoxPro является мощным инструментом управления данными в интерактивном режиме. Например, вы можете:

Для того чтобы определить какое-либо из свойств объекта в интерактивном режиме, вам необходимо выделить требуемый объект, после чего выполнить одно из следующих действий:

В результате на экране появляется окно свойств текущего объекта (рис. 19.2). Свойства объектов могут принимать символьные, логические и числовые значения. Некоторые из них могут принимать произвольные значения (например, заголовок поля, его координаты). Другие свойства могут принимать значения из определенного списка.

gl19-2.jpg

Рис. 19.2. Окно свойств объекта

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

* присваиваем заголовку формы значение переменной cName

frrnNew. Caption = cName

Язык Visual FoxPro позволяет вам устанавливать не только свойства отдельных объектов, но и определенной группы объектов.

Для этого используется конструкция WITH .. . ENDWITH, которая имеет следующий синтаксис:

WITH имяОбгьекта [,имяОбгьекта]

[.имяСвойства = выражение]

ENDWITH

Например, вы можете установить одинаковый цвет для группы объектов:

WITH cmdNext, cmdPrev

.ForeColor=RGB(0,0,0)

.BackColor=RGB(255,255,255)

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 (Другие) окна свойств объекта. Далее вы можете присвоить созданному свойству требуемое значение в окне свойств объекта или программным путем и использовать его при выполнении приложения.

gl19-3.jpg

Рис. 19.3. Диалоговое окно New Property

Наследование событий и методов

Visual FoxPro является языком, управляемым по событиям. Событие представляет собой некоторое действие, которое активизирует стандартную реакцию объекта. В качестве события в Visual FoxPro могут рассматриваться нажатие кнопки мыши, выбор пункта меню или открытие таблицы.

Аналогично свойствам, наследуются события и методы базового класса, на основе которого создается объект. Список методов, определенных для объекта, можно просмотреть на вкладке Methods (Методы) окна свойств объекта (рис. 19.4).

Для каждого события определен соответствующий ему метод, который выполняется при возникновении данного события. Например, метод click (Нажатие) выполняется при нажатии кнопки мыши.

Список доступных методов обработки событий определяется базовым классом. Именно эти методы обеспечивают обработку всех действий пользователя (нажатие клавиш, управление мышью). Visual FoxPro предоставляет возможность модифицировать действия, выполняемые при обработке события данного объекта. Для редактирования метода установите курсор на этот метод в списке методов и дважды щелкните мышью. На экране откроется окно редактирования метода (рис. 19.5), в котором вы можете написать программу обработки события. Например, для кнопки формы вы можете определить программу перемещения по записям.

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

gl19-4.jpg

Рис. 19.4. Вкладка Methods окна свойств объекта

gl19-5.jpg

Рис. 19.5. Окно редактирования методов

Замечание

Методы, выполняющиеся при наступлении событий, в окне свойств объекта в списке методов в дополнение к имени содержат слово Event (Событие).

Команда MOUSE позволяет вам программным путем имитировать события click (Нажатие), Doubleclick (Двойное нажатие), MouseMove (Перемещение мыши) и DragDrop (Перенести и оставить). Остальные события не могут имитироваться программно, но вы можете вызвать методы, связанные с этими событиями.

Кроме методов, связанных с событиями, объект может содержать и дополнительные методы, которые выполняются только при их вызове. Например, для формы могут быть определены методы перехода на следующую запись, удаления записи и т. п. Эти методы могут наследоваться из базового класса, но вы можете создавать новые методы и для отдельных объектов.

Для создания нового метода в меню Form (Форма) выберите команду New Method (Новый метод) и в открывшемся диалоговом окне New Method (Новый метод) (рис. 19.6) определите имя и краткое описание метода. Созданный вами метод добавляется в список методов объекта, и вы можете открыть окно редактирования метода для ввода программного кода.

Для выполнения метода необходимо не только указать имя метода, но и объект, к которому данный метод будет применяться. Имя объекта и имя метода разделяются точкой. Например, для выполнения метода CaicSum формы Sales необходимо выполнить команду Sales.CalcSumO .

gl19-6.jpg

Рис. 19.6. Диалоговое окно New Method

В табл. 19.5 и табл. 19.6 приведены события и методы, которые распознаются и используются Visual FoxPro, и их краткое описание.

Таблица. 19.5. События, распознаваемые Visual FoxPro

Событие Возникает
Activate При активизации объектов FormSet (Набор форм), Form (Форма), Page (Вкладка формы) или при отображении объекта Toolbar (Панель управления)
AfterBuilld При перестроении проекта или приложения, а также при создании динамической библиотеки (dll) или выполняемого файла (ехе) на основе проекта
AfterCloseTables После закрытия таблиц или представлений данных
AfterDock После того, как фиксируется панель инструментов
AfterRowColChange При переходе в другую строку или другой столбец объекта Grid (Таблица)
Bef oreDock Имеет место перед фиксацией объекта ToolBar (Панель управления)
BeforeOpenTables Перед открытием таблиц и представлений, связанных со средой данных формы, набора срорм или отчета
BeforeRowCoIChange Перед тем, как пользователь изменяет активную строку или столбец объекта Grid (Таблица)
Click При нажатии и отпускании левой кнопки мыши
CoramandTargetExec При активизации программой-контейнером приложения

типа Active Document (Активный документ)

CoinmandTarget Query При изменении программой-контейнером пользовательского интерфейса
ContainerRelease При закрытии программой-контейнером приложения типа

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 (Поле ввода) теряет фокус или когда элемент управления СошЬоВох (Раскрывающийся список) или 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 При нажатии кнопки с направленной вверх стрелкой на объектах управления типа СотЬоВох (Раскрывающийся список), ListBox (Список) и spinner (Счетчик)
Valid Перед тем, как элемент управления теряет фокус
When Перед тем, как элемент управления получает фокус

Таблица 19.6. Методы, используемые Visual FoxPro

Метод Описание
ActivateCell Активизирует ячейку в элементе управления Grid (Таблица)
AddColumn Добавляет объект Column (Столбец) в элемент управления Grid (Таблица)
Add I tern Добавляет новый элемент списка в объект СотЬоВох (Раскрывающийся список) или ListBox (Список), предоставляв при этом возможность задать индекс элемента
AddListltem Добавляет новый элемент списка в объект СотЬоВох (Раскрывающийся список) или ListBox (Список), давая возможность задать идентификатор элемента
AddObject Добавляет объект в контейнер на этапе выполнения
AddProperty Добавляет новое свойство в объект
AddToSCC Добавляет файл в проект
Box Рисует прямоугольник в форме
Build Перестраивает проект или создает приложение (арр), динамическую библиотеку (dli) или выполняемый файл (ехе) из проекта
Checkln Запоминает изменения, осуществленные в выбранном файле проекта
Checkout Выбирает файл из проекта для изменения
Circle Рисует окружность или эллипс в форме
Cleanup Очищает таблицу проекта, удаляя записи с пометкой на удаление и сжимая Memo-поля
Clear Очищает содержимое элемента управления СотЬоВох (Раскрывающийся список) или ListBox (Список)
ClearData Очищает все данные и форматы данных в объекте Dataobject (Объект данных). Доступен только в режиме выполнения программы
CloneObj ect Создает копию объекта со всеми его свойствами, событиями и методами
Close Закрывает проект и очищает объекты ProjectHook (Проект) и Project (Проект)
CloseTables Закрывает таблицы и представления данных, связанные со средой
Cls Удаляет графику и текст из формы
DataToClip Копирует группу записей в текстовом виде в буфер обмена Windows
DeleteColumn Удаляет объект Column (Столбец) из элемента управления Grid (Таблица)
Dock Располагает объект ToolBar (Панель управления) у границы основного окна Visual FoxPro
DoCrad Выполняет команду Visual FoxPro для сервера приложения Visual FoxPro
DoScroll Моделирует работу пользователя с полосами прокрутки в объекте Grid (Таблица)
DoVerb Выполняет команду для заданного OLE-объекта
Drag Начинает, заканчивает или отменяет операцию переноса объекта с помощью мыши
Draw Перерисовывает объект формы
Eval Вычисляет выражение и возвращает результат
GetData Заполняет данные из объекта DataObject (Объект данных). Доступен только в режиме выполнения программы
Get Format Возвращает 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 (красный-зеленый-синий) для заданной точки формы
Print Выдает в объекте Form (Форма) символьную строку, которую нужно напечатать
PSet Устанавливает для точки формы или основного окна Visual FoxPro основной цвет символов
Quit Завершает работу Visual FoxPro
ReadExpression Возвращает выражение, введенное в качестве значения свойства в окне свойств
ReadMethod Возвращает текст заданного метода
Refresh Перерисовывает объект Form (Форма) или элемент управления, обновляя все значения
Release Освобождает объект FormSet (Набор форм) или Form (Форма) из памяти
Remove Удаляет файл из сборника файла и проекта
RemoveFromSCC Удаляет файл из проекта
Remove I tern Удаляет элемент из списка элемента управления типа ComboBox (Раскрывающийся список) или ListBox (Список)
RemoveListltem Удаляет элемент из списка элемента управления типа ComboBox (Раскрывающийся список) или ListBox (Список)
RemoveObject Удаляет заданный объект из объекта-контейнера на этапе выполнения
Requery Повторно опрашивает источник строк, к которому привязан элемент управления типа ListBox (Список) или ComboBox (Раскрывающийся список)
RequestData Создает массив, содержащий данные из таблицы Visual FoxPro
Reset Сбрасывает элемент управления Timer (Таймер) в нулевое состояние
ResetToDefault Восстанавливает принятые по умолчанию в Visual FoxPro значения свойств, событий или методов
Run Запускает файл проекта на выполнение или предварительный просмотр
SaveAs Сохраняет объект в виде файла с расширением SCX
SaveAsClass Сохраняет экземпляр объекта в качестве определения класса в библиотеке классов
Set All Присваивает установку некоторого свойства всем элементам управления данного объекта 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 имеются базовые классы, предназначенные для создания вложенных объектов, например, класс Grid (Таблица). При ссылке на вложенный объект необходимо перечислить все объекты, в которые он входит, разделяя элементы списка точками. Например, ссылка на столбец coicustomerid объекта 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="Группа форм, содержащая объект"

Каждый объект обрабатывает связанные с ним события независимо. Поэтому контейнер не может реагировать на события вложенного в него объекта даже в том случае, если данный объект не содержит метода для обработки события, а контейнер может реагировать на данное событие.

Ранее мы рассмотрели команды создания формы и присвоения ей заголовка. Теперь дополним эти команды командами размещения в форме кнопки, являющейся по отношению к ней вложенным объектом:

f rmNew=CREATEOBJECT ( "FORM")

frmNew.Caption="Форма, созданная с помощью команд"

frmNew.Show()

frmNew.AddObject("Button", "CommandButton")

cmdButton=frmNew.Button

cmdButton.Visible=.Т.

cmdButton.Top=l90

cmdButton.Left=l20

cmdButton.Width=70

cmdButton.Height=3 0

cmdButton.Caption="Выход"

Команда frmNew.AddObject("Button", "CommandButton") создает В frmNew на основе базового класса CommandButton (Кнопка управления) новый объект Button (Кнопка). Следующая команда делает видимой созданную кнопку. На рис. 19.7 показана форма, созданная этими командами.

Совет

В прикладных программах объекты желательно сохранять невидимыми до полного определения всех их свойств.

gl19-7.jpg

Рис. 19.7. Форма с вложенным объектом — кнопкой

  Создание пользовательских классов

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

  Создание пользовательского класса на основе базовых классов Visual FoxPro в конструкторе классов

Для создания нового класса вы можете выполнить одно из следующих действий:

Независимо от выбранного вами способа, на экране откроется диалоговое окно New Class (Новый класс) (рис. 19.8).

gl19-8.jpg

Рис. 19.8. Диалоговое окно New Class

В поле ввода Class Name (Имя класса) этого диалогового окна укажите имя создаваемого класса, а в следующем поле ввода Based On (Базовый класс) — имя класса, на основе которого создается новый класс. Поле From (Откуда) доступно только для чтения и содержит имя библиотеки классов, из которой выбран базовый класс. При использовании базовых классов Visual FoxPro данное поле остается пустым.

В поле ввода Store In (Сохранить в) необходимо ввести имя библиотеки, в которой будет храниться создаваемый класс. Библиотека классов представляет собой файл с расширением VCX. Вы можете выбрать созданные ранее библиотеки или указать новую библиотеку в диалоговом окне Save as (Сохранить как), которое вызывается при нажатии на кнопку, расположенную с правой стороны поля ввода.

Замечание

Для создания библиотеки классов вы можете воспользоваться командой CREATE CLASSLIB в командном окне.

После ввода значений в поля нажмите кнопку ОК, в результате чего на экране появится окно конструктора классов. В основное меню Visual FoxPro добавляется пункт Class (Класс) (рис. 19.9), который содержит команды, описанные в табл. 19.8.

Таблица 19.8. Назначение команд пункта меню Class

Команда Назначение
New Property (Новое свойство) Создает новое свойство
New Method (Новый метод) Создает новый метод
Edit Property/Method (Правка свойства/метода) Редактирует наименование созданного ранее метода или свойства
Include File (Включить файл) Задает имя файла заголовка, содержащего описание предопределенных констант
Class Info (Информация о классе) Отображает информацию о текущем классе

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

gl19-9.jpg

Рис. 19.9. Окно конструктора классов

  Создание класса типа "форма"

Рассмотрим создание класса для просмотра данных из одиночной таблицы, который содержит кнопки для перемещения по записям и выхода из формы.

  1. Откройте проект sales, в окне проекта выберите вкладку Classes (Классы) и нажмите кнопку New (Новый).
  2. В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcSingleTable.
  3. Из списка Based On (Базовый класс) выберите базовый класс Form (Форма).
  4. В поле Store In (Сохранить в) введите имя библиотеки классов Forms (Формы), в которой будет храниться создаваемый класс.
  5. На экране появляется пустая форма. Прежде всего изменим свойство Caption (Надпись) формы, введя в поле ввода значения свойства текст Табличная форма просмотра.
  6. Далее разместим в верхней части формы текст заголовка и определим для него цвет и размер шрифта (рис. 19.10). Форма, созданная на основе данного класса, будет содержать размещенный в классе текст заголовка. Разработчику формы потребуется только изменить текст заголовка, причем будут соблюдены все стандарты на создаваемую форму.
gl19-10.jpg

Рис. 19.10. Размещение заголовка формы

  1. Разместите в форме объект Grid (Таблица) и определите его свойства отображения данных, такие как шрифт, цвет, которые будут стандартными для просмотра данных в табличном виде.
  2. Установите для объекта Grid (Таблица) значение свойства Readonly (Только чтение) равным True (Истина), т. к. данную форму предполагается использовать только для просмотра данных.
  3. Для перемещения по записям, а также для выхода из формы используются кнопки, которые мы также разместим в форме и определим для них действия, выполняемые при нажатии на кнопки.
  4. Законченный вид класса приведен на рис. 19.11. Отметьте, что создание класса аналогично созданию формы.
gl19-11.jpg

Рис. 19.11. Класс для просмотра данных в табличном виде

  Библиотека классов

Библиотеки классов используются для хранения созданных в Visual FoxPro пользовательских классов. Для создания библиотеки предназначено диалоговое окно New Class (Новый класс), рассмотренное нами в предыдущем разделе. При разработке приложения удобно иметь несколько библиотек классов, в которых размещаются отдельные группы классов. Например, в одной библиотеке можно располагать все классы кнопок, используемых в приложении, а в другой — классы форм.

В случае необходимости вы можете копировать класс из одной библиотеки в другую. Для этого перейдите на вкладку Classes (Классы) окна проекта и раскройте обе библиотеки. Затем выберите копируемый класс, нажмите кнопку мыши и, удерживая ее нажатой, перенесите класс в новую библиотеку. В заключение отпустите кнопку мыши.

Для удаления класса из библиотеки выберите класс и нажмите кнопку Remove (Удалить) в окне проекта.

При необходимости вы можете переименовать выбранный класс, используя команду Rename (Переименовать) контекстного меню окна проекта.

Замечание

Для удаления класса из библиотеки классов вы можете воспользоваться командой REMOVE CLASS, а для изменения имени класса — командой RENAME CLASS.

  Создание подклассов

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

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

Создание текстовой кнопки выхода из формы

Рассмотрим создание класса кнопки выхода из формы. Будем использовать возможности, предоставляемые системой при создании подклассов.

  1. Откройте проект Sales.
  2. В окне проекта выберите вкладку Classes (Классы) и нажмите кнопку New (Новый).
  3. В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcCmdButton.

    Из списка Based On (Базовый класс) выберите базовый класс commandButton (Кнопка управления), а затем в поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons (Кнопки), в которой будет храниться создаваемый класс. Библиотека BASE.vex будет содержать пользовательские классы, созданные на основе базовых классов Visual FoxPro, которые содержат свойства, характерные для данного приложения. На начальной стадии разработки вы можете оставить свойства базового класса без изменения. Такой подход позволяет вам достаточно просто изменить свойства объекта, если в этом возникнет необходимость.

  4. Завершив ввод в поля, нажмите кнопку ОК.
  5. На экране появляется окно конструктора классов, содержащее кнопку. Так как кнопка не является контейнером, вы не можете добавить в нее другие объекты. Ваши возможности ограничены изменением свойств и методов объекта. Для создаваемого класса кнопки измените наименование шрифта, а затем установите свойство Caption (Надпись), введя в поле ввода значения свойства текст Кнопка (рис. 19.12).
  6. Создание класса кнопки на этом завершено. Сохраните созданный класс и закройте окно конструктора классов.
gl19-12.jpg

Рис. 19.12. Создание класса кнопки

  1. Теперь приступим к созданию кнопки для выхода из формы. Находясь на вкладке Classes (Классы), нажмите кнопку New (Новый).
  2. В открывшемся диалоговом окне New Class (Новый класс) введите в поле ввода Class Name (Имя класса) имя создаваемого класса bcCmdTxtExit. В поле ввода Store In (Сохранить в) введите имя библиотеки классов

Buttons (Классы), в которой будет храниться создаваемый класс. В данном случае для создания нового класса мы используем не базовый класс Visual FoxPro, а созданный на предыдущем шаге пользовательский класс. Поэтому нам необходимо указать не только имя класса, на основе которого будет создаваться новый класс, но и библиотеку, в которой он хранится. Для выбора библиотеки классов, а также класса из этой библиотеки, нажмите кнопку, расположенную правее списка Based On (Базовый класс). Откроется диалоговое окно Open (Открыть) (рис. 19.13).

gl19-13.jpg

Рис. 19.13. Выбор класса из библиотеки классов

  1. Левая часть окна содержит стандартные средства выбора файла. В правой части диалогового окна находится список Class Name (Имя класса), который содержит список классов выбранной библиотеки. Выберите класс bcCmdButton, нажмите кнопку Open (Открыть), и вы вернетесь в диалоговое окно New Class (Новый класс), которое теперь будет содержать заполненные поля Based On (Базовый класс) и From (Откуда) (рис. 19.14). Нажмите кнопку ОК. В результате откроется окно конструктора классов, содержащее кнопку, которая наследует свойства класса (надпись на кнопке и шрифт), на основе которого мы будем создавать новый класс.
gl19-14.jpg

Рис. 19.14. Диалоговое окно New Class после выбора пользовательского класса

  1. Для создаваемой кнопки измените надпись, введя в свойстве caption (Надпись) текст Выход.
  2. Используя свойство click (Нажатие), определите действия, выполняемые при нажатии на эту кнопку (рис. 19.15).
  3. Сохраните класс и закройте окно конструктора классов.
gl19-15.jpg

Рис. 19.15. Определение свойств и методов для кнопки выхода из формы

Создание кнопки, содержащей изображение, для выхода из формы

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

  1. На вкладке Classes (Классы) нажмите кнопку New (Новый).
  2. В открывшемся диалоговом окне New Class (Новый класс) введите в поле ввода Class Name (Имя класса) имя создаваемого класса bcCmdPicExit.

    В поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons, в которой будет храниться создаваемый класс. В качестве базового класса для создания нового класса выберите созданный на предыдущем шаге класс bcCmdTxtExit из библиотеки классов Buttons (Кнопки).

  3. Для создаваемого класса наследуется метод, выполняемый при нажатии на кнопку мыши, поэтому нам необходимо только изменить внешний вид кнопки. Удалите надпись кнопки.
  4. В поле ввода свойства Picture (Изображение) укажите имя файла с изображением, которое будет отображаться на кнопке (рис. 19.16).
gl19-16.jpg

Рис. 19.16. Определение кнопки с изображением

Совет

Аналогичным образом вы можете создать классы для кнопок перемещения по записям и разместите их в библиотеке Buttons (Кнопки).

  Использование пользовательских классов для создания объектов формы

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

  1. Откройте Проект Sales.
  2. В окне проекта перейдите на вкладку Classes (Классы), выберите в библиотеке Forms (Формы) класс bcSingieTabie и нажмите кнопку Modify (Модифицировать).
  3. В окне конструктора классов появится созданный нами ранее пользовательский класс формы для просмотра данных из одиночной таблицы.
  4. Удалите из него созданные ранее кнопки.
  5. Нажмите кнопку View Classes (Показать классы) WI на панели инструментов Form Controls (Элементы управления формы).
  6. На экране появляется меню кнопки, содержащее список библиотек классов, а также команду Add (Добавить), которая позволяет добавить в этот список новую библиотеку. Выберите команду Add (Добавить).
  7. В открывшемся диалоговом окне Open (Открыть) выберите созданную пользовательскую библиотеку Buttons (Кнопки) и нажмите Open (Открыть). В результате выбора наименования библиотеки классов в меню кнопки View Classes (Показать классы) появляется команда Buttons (Кнопки).
  8. Выберите команду Buttons (Кнопки). На панели инструментов Form Controls (Элементы управления формы) размещаются значки классов выбранной библиотеки. Теперь можно размещать эти объекты в классе обычным образом.
  9. Выберите на панели инструментов кнопки перемещения по записям и кнопку выхода из формы и разместите их в форме. Создание кнопок управления на этом заканчивается, т. к. действия, выполняемые ими, наследуются из классов кнопок. Вкладка Other (Другие) окна свойств содержит наименования класса объекта и библиотеки классов (рис. 19.17).
gl19-17.jpg

Рис. 19.17. Размещение объекта, основанного на пользовательском классе

  Просмотр информации о классе и определение значка для его обозначения

Для просмотра информации о классе и определения значка для него используется диалоговое окно Class Info (Информация о классе), открываемое при выборе из меню Class (Класс) команды Class Info (Информация о классе).

Вкладка Class (Класс) содержит поля ввода изображений значков классов и поле редактирования Description (Описание), в которое можно ввести краткое описание класса.

На вкладке Members (Члены) (рис. 19.18) отображается список объектов класса, а также перечень методов и свойств. Столбец Class (Класс) содержит наименование объектов, а столбец Name (Наименование) — свойства и методы класса. С помощью параметра Visibility (Видимость), который может принимать одно из трех значений — Public (Открытый), Protected (Защищенный) и Hidden (Скрытый), вы можете установить степень защищенности объекта, а в столбце No Init (He инициализировать) указать, будет ли выполняться метод init (Инициализация) при создании объекта.

gl19-18.jpg

Рис. 19.18. Вкладка Members диалогового окна Class Info

Для каждого класса вы можете указать два значка, вид которых задается на вкладке Class (Класс) (рис. 19.19).

gl19-19.jpg

Рис. 19.19. Вкладка Class диалогового окна Class Info

Имя первого из них вводится в поле ввода Toolbar icon (Значок на панели инструментов) и в дальнейшем отображается на панели инструментов Form Controls (Элементы управления формы) в окнах конструктора форм и конструктора классов при выборе библиотеки классов, содержащей данный класс. Имя второго значка вводится в поле ввода Container icon (Значок контейнера) и отображается в диалоговом окне Class Browser (Обзор класса). Для задания значка вы можете ввести имя графического файла непосредственно в поля ввода или использовать кнопки выбора файла, расположенные справа от полей.

Совет

Настоятельно рекомендуется определять значки для создаваемых классов. В противном случае вам будет трудно выбирать пользовательские классы на панели инструментов Form Controls (Элементы управления формы), т. к. они будут иметь значки базовых классов и отличить один от другого можно только по всплывающей подсказке.

gl19-20.jpg

Рис. 19.20. Диалоговое окно Edit Property/Method

С помощью кнопки Modify (Модифицировать), расположенной на вкладке Members (Члены) диалогового окна Class Info (Информация о классе), вы можете изменить параметры объектов, свойств и методов объектов, входящих в класс. При нажатии на эту кнопку открывается диалоговое окно Edit Property/Method (Редактирование свойства/метода) (рис. 19.20), которое содержит таблицу с перечнем всех объектов, свойств и методов (табл. 19.9).

Таблица 19.9. Назначение столбцов таблицы диалогового окна Edit Property/Method

Столбец Назначение
Name (Наименование) Наименование объекта, свойства или метода
Туре (Тип) Тип объекта: 0 — объект, М — метод, Р — свойство
Access (Доступ) Данный столбец указывает, создан ли метод Access для свойства
Assign (Назначение) Данный столбец указывает, создан ли метод Assign для свойства
Visibility (Видимость) Определяет тип свойства или метода

  Формирование списка библиотек, используемых в конструкторах форм и классов

Для добавления библиотек классов на панель инструментов Form Controls (Элементы управления формы) можно использовать не только опцию Add (Добавить) всплывающего меню кнопки View Classes (Показать классы), но и вкладку Controls (Элементы управления) (рис. 19,21) диалогового окна Options (Параметры). Для его открытия выполните команду Options (Параметры) из меню Tools (Сервис).

gl19-21.jpg

Рис. 19.21. Вкладка Controls диалогового окна Options

Чтобы определить библиотеки классов, установите переключатель Visual class libraries (Библиотеки визуальных классов). Затем заполните список Selected (Выбранные) названиями библиотек классов, которые вы собираетесь отображать на панели инструментов. Идя добавления нового класса в этот список используется кнопка Add (Добавить), при нажатии на которую открывается диалоговое окно Open (Открыть). В этом окне найдите и выберите требуемую библиотеку классов. Удаление из списка выбранной библиотеки осуществляется нажатием кнопки Remove (Удалить). При нажатии кнопки Set As Default (Использовать по умолчанию) введенные установки будут использоваться и в следующих сеансах работы с Visual FoxPro.

  Создание форм на основе пользовательских классов

С помощью вкладки Forms (Формы) (рис. 19.22) диалогового окна Options (Параметры) вы можете задать класс формы, который будет использоваться при создании новой формы.

gl19-22.jpg

Рис. 19.22. Выбор класса, используемого при создании формы

Для выбора класса, используемого при создании формы, выполните следующие действия:

  1. На вкладке Forms (Формы) диалогового окна Options (Параметры) в области Template classes (Шаблон классов) установите флажок Form (Форма).
  2. Откроется диалоговое окно Form Template (Шаблон формы) (рис. 19.23). Выберите библиотеку, а затем в области Class Name (Имя класса) — требуемый класс.
  3. Нажмите кнопку ОК.
  4. Вернувшись в диалоговое окно Options (Параметры), нажмите кнопку ОК для его закрытия.

Аналогичным образом вы можете установить и пользовательский класс для создания наборов форм.

Замечание

Пользовательский класс, используемый при создании набора форм, определяется аналогичным образом. Только на вкладке Forms (Формы) диалогового окна Options (Параметры) необходимо установить флажок Form set (Набор форм).

gl19-23.jpg

Рис. 19.23. Диалоговое окно Form Template

  Форма просмотра информации о клиентах на основе пользовательских классов

Рассмотрим создание формы просмотра информации о клиентах, используя класс bcsingieTabie, созданный в предыдущем примере.

  1. Откройте диалоговое окно Options (Параметры).
  2. На вкладке Forms (Формы) установите флажок Form (Форма).
  3. В открывшемся диалоговом окне Form Template (Шаблон формы) (см. рис. 19.23) выберите пользовательскую библиотеку Forms (Формы).
  4. В области Class Name (Имя класса) выберите требуемый класс bcSingleTable.
  5. Нажмите кнопку ОК.
  6. Вернувшись в диалоговое окно Options (Параметры), нажмите кнопку ОК для его закрытия.
  7. Откройте проект sales.
  8. В окне проекта выберите вкладку Documents (Документы), затем перейдите в раздел Forms (Формы) и нажмите кнопку New (Новый). На экране открывается окно конструктора форм, которое содержит объекты Класса bcSingleTable (рис. 19.24).
gl19-24.jpg

Рис. 19.24. Начальная стадия создания формы, основанной на пользовательском классе

  1. Выберите текстовый объект, расположенный в верхней части формы, и измените его свойство Caption (Надпись), введя Просмотр информации о клиентах.
  2. В окно окружения формы добавьте таблицу Customer.
  3. Установите свойства объекта Grid (Таблица). Для этого задайте количество столбцов в таблице, свяжите их с полями таблицы customer и определите заголовки полей. На этом создание формы заканчивается (рис. 19.25).
  4. Сохраните форму и запустите ее на выполнение.
gl19-25.jpg

Рис. 19.25. Форма просмотра информации о клиентах

  Использование формы для создания класса

В Visual FoxPro имеется возможность использования существующей формы для создания класса. Вы можете сохранить всю форму в виде класса или же выбрать определенные объекты формы и сохранить их в виде одного класса. Созданная в предыдущем примере форма содержит некоторую часть информации о клиентах. В создаваемом приложении могут понадобиться еще несколько форм для просмотра информации о клиентах, каждая из которых отображает определенную часть информации. В этом случае желательно иметь класс формы просмотра информации о клиентах, который содержит всего лишь два поля icdcustomer и ccompany таблицы Customer.

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

  1. Откройте окно конструктора для формы, созданной в предыдущем примере.
  2. В объекте Grid (Таблица) удалите все столбцы, за исключением столбцов с полями icdcustomer и ccompany (рис. 19.26).
gl19-26.jpg

Рис. 19.26. Подготовка формы для создания класса

  1. В меню File (Файл) выберите команду Save As Class (Сохранить как класс).
  2. В открывшемся диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Current form (Текущая форма). В поле Name (Имя) укажите имя класса и имя библиотеки, в которой будет располагаться класс, а в поле Description (Описание) — его краткое описание. После ввода всех атрибутов нажмите кнопку ОК, в результате в указанной библиотеке будет создан новый класс.

Совет

Для сохранения объектов формы в виде класса выделите их в форме, а затем в диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Selected controls (Выбранные элементы управления). Для сохранения набора форм в виде класса откройте окно конструктора для набора форм и в диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Entire form set (Набор форм).

  Средство Class Browser

В Visual FoxPro имеется удобное средство, предназначенное для работы с классами, — это Class Browser (Обзор классов), с помощью которого вы можете просматривать библиотеки классов, создавать новые классы и редактировать существующие.

Для открытия окна Class Browser (Обзор классов) выполните одно из следующих действий.

Независимо от выбранного вами способа, будет запущено приложение Browser.app, которое открывает окно Class Browser (Обзор классов) (рис. 19.27), содержащее панель инструментов для управления классами и список объектов выбранной библиотеки.

После открытия библиотеки классов в левой части окна Class Browser (Обзор классов) будет отображен иерархический список классов выбранной библиотеки со значками, которые вы присвоили с помощью команды Class Info (Информация о классе) из меню Class (Класс). В правой части окна отображается список объектов, входящих в данный класс, его свойства и методы. В нижней части окна содержатся параметры выбранного класса или элемента класса.

gl19-28.jpg

Рис. 19.27. Окно Class Browser

Совет

Двойной щелчок на имени класса в левой области окна Class Browser (Обзор классов) автоматически открывает данный класс в конструкторе классов.

В окне Class Browser (Обзор классов) могут отображаться несколько библиотек классов. Для добавления новой библиотеки нажмите кнопку View Additional File (Просмотр дополнительного файла) на панели инструментов окна Class Browser (Обзор классов) и диалоговом окне Open (Открыть) выберите библиотеку классов.

Для просмотра любой другой библиотеки классов нажмите кнопку Open (Открыть) на панели инструментов и в диалоговом окне Open (Открыть) выберите требуемую библиотеку.

Замечание

В окне Class Browser (Обзор классов) могут отображаться не только библиотеки классов, но и формы.

Чтобы просмотреть классы одного типа (например, класс кнопок), выберите из раскрывающегося списка Class Type (Тип класса) наименование требуемого типа.

  Управление классами

Для создания нового класса, изменения его имени, удаления его из библиотеки классов вы можете в окне Oass Browser (Обзор классов) использовать кнопки, описанные в табл. 19.10.

gl19-29.jpg

Рис. 19.28. Исходный текст описания класса

Таблица 19.10. Кнопки окна Class Browser

Кнопка Наименование Описание
  Find (Поиск) Открывает диалоговое окно Find (Найти) для поиска класса и элементов класса по имени, описанию
  New Class (Новый класс) Открывает диалоговое окно New Class (Новый класс) для создания нового класса
  Rename

(Переименовать)

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

{Переопределить родительский класс)

Переопределяет родительский класс выбранного класса
  Clean Up Class Library

(Упаковать библиотеку классов)

Упаковывает библиотеку классов, удаляя из нее физически записи, помеченные для удаления
  View Class Code

(Просмотр кода класса)

Открывает диалоговое окно с исходным текстом описания класса (рис. 19.28). Вы можете использовать эту информацию при создании собственных классов программным путем

  Создание панели инструментов

Панели инструментов являются неотъемлемой частью приложений Windows. Visual FoxPro также позволяет разрабатывать класс панели инструментов и применять его при создании объекта панели инструментов. Этот объект может использоваться в формах для управления перемещением по записям, поиска данных и т. п.

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

  1. Откройте проект sales.
  2. В окне проекта перейдите на вкладку Classes (Классы) и нажмите кнопку New (Новый).
  3. В диалоговом окне New Class (Новый класс) выберите базовый класс Toolbar (Панель управления), введите имя класса bcTabieTooiBar и укажите пользовательскую библиотеку классов ForForms, а затем нажмите кнопку ОК. В окне конструктора классов появляется панель инструментов, не содержащая ни одного объекта.
  4. Используя ранее созданные классы кнопок, разместите на создаваемой панели инструментов графические кнопки перемещения по записям и выхода из формы (рис. 19.29).
gl19-30.jpg

Рис. 19.29. Создание класса панели управления для перемещения по записям таблицы

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

  1. Откройте проект sales.
  2. В окне проекта перейдите на вкладку Classes (Классы) и нажмите кнопку New (Новый).
  3. В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcSingleTableToolbar. Из списка Based On (Базовый класс) выберите базовый класс Form (Форма), а затем в поле ввода Store In (Сохранить в) введите имя библиотеки классов Forms (Формы), в которой будет храниться создаваемый класс.
  4. Разместите в форме текст заголовка и объект Grid (Таблица).
  5. Нам необходимо создать в форме объект типа "панель" инструментов на основе созданного в предыдущем примере класса. Для этого определите новое свойство oTooiBar формы, выполнив команду New Property (Новое свойство) из меню Class (Класс), а затем в методе Activate (Активизация) формы создайте объект типа "панель инструментов" и отобразите его на экране:

* Создаем панель инструментов

_screen.ActiveForm.oToolBar=CREATEOBJECT("bcTableToolBar")

* Отображаем панель инструментов на экране

__screen.ActiveForm. oTooiBar. Show ()

gl19-31.jpg

Рис. 19.30. Создание класса формы, в которой используется панель инструментов

  1. Результат выполненных действий показан на рис. 19.30. Сохраните созданный класс и закройте окно конструктора классов.
  2. Теперь приступим к созданию формы на основе созданного в этом примере класса. Для этого откройте диалоговое окно Options (Параметры), перейдите на вкладку Forms (Формы) и установите в поле ввода Form (Форма) имя пользовательского класса bcsingieTabieTooibar из библиотеки Forms (Формы).
  3. Откройте проект sales.
  4. В окне проекта выберите вкладку Documents (Документы), перейдите в раздел Forms (Формы) и нажмите кнопку New (Новый). На экране откроется окно конструктора форм, которое содержит объекты класса bcsingieTabieTooibar. Обратите внимание на то, что в форме панель инструментов отсутствует. Она создается при запуске формы на выполнение,
  5. Выберите текстовый объект, расположенный в верхней части формы, и измените его свойство caption (Надпись), введя Просмотр информации о клиентах,
  6. Добавьте в окружение формы таблицу customer.
  7. Установите свойства объекта Grid (Таблица). Для этого свяжите столбцы таблицы с полями таблицы customer и определите заголовки столбцов.
  8. На этом создание формы заканчивается. Сохраните ее и запустите на выполнение. На рис. 19.31 вы видите созданную форму в режиме выполнения.
gl19-32.jpg

Рис. 19.31. Использование панели инструментов для просмотра таблицы

Совет

Если при запуске данной формы на выполнение появляется сообщение о том, что класс ьстаЫетоо1ваг не найден, вам необходимо в методе Activate (Активизация) формы перед созданием объекта типа "панель инструментов" вставить команду SET CLASSLIB то с указанием папки расположения класса.

Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Знаете ли Вы, как разрешается парадокс Ольберса?
(Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды.
Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution