Распечатать страницу

Информация о классе и объекте в 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

Результат:

Object: OARRAY

Priv

O

_ARRAYLIB

 

Class Tree:

 

 

 

 

_ARRAYLIB

c:\Program files\Microsoft Visual FoxPro 9\ffc\_utility.vcx

_CUSTOM

c:\Program files\Microsoft Visual FoxPro 9\ffc\_base.vcx

CUSTOM

 

 

 

 

Properties:

 

 

 

 

 

AOBJECTREFS

A

 

 

 

                (1, 1)

L

.F.

 

 

                (1, 2)

L

.F.

 

 

                (1, 3)

L

.F.

 

 

BASECLASS

C

"Custom"

 

 

BUILDER

C

""

 

 

 

 

 

Methods and Events:

 

 

 

 

ACOLSCAN

 

 

 

 

ADDOBJECT

 

 

 

 

ADDPROPERTY

 

 

 

 

DELAITEM

 

 

 

 

DESTROY

 

 

 

 

ERROR

 

 

 

 

INIT

 

 

 

 

INSAITEM

 

 

 

 

 

 

 

Команда

DO (_BROWSER)

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

Имя программы-браузера классов хранит системная переменная _BROWSER. По умолчанию ее значение равно

"c:\Program Files\Microsoft Visual FoxPro 9\Browser.app"

Число одновременно открытых браузеров класса произвольно.

Браузер (рис. 13.12) можно открыть, указав имя библиотеки классов и класс, например:

do (_browser) with Home(2) + 'Classes\Buttons.vcx', 'Vcr'

188.1.-Просматривается-класс-Vcr-библиотеки-классов-Buttons.vcx

Рис. 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
                   | cMethod | cObject, nAttribute)

возвращает значение атрибута для свойства, события, метода или объекта. Тип результата – Character или Logical.

Параметры:

oObjectName – ссылка на объект, для свойства, события или метода которого функция возвращает атрибут. Тип параметра – Object. Если oObjectName – это контейнер, например такой, как форма, то можно получить атрибут объекта, принадлежащего контейнеру.

cClassName – имя класса, для свойства, события или метода которого возвращается результат. Тип параметра – Character.

cProperty, cEvent, cMethod, cObject – соответственно имя свойства, события, метода или объекта, для которого получается результат. Параметр cObject указывается, если oObjectName – это контейнер и соответствующий cObject объект принадлежит этому контейнеру.

nAttribute – задает вид возвращаемого атрибута; принимает приведенные в табл. 13.9 значения.

Таблица 13.9

Значения параметра nAttribute

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.