Скачать 3.02 Mb.
|
Свойства класса DataEnvironment. AutoCloseTables определяет закрываются ли таблицы или представления, указанные в объекте dataenvironment, когда закрываются объекты типа form set, form или отчет. Данное свойство доступно для редактирования во время разработки, а при выполнении только для чтения. Синтаксис: DataEnvironment.AutoCloseTables[ = lExpr], lExpr имеет следующие допустимые значения: True (.T.) (по умолчанию) таблица или представление закрываются, False (.F.) таблица или представление остаются открытыми. AutoOpenTables задает загружаются ли автоматически таблицы или представления, связанные с объектом dataenvironment объектов типа form set, form или отчет. Данное свойство доступно во время разработки и только для чтения при выполнении приложения. Синтаксис: DataEnvironment.AutoOpenTables[ = lExpr], lExpr имеет следующие допустимые значения: True (.T.) (по умолчанию) таблица или представление открываются автоматически, False (.F.) таблица или представление не открываются автоматически. InitialSelectedAlias задает псевдоним, ассоциированный с объектом типа Cursor как текущий, когда объект dataenvironment загружается. Данное свойство доступно во время разработки и только для чтения при выполнении. Синтаксис: DataEnvironment.InitialSelectedAlias[ = cText], cText указывает имя псевдонима. OpenViews определяет тип представления, ассоциированного с объектами form set, form или отчетом объекта dataenvironment, открывающегося автоматически. Данное свойство доступно во время разработки и только для чтения при выполнении. Синтаксис: DataEnvironment.OpenViews[ = nExpression], nExpression имеет следующие допустимые значения: 0 (по умолчанию) Local and Remote локальные и удаленные представления открываются автоматически; 1 Local only только локальные представления открываются автоматически; 2 Remote only только удаленные представления открываются автоматически; 3 None любые представления автоматически не открываются. События и методы класса DataEnvironment. AfterCloseTables возникает после закрытия таблиц и представлений, указанных в объекте dataenvironment для классов form, form set или отчетов. Синтаксис: PROCEDURE DataEnvironment.AfterCloseTables. BeforeOpenTables возникает перед закрытием таблиц и представлений, связанных со средой данных формы, набора форм или отчета. Синтаксис: PROCEDURE DataEnvironment.BeforeOpenTables. CloseTables приводит к закрытию таблиц и представлений, связанных с объектами Cursor среды данных DataEnvironment. Можно вновь открыть эти таблицы и представления, вызвав метод OpenTables. Синтаксис: DataEnvironment.CloseTables. Методы Destroy, Error и Init аналогичны методам класса form. Класс Cursor. Данный класс отличается от обычных базовых классов VFP. Он создается лишь тогда, когда таблица или представление добавляется в окружение данных (dataenvironment) для объектов типа form, form set или в отчет и позволяет задавать свойства этих таблиц или их связей, в том числе некоторые и при выполнении приложения. При установке свойств объекта типа cursor во время выполнения приложения выдается сообщение об ошибке (кроме свойств Filter и Order изменение которых допускается). Для того чтобы новые значения свойств вступили в действие необходимо вызвать методы CloseTables и OpenTables для класса dataenvironment. Также если во время работы программы изменяется свойство Order объекта типа cursor включенного в динамическую связь один-ко-многим, то данное связь теряется. Свойства класса Cursor. Alias указывает псевдоним, используемый для таблицы, ассоциированной с объектом типа Cursor. Данное свойство доступно как во время разработки, так и при выполнении программы. Синтаксис: DataEnvironment.Cursor.Alias[ = cText], cText указывает данный псевдоним. BufferModeOverride указывает когда игнорировать свойство BufferMode, установленное для объектов form или form set. Данное свойство доступно как во время разработки, так и при выполнении. Синтаксис: DataEnvironment.Cursor.BufferModeOverride[ = nValue], nValue имеет следующие допустимые значения: 0 None буферизация отсутствует; 1 (по умолчанию) используется свойство BufferMode соответствующего объекта form или form set; 2 блокирует запись и помещает в буфер изменения пока не передвинется указатель записи; 3 позволяет редактировать одиночную запись и блокирует ее только тогда, когда она записывается на диск; 4 блокирует каждую редактированную запись, но не записывает их на диск до вызова команды TABLEUPDATE( ). 5 позволяет редактировать все записи и не блокирует каждую редактированную запись до вызова команды TABLEUPDATE( ). CursorSource задает имя таблицы или представления, связанного с объектом Cursor. Только для чтения во время программирования; только для чтения-записи при выполнении. Синтаксис: DataEnvironment.Cursor.CursorSource[ = cText], cText задает данное имя. Database указывает путь к базе данных, содержащей таблицу или представление, связанную с объектом Cursor. Только для чтения во время программирования; только для чтения-записи при выполнении. Синтаксис: DataEnvironment.Cursor.Database[ = cPath], cPath - указывает данный путь к файлу (.DBC). Для свободной таблицы это свойство пустая строка. Exclusive указывает когда таблица, ассоциированная с объектом Cursor, открывается эксклюзивно. Данное свойство доступно во время разработки, только для чтения-записи при выполнении. Синтаксис: DataEnvironment.Cursor.Exclusive[ = lExpr], lExpr - имеет следующие допустимые значения: True (.T.) (по умолчанию) таблица открывается эксклюзивно; False (.F.) открывается не эксклюзивно. Filter исключает записи, не соответствующие заданному критерию. Данное свойство доступно во время разработки и для чтения-записи при выполнении программы. Синтаксис: DataEnvironment.Cursor.Filter[ = cExpr], cExpr – символьное выражение VFP. NoDataOnLoad - определяет открывать ли представление, ассоциированное с объектом Cursor, без загрузки данных. Данное свойство доступно во время разработки и для чтения-записи при выполнении. Синтаксис: DataEnvironment.Cursor.NoDataOnLoad[ = lExpr], lExpr имеет следующие допустимые значения: True (.T.) загрузка данных при открытии не используется; False (.F.) (по умолчанию) наоборот. Order используется для определения порядка вывода записей на экран. Данное свойство доступно как во время разработки, так и выполнения. Синтаксис: DataEnvironment.Cursor.Order[ = cTagName], cTagName указывает существующий индекс для таблицы. Если установлено свойство ChildOrder объекта relation, то данное свойство игнорируется. ReadOnly – определяет, когда разрешено обновление таблиц, связанных с объектом Cursor. Не доступно во время программирования и доступно для чтения-записи при выполнении. Синтаксис: DataEnvironment.Cursor.ReadOnly[ = lExpr], lExpr имеет следующие допустимые значения: True (.T.) редактирование разрешено; False (.F.) (по умолчанию) не разрешено. События и методы класса Cursor. События и методы Destroy, Error, Init и ResetToDefault аналогичны методам и событиям класса form. Класс Relation. Данный класс позволяет задавать связи двух таблиц. Установка значений свойств этого класса вызывает ошибку. Для того чтобы новое значение свойства вступило в действие, необходимо выполнить методы CloseTables и OpenTables для объекта dataenvironment. Свойства класса Relation. ChildAlias задает псевдоним дочерней таблицы. Только для чтения при выполнении и во время программирования. Синтаксис: DataEnvironment.Relation.ChildAlias[ = cText], cText определяет данное имя. ChildOrder задает имя индекса, используемого для установки связи между таблицами. Доступно во время программирования; только для чтения при выполнении. Синтаксис: Object.ChildOrder[ = cTagName] cTagName определяет существующее имя индексного тэга. Если свойство ChildOrder установлено, свойство Order объекта Cursor для данной таблицы игнорируется. OneToMany определяет тип связи. Доступно во время программирования; только для чтения при выполнении. Синтаксис: Object.DataEnvironment.Relation.OneToMany[ = lExpr] lExpr - имеет следующие допустимые значения: True (.T.) указатель записи остается на той же родительской записи, пока указатель дочерней таблицы передвигается через все связанные записи дочерней таблицы; False (.F.) (по умолчанию) указатель записи родительской таблицы передвигается, а указатель дочерней таблицы устанавливается на первую связанную запись дочерней таблицы. ParentAlias - определяет псевдоним родительской таблицы. Только для чтения. Синтаксис: DataEnvironment.Relation.ParentAlias[ = cAliasName], cAliasName указывает данное имя. RelationalExpr определяет выражение, содержащее поля родительской таблицы, связывающее с помощью индекса дочерней таблицы эти таблицы. Для объекта Relation это свойство доступно во время программирования; только для чтения при выполнении. Синтаксис: Object.RelationalExpr[ = cExpr], cExpr определяет данное выражение. События и методы класса Relation. События и методы Destroy, Error, Init и ResetToDefault аналогичны методам и событиям класса form. В VFP 8.0 возможности окна DataEnvironment расширены. Контекстное меню содержит две новые команды: Add CursorAdapter (добавить адаптер курсора) добавляет в среду окружения формы адаптер курсора; Builder (построитель) запускает построитель, позволяющий добавить в среду окружения адаптер курсора. Адаптер курсора является новым объектом VFP 8.0, который поддерживает широкий диапазон источников данных, используемых при создании формы: непосредственное соединение с базой данных; ODBC; ActiveX Data Object (ADO); XML. Для создания адаптера курсора удобнее всего воспользоваться построителем адаптера курсора. 8.4. Определение классов пользователя Без классов пользователя можно обойтись, но если освоить этот способ программирования, то можно существенно увеличить скорость разработки, сопровождения и тиражирования программ. Например, если в Вашем приложении 10 форм, построенных на основе базового класса FORM, то чтобы изменить одно свойство во всех 10 формах потребуется 10 строк кода в программных модулях следующего вида F(i).<свойство>=<значение>, где F(i) условно, имя i-ой формы. Если же построить эти 10 форм на основе класса пользователя, то будет нужна только одна такая строка кода внутри команды определения класса пользователя. Класс пользователя (КП) создается на основе базового класса (БК) или другого КП следующей командой DEFINE CLASS <имя КП> AS <имя РК> [[PROTECTED <имя свойства1>,<имя свойства2>,…] <имя свойства>=<сВыражение>] [ADDOBJECT [PROTECTED] <имя объекта> AS <имя класса> [NOINIT] [WITH <список свойств>]]… [[PROTECTED] FUNCTION | PROCEDURE <имя процедуры> <команды> [ENDFUNC | ENDPROC]]… ENDDEFINE, которая определяет свойства, события и методы нового класса пользователя. В команде <имя РК> это имя родительского класса. Не визуальные КП создаются на основе базового класса Custom. Первый структурный блок команды позволяет добавить новые свойства в формате <имя свойства> = <cВыражение>, изменить значения существующих свойств в формате <имя свойства> = <значение>, определить список защищенных свойств, изменения значения которых вне определения класса не допускаются в формате PROTECTED <имя свойства1>, <имя свойства2>,…. Второй структурный блок команды позволяет добавить объекты в создаваемый класс, фраза PROTECTED запрещает изменение свойств добавляемых объектов. Включение NOINIT отменяет выполнение метода INIT при добавлении объекта. После фразы WITH задаётся список свойств и их значений. Функции и процедуры в описании класса могут определять как действия, выполняемые при возникновении различных событий, так и новые методы для объектов. События, описываемые в определении класса, вызываются следующим образом <имя объекта>.<имя события>; новые методы вызываются аналогично: <имя объекта>.<имя метода>. Простейшая форма команды определяет КП (подкласса) с именем Testclass на основе БК FORM имеет следующий вид DEFINE CLASS Testclass AS FORM ENDDEFINE. Эта команда внешне не проявляется, но теперь есть возможность создания объекта формы на основе подкласса Testclass. Например, F1=CREATEOBJECT(‘Testclass’) F1.SHOW(1). В чем преимущества КП? Предположим, что вы хотите создать особый внешний вид интерфейсу вашей программы. Например, нужны окна с желтым цветом фона и красным текстом. Включим эту информацию в КП и тогда впоследствии каждая форма, наследуя свойства этого класса, будет наследовать и его цвета. Например, DEFINE CLASS Testclass AS FORM Backcolor = RGB (255, 255, 0) Forecolor = RGB(128, 0, 0) ENDDEFINE VFP определит цвета как смесь трех основных цветов: красного, зеленого и синего. Отсюда термин RGB. Каждый основной цвет имеет значение от нуля до 255, представляющее яркость этого цвета. Комбинация всех трех значений для каждого цвета определяет полный цвет. Например, определение всех трех значений равными нулю означает, что не нужен ни один из основных цветов. Такое отсутствие яркостей составляющих создает черный цвет. Аналогично, установка каждого основного цвета на максимальное значение 255 даст белый цвет. Если сохранять все три цветовых значения равными, увеличивая их значения от 1 до 254, то получится 254 оттенка серого. Возможно, именно поэтому люди всегда говорят, что оттенков серого всегда гораздо больше, чем оттенков любого другого цвета. В табл. 8.2 приведены значения RGB для 16 наиболее часто используемых цветов. Таблица 8.2
Третий столбец таблицы представляет каждый цвет в виде одного числа. Цвета можно определять, используя это число вместо функции RGB. Это число можно определить из следующего уравнения: значения_цвета=В * 256 * 256 + G * 256 + R, где В – значение для синего цвета от 0 до 255; G – значение для зеленого цвета от 0 до 255; R – значение для красного цвета от 0 до 255. Значение можно определить с помощью функции RGB() значения_цвета= RGB(R,G,B). Программным способом цвет изменяется <имя свойства>=значения_цвета. В предыдущем примере мы изменили свойства в КП Testclass по сравнению с базовым классом. Но мы также можем добавить другие свойства. Например, добавим в качестве свойства авторский знак DEFINE CLASS Testclass AS FORM SS = ‘ (c) ООО «БАЙТ» САХАЛИН’ ENDDEFINE. Это свойство будет наследоваться всеми будущими объектами. В КП контейнерного типа можно добавить и объект, который будет наследоваться всеми будущими объектами. Например, мы хотим, чтобы каждая будущая форма содержала кнопку “Выход”, это можно сделать определением следующего КП DEFINE CLASS Testclass AS FORM ADDOBJECT Kexit AS COMMANDBUTTON; WITH Caption = “Выход”,; Height = 2,; (высота объекта) Left = 0,; (левый край на форме) Top = 0,; (верх на форме) Width = 6 (ширина объекта) ENDDEFINE Эту кнопку можно нажимать целый день – при этом ничего не произойдет, поскольку она не имеет события Click и поэтому VFP не знает, что делать при нажатии на кнопку, кроме того, как прорисовывать ее в нажатом виде и затем отпускать. Чтобы заставить кнопку что-нибудь делать, необходимо связать метод с событием. События. Без событий мир объективного программирования был бы довольно скучен. События заставляют совершать действия. Нажатие кнопки мыши или клавиши – событие. Перемещение мыши – также событие. Понимание студентами всей объектно-ориентированной технологии будет, вероятно, большим событием. Таблица 8.3 содержит список основных событий, распознаваемых СУБД VFP. В большинстве случаев имя события соответствует моменту, когда система его распознает. В таблице приводится и краткое описание событий. Таблица 8.3
Множество событий достаточно представительное. Но каждый объект не использует все события из данного списка. Только два-три события являются общими для всех объектов. Кроме того, список событий VFP нельзя изменять и добавлять к нему новые события. Последние два события уже встречались в ранних версиях СУБД. Возможно, вы пользуетесь предложением When для определения того, может ли пользователь заходить в поле. В противном случае его заставляют повторить ввод или обрабатывают ошибку программно. В VFP можно продолжать использовать эти два события, хотя здесь можно захватывать и обрабатывать и другие события. Одно из таких событий событие Click. Определим метод для этого события. Пусть при нажатии пользователя на кнопку “Выход” нужно изменить надпись на кнопке. Для этого пометим в описании класса процедуру Click. F1=CREATEOBJECT(‘Testclass”) F1.Show DEFINE CLASS Testclass AS FORM <см. предыдущие примеры> PROCEDURE Kexit.CLICK This.Captain=‘Что Вы хотите?’ ENDPROCEDURE ЕNDDEFINE В определении класса включена процедура Kexit.Click при определении процедуры события ее имя указано вместе с именем объекта – так же, как при ссылке на свойства, потому что в одном классе может определено несколько событий Click, принадлежащих разным объектам. В процедуре есть ключевое слово This – это относительная ссылка на объект (фактическое имя – это абсолютная ссылка). Относительные ссылки (this – текущий объект; thisform – форма, содержащая текущий объект; thisformset – набор форм, содержащих текущий объект; parent – непосредственный контейнер текущего объекта) необходимо использовать в процедурах в определениях классов (this.caption – это обращение к тексту кнопки, а не формы). Почему бы не пометить в процедуру имя объекта Kexit? Дело в том, что мы определяем класс, на основы которого будет создан объект, он еще не существует. This – это ссылка на не существующий объект. Классы пользователя можно создавать не только программно, а использовать для этого визуальные средства. Их можно найти на вкладке CLASS менеджера проектов. Они во многом напоминают конструктор форм. Можно создавать новые или добавлять существующие классы в проект. Для последних можно посмотреть коды всех методов, запрограммированные разработчиками VFP. Работая с классом в проекте в системном меню появляется пункт CLASS, в котором можно добавлять новые свойства и новые методы. Прикладные меню в VFP не являются объектами, они создаются системным генератором. Однако часто разработчики располагают меню на формах. Поэтому имеет смысл рассмотреть технологию таких действий. Закрепление меню на форме. Для вывода собственного меню не на место системного меню VFP, а на одну из собственных форм, необходимо выполнить следующую последовательность действий. 1. Находясь в Menu Designer, в меню View выбрать пункт General Options. 2. В окне General Options отметить флажок Top-Level Form. 3. Завершить создание собственного меню. 4. Вызвать на редактирование собственную форму. 5. В свойствах формы найти событие Init Event. 6. В обработчике событий написать: Do <имя>.mpr With This, .T. После генерации загрузочного модуля (app или exe) заданное меню будет закреплено в первой строке заданной формы. При обработке различных не предусмотренных разработчиком действий пользователя удобно пользоваться стандартными диалоговыми окнами, для программирования которых СУБД имеет специальную функцию. Функция для стандартных диалоговых окон. Эта функция отображает диалоговое окно, определенное разработчиком. Ее синтаксис MESSAGEBOX(cMessageText [, nDialogBoxType [, cTitleBarText]]). Параметр cMessageText задает текст, который должен появляться в диалоговом окне. Для переноса части сообщения на новую строку используйте в тексте cMessageText возврат каретки (CHR(13)). Высота и ширина диалогового окна будут соответствующим образом отрегулированы, чтобы вместить весь текст cMessageText. Параметр nDialogBoxType определяет кнопки и значки диалогового окна, кнопку по умолчанию при появлении диалогового окна и поведение диалогового окна. В приведенных ниже таблицах коды от 0 до 5 задают набор кнопок, отображаемый в диалоговом окне (Код1 из табл. 8.4), а коды 16, 32, 48 и 64 значки диалогового окна (Код2 из табл. 8.5). Коды 0, 256 и 512 определяют, какая кнопка в диалоговом окне используется по умолчанию, то есть изображается нажимаемой в открывающемся диалоговом окне (Код3 из табл. 8.6). Если аргумент nDialogBoxType опущен, это эквивалентно заданию значения 0.
Аргумент nDialogBoxType может представлять собой сумму трех значений ѕ по одному из каждой таблицы. Например, если nDialogBoxType равняется 290 (2+32+256), то он задает диалоговое окно со следующими характеристиками: кнопки Abort, Retry и Ignore; в качестве значка в окне сообщения используется вопросительный знак; вторая кнопка, Retry, используется по умолчанию. Параметр cTitleBarText задает текст для строки заголовка диалогового окна. Если аргумент cTitleBarText опущен, в строке заголовка будет стоять текст "Microsoft Visual FoxPro". Функция возвращает числовой результат. Значение, возвращаемое функцией MESSAGEBOX( ), указывает, какая кнопка была выбрана в диалоговом окне. Если в диалоговом окне с кнопкой Cancel для выхода из него нажимается клавиша ESC, то возвращается то же значение (2), что и при нажатии кнопки Cancel. В следующей таблице перечислены значения, возвращаемые функцией MESSAGEBOX( ) для каждой кнопки.
Значение, возвращаемое функцией MESSAGEBOX( ), может быть использовано для управления дальнейшим процессом обработки информации. |
«Учебно-методический комплекс дисциплины «Информационное обеспечение систем управления» | Пояснительная записка «Современная организация и технология документационного обеспечения управления». Он связан с курсами «Документоведение», «Информационное... | ||
Исследование систем управления процесс определения организационной... Место исследований систем управления в комплексе дисциплин по теории и практке управления | Программное обеспечение для отладки систем управления упругими объектами Целью данной работы является разработка программного обеспечения для лабораторного стенда для изучения систем управления упругими... | ||
Рабочая программа дисциплины «Информационное обеспечение, базы данных» Факультет информационных систем и технологий Кафедра Прикладной математики и вычислительной техники | Учебная программа по дисциплине " информационное обеспечение управления " Изучение теоретических, методических и практических вопросов разработки, внедрения и совершенствования информационного обеспечения... | ||
Российской Федерации Самарский государственный архитектурно-строительный... Информационные системы” являются информационные системы и сети, их математическое, информационное и программное обеспечение, способы... | Рабочая программа дисциплины «Архитектура ЭВМ и вычислительных систем»... «Автоматизированные системы обработки информации и управления» (по отраслям) и 230105 «Программное обеспечение вычислительной техники... | ||
Исследование систем управления Целью работы является рассмотрение частных методов исследования систем управления, а именно эксперимент, наблюдение и опрос | Примерная тематика рефератов по курсу «Исследование систем управления» Современный менеджмент и необходимость исследования систем управления социально-экономической организацией | ||
Организационно-правовое обеспечение правовой деятельности Информационное обеспечение организации и проведения внеучебной работы | Исследование систем управления Специальности: «Менеджмент организации» «Исследование систем управления» является ведущей,в учебном процессе среди смежных дисциплин | ||
Реферат по дисциплине "Избирательное право" тема: Информационное... Информационное обеспечение выборов. Правовое регулирование предвыборной агитации в РФ | Информационное обеспечение управления В настоящее время классификационные схемы (классификаторы) строятся не только на основе соподчинения понятий (метод иерархии), но... | ||
Курсовая работа По дисциплине «Базы данных» Программное обеспечение для создания систем управления базами данных | Рабочая программа учебной дисциплины «исследование систем управления» Студенты научатся методам планирования эксперимента и организации исследования систем управления и научатся использовать приобретенные... |