Информация о классе и объекте в VFP
« Назад Возвращается функциями ACLASS( ), AINSTANCE( ), AMEMBERS( ) и выводится командой DISPLAY | LIST OBJECTS. Функции рассмотрены в разд. 6.1.5, а команда – в разд. 4.3. Пример. Выводится информация об объекте oArray – экземпляре класса _arraylib библиотеке _utility.vcx. vcxFile = 'c:\Program Files\Microsoft Visual FoxPro 9\Ffc\_utility.vcx' && Создаем объект на базе класса _arraylib oArray = NewObject('_arraylib', vcxFile) display objects like oArray to file d:\a.txt Результат:
Команда DO (_BROWSER)открывает браузер классов, позволяющий выбрать класс и получить доступ к его компонентам с целью их просмотра и редактирования. Имя программы-браузера классов хранит системная переменная _BROWSER. По умолчанию ее значение равно "c:\Program Files\Microsoft Visual FoxPro 9\Browser.app" Число одновременно открытых браузеров класса произвольно. Браузер (рис. 13.12) можно открыть, указав имя библиотеки классов и класс, например: do (_browser) with Home(2) + 'Classes\Buttons.vcx', 'Vcr' Рис. 13.12. Просматривается класс Vcr библиотеки классов Buttons.vcx Команда DO (_OBJECTBROWSER)открывает браузер COM-объектов, позволяющий просматривать состав классов COM-объектов и получать информацию о классах и COM-объектах. Информация об интерфейсах COM-объекта может быть перенесена в программу VFP; детали см. в описании функции EVENTHANDLER( ). Имя программы-браузера COM-объектов хранится системной переменной _OBJECTBROWSER. По умолчанию ее значение равно "c:\Program Files\Microsoft Visual FoxPro 9\ObjectBrowser.app" Функция GETPEM(oObjectName | cClassName, cProperty | cEvent | cMethod)возвращает текущее значение свойства или код метода или обработчика события. Тип результата, если он получается для события или метода – Character, если – для свойства, то зависит от типа свойства. Функция употребляется как на этапе разработки, так и при исполнении программы. Параметры: oObjectName – ссылка на объект, для свойства, события или метода которого функция получает значение. Тип параметра – Object. cClassName – имя класса, для свойства, события или метода которого возвращается результат. Тип параметра – Character. cProperty, cEvent, cMethod – соответственно имя свойства, события или метода, для которого получается результат. Чтобы на этапе исполнения получить код события или метода, нужно воспользоваться свойством Class. Пример 1. Используется свойство Class экземпляра объекта. local oObject, lcCode oObject = NewObject("_form", Home( ) + "Ffc\_base.vcx") lcCode = GetPEM(oObject.Class, "Release") ? lcCode Результат, полученный функцией GETPEM( ): local lcBaseClass if This.lRelease nodefault return .F. endif This.lRelease = .T. lcBaseClass = Lower(This.BaseClass) This.oHost = .NULL. This.ReleaseObjRefs if not Inlist(lcBaseClass + " ", "form", "formset", "toolbar") release This endif Пример 2. Тот же результат, что и в примере 1 получается при задании параметра cClassName. local lcCode && Открываем библиотеку классов _base.vcx set classlib to Home( ) + "Ffc\_base.vcx" lcCode = GetPEM("_form", "Release") ? lcCode Пример 3. Выводится значение свойства Caption кнопки CommandClose формы oForm. public oForm oForm = CreateObject("OneButtonForm") propertyValue = GetPEM(oForm.CommandClose, "Caption") ? propertyValue && Напечатает: Закрыть oForm.Show && Создаем класс OneButtonForm – форму с одной кнопкой define class OneButtonForm as Form add object CommandClose as CommandButton CommandClose.Caption = "Закрыть" && procedure CommandClose.Click ThisForm.Release endProc endDefine Функция PEMSTATUS(oObjectName | cClassName, cProperty | cEvent
|
nAttribute |
Атрибут свойства, события или метода и результат функции |
0 |
Changed (только для свойств). Возвращает .T., если значение свойства изменено по сравнению с начальным (заданным по умолчанию) значением, или .F. – в противном случае |
1 |
Read-only (только для свойств). Возвращает .T., если значение свойство доступно только для чтения, или .F. – в противном случае |
2 |
Protected. Возвращает .T., если свойство, событие или метод защищен, или .F. – в противном случае |
3 |
Type. Возвращает строку "Property", "Event", "Method" или "Object" соответственно для cProperty, cEvent, cMethod или cObject |
4 |
User-defined. Возвращает .T., если свойство, событие или метод определен пользователем, или .F. – в противном случае |
5 |
Defined. Возвращает .T., если свойство, событие, метод или объект определен для oObjectName или cClassName, или .F. – в противном случае |
6 |
Inherited. Возвращает .T., если свойство, событие, метод или объект для oObjectName или cClassName наследуется из другого объекта или класса, или .F. – в противном случае |
Пример 1. В качестве первого параметра передается имя класса.
Local lcCode
&& Открываем библиотеку классов _base.vcx
set classlib to Home( ) + "Ffc\_base.vcx"
lcCode = PEMStatus("_form", "Release", 3)
? lcCode && Напечатает: Method
Пример 2. Выводится значение атрибута User-defined для объекта CommandClose формы oForm.
oForm = CreateObject("OneButtonForm")
userDefined = PEMStatus(oForm, "CommandClose", 4)
? userDefined && Напечатает: .F.
define class OneButtonForm as Form
&& Определение класса см. в примере для GETPEM( )
…
endDefine
Функция
SYS(1269, oObjectName, cProperty, nPropertyAttribute)
возвращает значение атрибута свойства cProperty объекта oObjectName.
Параметр:
nPropertyAttribute – принимает следующие значения:
-
0 – функция возвращает .T., если значение свойства изменено по сравнению с начальным (заданным по умолчанию) значением, или .F. – в противном случае.
-
1 – функция возвращает .T., если значение свойства доступно только для чтения, или .F. – в противном случае.
Функция
SYS(1270 [, nXCoord, nYCoord])
возвращает ссылку на объект, расположенный в заданной точке. Тип результата Object, если объект найден, или .F. – в противном случае.
Параметры:
nXCoord, nYCoord – соответственно x- и y-координаты точки в пикселях. Если параметры опущены, то результат возвращается для позиции, в которой расположен указатель мыши.
Начало координат располагается в верхнем левом углу рабочего стола Windows.
Пример:
public oForm
oForm = CreateObject("OneButtonForm")
oForm.Show
&& Создаем класс OneButtonForm – форму с одной кнопкой
define class OneButtonForm as Form
add object CommandClose as CommandButton
CommandClose.Caption = "Закрыть"
&&
procedure Click
obj = Sys(1270)
if VarType(obj) = 'O' then
? obj.Name && Напечатает: OneButtonForm
endif
endProc
&&
procedure CommandClose.Click
obj = Sys(1270)
if VarType(obj) = 'O' then
? obj.Name && Напечатает: CommandClose
endif
endProc
endDefine
Функция
SYS(1271, oObjectName)
возвращает строку с именем SCX-файла, хранящего форму, в которой содержится объект oObjectName. Функция вернет .F., если объект в SCX-файле не найден.
Пример:
&& Обработчик события Click кнопки очистить
&&
with ThisForm
…
? Sys(1271, .CommandClear) && Напечатает имя SCX-файла формы
endWith
Функция
SYS(1272, oObjectName)
возвращает иерархию объекта oObjectName. Не доступна на этапе проектирования. Тип результата – Character.