|
Программирование >> Разработка пользовательского интерфейса
необходимости изменять установленные идентификаторы, доступные для СУБД. Записать какие-либо данные для объекта можно с помощью еще одного свойства Object.Tag [ = Expression] Оба перечисленных выше свойства по умолчанию, если им не присвоены какие-либо значения, возвращают пустую символьную строку. Для работы с классами и созданными на их основе объектами из программы в Visual FoxPro существует несколько очень важных команд и функций, которые мы и рассмотрим. Мы советуем вам максимально использовать возможности визуальной работы с классами и объектами, которые описаны в главе 10. В то же время мы сознательно уделяем этим командам и функциям столько внимания при описании объектной модели даже несмотря на то, что этот материал имеет специфическое отношение только к Visual FoxPro, так как если вы внимательно разберете приведенные здесь примеры, то в дальнейшем будете уверенно ориентироваться среди рассматриваемых в этом параграфе сложных понятий ООП. ADD CLASS ClassName [OF ClassLibraryNamel] TO ClassLibraryName2 [OVERWRITE] Добавляет описание класса в визуальную библиотеку классов. Параметр Class-Name определяет имя класса, добавляемого в визуальную библиотеку классов ClassLibraryName2. Если файл визуальной библиотеки классов не существует, Visual FoxPro создает визуальную библиотеку классов и добавляет в нее определение класса. Если вы опускаете необязательную опцию OF ClassLibraryNamel, Visual FoxPro ищет описание класса в любых визуальных библиотеках классов, открытых командой SET CLASSLIB. Visual FoxPro сгенерирует ошибку, если определение класса не может быть размещено или определение класса с именем, которое вы задаете, уже существует в ClassLibraryName2. Опция OF ClassLibraryNamel определяет визуальную библиотеку классов, из которой копируется определение класса. Опция OVERWRITE удаляет все классовые определения из визуальной библиотеки классов прежде, чем определение нового класса будет добавлено. Использование команды ADD CLASS добавляет определение класса в библиотеку классов или копирует определение класса из одной визуальной библиотеки классов в другую. Определение класса не может быть добавлено из программы, процедурного файла или приложения Visual FoxPro (файлы с расширениями PRG или APP). DEFINE CLASS ClassNamel AS ParentClass [[PROTECTED Propertyl, Property2 ...] Property = Expression...] [ADD OBJECT [PROTECTED] Object AS ClassName2 [NOINIT] [WITH cPropertylist] ]... [[PROTECTED] FUNCTION PROCEDURE Name [NODEFAULT] cStatements [ENDFUNC ENDPROC]]... ENDDEFINE Создает определяемый пользователем класс или подкласс и задает свойства, события и методы для класса или подкласса. Параметр ClassNamel определяет имя создаваемого класса. ОпцияAS ParentClass определяет родительский класс, на котором будет основан создаваемый класс или подкласс. Родительским классом может быть базовый класс Visual FoxPro, такой, например, как Form или любой другой определяемый пользователем класс или подкласс. Невизуальный определяемый пользователем класс может быть создан определением имени Custom для ParentClass. С помощью опции [PROTECTED Propertyl, Property2 ...] Property = Expression... можно назначить свойства создаваемому классу и установить для них значения, которые будут использоваться по умолчанию. Знак равенства говорит о том, что свойству PropertyName присваивается значение выражения Expression. Чтобы предотвратить доступ и изменение значений свойств вне определения класса или подкласса, включайте опцию PROTECTED и список защищенных свойств. Методы и события внутри определения класса или подкласса могут обращаться к защищенным свойствам. Опция ADD OBJECT позволяет добавить объект к определению класса или подкласса из базового класса Visual FoxPro, определяемого пользователем класса или подкласса, либо из класса OLE. Параметр Object определяет имя объекта и используется для ссылки на объект изнутри определения класса или подкласса после его создания. Параметр ClassName определяет имя класса или подкласса, содержащего объект, который вы добавляете к определению класса. Опция NOINIT указывает на то, что метод Init не выполняется при добавлении объекта. Опция WITH cPropertyList определяет список свойств и значений свойств объекта, который вы добавляете к определению класса или подкласса. Опции 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 с для того, чтобы можно было их рассмотреть и * подвигать
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |