При создании форм мы широко использовали
базовые классы, список которых содержится на панели инструментов конструктора
формы. Для создания объектов на основе базового класса достаточно выбрать его
на панели инструментов, поместить в требуемом месте, а затем определить свойства
и методы созданных объектов. Созданный объект будет обладать всеми характеристиками
базового класса. Пример создания объекта на основе базового класса Grid (Таблица)
показан на рис. 19J.
Для создания новых объектов можно использовать не только конструктор форм, но и функцию CREATEOBJECT, которая имеет следующий синтаксис:
CREATEOBJECT(имяКласса [, параметр1, параиетр2, ...])
Функция CREATEOBJECT возвращает идентификатор созданного объекта, который вы можете применять для ссылки на него. Например, для создания формы, определения ее заголовка и отображения формы на экране необходимо выполнить следующую последовательность команд:
frmNew=CREATEOBJECT("FORM")
f rmNew. Caption="Заголовок формы"
f rmNew.Show()
Рис. 19.1. Создание объекта в конструкторе форм
Свойства объектов, созданных на основе базовых классов
Объект, созданный на основе базовых классов, наследует его свойства, методы и обрабатываемые события. Свойства подобны переменным, однако в отличие от последних, они не существуют вне объекта.
Возможность изменения свойств объектов в Visual FoxPro является мощным инструментом управления данными в интерактивном режиме. Например, вы можете:
Для того чтобы определить какое-либо из свойств объекта в интерактивном режиме, вам необходимо выделить требуемый объект, после чего выполнить одно из следующих действий:
В результате на экране появляется окно свойств текущего объекта (рис. 19.2). Свойства объектов могут принимать символьные, логические и числовые значения. Некоторые из них могут принимать произвольные значения (например, заголовок поля, его координаты). Другие свойства могут принимать значения из определенного списка.
Рис. 19.2. Окно свойств объекта
При программировании вы можете определить свойство объекта, указав имя объекта и имя свойства, которые разделяются точками. Для изменения свойства достаточно присвоить ему допустимое значение. Например:
* присваиваем заголовку формы значение переменной cName
frmNew. 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 (Другие) окна свойств объекта. Далее вы можете присвоить созданному свойству требуемое значение в окне свойств объекта или программным путем и использовать его при выполнении приложения.
Рис. 19.3. Диалоговое окно New Property
Наследование событий и методов
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 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 (красный-зеленый-синий) для заданной точки формы |
Выдает в объекте 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 (Форма) или элемент управления в заданную позицию данного объекта по отношению к другим объектам |