Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [ 36 ] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Опции FUNCTION Name или PROCEDURE Name позволяют создать описание действий, выполняемых при возникновении события или выполнении метода для класса или подкласса. События и методы создаются как набор функций или процедур.

Включение опции NODEFAULT указывает на то, что Visual FoxPro не будет реагировать на события, как это должно было бы случиться, или выполнять процедуры обработки методов. Это позволяет использовать свои собственные обработчики определенных событий, отличающиеся от логики, принятой в Visual FoxPro. Опция NODEFAULT может располагаться в любом месте внутри процедуры обработки события или метода, но эта опция должна быть помещена внутри процедуры обработки события или метода в Конструкторе формы (Form Designer).

Параметр cStatements - это команды Visual FoxPro, которые выполняются, когда вызывается событие или метод.

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

Чтобы создать объект на основе определения класса или подкласса, используйте функцию CREATEOBJECT() с именем соответствующего класса или подкласса.

Определения класса и подкласса, созданные с помощью команды DEFINE CLASS, не могут размещаться внутри команд структурного программирования типа IF...ENDIF или DO CASE...ENDCASE и в циклах типа DO WHILE...ENDDO или FOR...ENDFOR.

В качестве примера посмотрим, как используется эта команда для создания объектов. Создадим три различные формы.

oForm1 = CREATEOBJECT("frmTestForm") oForm2 = CREATEOBJECT("frmTestForm") oForm3 = CREATEOBJECT("frmTestForm")

* Изменим их заголовки oForm1.Caption = "Первая форма" oForm2.Caption = "Вторая форма" oForm3.Caption = "Третья форма"

* Выведем на экран с помощью метода Show первую форму oForm1.Show

* Немножко раздвинем их на экране oForm2.Move(oForm1.Left + 50, oForm1.Top + 50) oForm2.Show

oForm3.AutoCenter = .T. oForm3.Show

* Подождем реакции пользователя

READ EVENTS

* Определим класс для создания наших форм

DEFINE CLASS frmTestForm AS Form BackColor = RGB(192,192,193) Caption = "TestForm"

* Добавим в форму управляющую кнопку

* для закрытия формы

ADD OBJECT cmdExit AS CommandButton WITH ; Caption = "\<< Выход", ;

Left = 150, ; Top = 100, ;

AutoSize = .T. PROCEDURE cmdExit.Click

RELEASE THISFORM

* Когда с экрана будет убрана последняя форма,

* отменим состояние ожидания IF SCREEN.FormCount = 1

CLEAR EVENTS ENDIF ENDPROC ENDDEFINE

Следующая команда:

SET CLASSLIB TO ClassLibraryName [ADDITIVE] [ALIAS AliasName]

Открывает визуальную библиотеку классов с определениями хранящихся в ней классов. Параметр ClassLibraryName определяет имя файла библиотеки. Опция ADDITIVE позволяет



открыть указанную библиотеку, не закрывая открытой ранее. Опция ALIAS AliasName позволяет задать псевдоним для библиотеки, на который можно ссылаться при создании объекта на базе класса, определение которого хранится в данной библиотеке. Задание этой команды в виде SET CLASSLIB TO закрывает все открытые библиотеки классов.

RELEASE CLASSLIB ClassLibraryName

Позволяет закрыть указанную визуальную библиотеку классов из открытых ранее.

Помимо команд при работе с классами в программе не обойтись без следующих функций. CREATEOBJECT(ClassName [, Parameterl, Parameter2, ...])

Создает объект из описания класса или объекта OLE. Аргумент ClassName определяет класс или OLE-объект, из которого будет создан новый объект. Visual FoxPro ищет класс или OLE-объект в следующем порядке:

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

2. Определяемые пользователем описания классов в том порядке, в котором они были загружены в память.

3. Классы в текущей программе.

4. Классы в библиотеках классов, открытые с помощью SET CLASSLIB.

5. Классы в процедурах, открытых с помощью SET PROCEDURE.

6. Классы в последовательности выполнения программ Visual FoxPro.

7. Регистр Windows (для объектов OLE).

Для создания OLE-объектов используется следующий синтаксис параметра ClassName: ApplicationName.Class

Например, для работы с таблицами Microsoft Excel с помощью средств OLE вы можете написать :

oExcelSheet = CREATEOBJECT("Excel.Application")

Когда этот код будет выполнен, запускается Microsoft Excel в скрытом для пользователя виде. Вы не сможете обнаружить его отображение на панеле задач Windows 95. Но в перечне загруженных задач, появляющемся при нажатии клавиш Ctrl+Alt+Del, в этом случае пакет Excel присутствует. Заметьте также, что даже если пакет Excel загружен на компьютере, в скрытом виде загружается еще одна его копия. Подробнее работу OLE Automation мы обсудим в десятой главе.

Необязательные параметры Parameterl, Parameter2, ... используются, чтобы передать значения в процедуру события Init для класса. Событие Init выполняется, когда вы используете функцию CREATEOBJECT() и она разрешает инициализацию объекта.

Используйте функцию CREATEOBJECT() для создания объекта из описания класса или объекта OLE и назначения ссылки на объект с помощью переменной или элемента массива. Прежде чем вы сможете создать объект из определяемого пользователем класса, необходимо его определить с помощью команды DEFINE CLASS или получить к нему доступ в визуальной библиотеке классов, открытой с помощью SET CLASSLIB. Используйте знак равенства или команду STORE для назначения ссылки на объект с помощью переменной или элемента массива.

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

* Открываем визуальную библиотеку классов SET CSSLIB TO Office

* Создаем три объекта oTbr1=CREATEOBJECT("Office Toolbar") oTbr2=CREATEOBJECT("Office Toolbar") oTbr3=CREATEOBJECT("Office Toolbar")

* Изменяем для каждой созданной панели заголовок ее окна oTbr1.Caption = "Первая панель"

oTbr2.Caption = "Вторая панель" oTbr3.Caption = "Третья панель"

* Для первой панели изменим цвет фона oTbr1.BackColor = RGB(0,0,255)

* Выведем их на экран oTbr1.Show oTbr2.Show oTbr3.Show

* Дадим 20 с для того, чтобы можно было их рассмотреть и

* подвигать



READ TIMEOUT 20

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

* Определяем массив для создания ссылки PUBLIC ARRAY aTest(1)

DIMENSION aTest(5)

* Очищаем экран

SCREEN.CLS

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

FOR nCount = 1 TO 5 aTest(nCount) = CREATEOBJECT("frmTestForm")

* Размещаем их по центру экрана aTest(nCount).AutoCenter = .T.

ENDFOR

* Выводим созданные формы на экран

FOR nCount = 1 TO 5

IF TYPE("aTest(nCount)") = "O"

aTest(nCount).Show

ENDIF

ENDFOR

* Определяем класс для создаваемых форм с кнопкой

* для ее стирания

DEFINE CLASS frmTestForm AS Form ADD OBJECT cmdExit As CommandButton WITH ; Caption = "\<< Выход", ;

Top = 111, ;

Left = 108, ; Height = 29, ;

Width = 94, ;

Visible = .T.

PROCEDURE cmdExit.Click

RELEASE ThisForm ENDPROC ENDDEFINE

Функция

AINSTANCE(ArrayName, cClassName)

Размещает все образцы класса в массиве. Аргумент ArrayName определяет имя массива, в котором размещаются образцы. Если массива, который вы определяете, не существует, Visual FoxPro автоматически создаст его. Если массив существует, но не достаточно большой, чтобы вместить все образцы, Visual FoxPro автоматически увеличит его размер. Если массив оказывается больше, чем необходимо, Visual FoxPro усечет его до нужных размеров. В случае, когда массив существует и функция AINSTANCE() возвращает 0 - никакие образцы не найдены, - массив остается неизменным. Аргумент cClassName определяет имя базового класса Visual FoxPro, пользовательского класса или объекта Visual FoxPro (Cursor, DataEnvironment, Relation). Функция AINSTANCE() возвращает количество образцов класса, размещенных в массиве. AMEMBERS(ArrayName, Object [, 1 2])

Размещает в массиве для указанного объекта имена свойств, процедур и включенных объектов. Аргумент ArrayName определяет массив, в который записываются имена элементов свойств для ObjectName. Если массив не достаточно большой, чтобы вместить все имена, Visual FoxPro автоматически увеличивает его размер. Если вы определяете существующий двумерный массив, Visual FoxPro преобразует его в одномерный. Аргумент Object определяет объект, элементы свойств которого размещаются в массиве, указанном в ArrayName. Аргумент Object может представлять собой любое выражение, имеющее отношение к объекту, типа ссылки на объект, переменной объекта или элемента массива объекта. Аргумент 1 указывает на то, что в массив будут включены как свойства объекта, так и методы и включенные объекты. Массив является двумерным со вторым столбцом, уточняющим, к какому типу относится элемент, внесенный в список в первом столбце. Возможные значения для второго столбца: Property, Event, Method или Object. Аргумент 2 указывает на то, что массив будет содержать имена объектов, являющихся элементами объекта, указанного в Object. Массив является одномерным. Эта опция обеспечивает метод для определения имен всех форм в наборе форм или элементов управления в форме. Функция AMEMBERS() возвращает количество объектов, свойств и процедур для объекта, либо 0, если массив не может быть создан.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [ 36 ] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146