Использование элементов управления при проектировании форм приложения

 












Лабораторная работа


Тема: Использование элементов управления при проектировании форм приложения

1. Разработка и использование классов при создании приложений


  1. Средствами СУБД Visual FoxPro создать класс, основанный на базовых классах CheckBox, OptionGroup, Spinner, Command Button, Text Box или др.
  2. Создать форму верхнего уровня, при этом использовать элементы управления, основанные на ранее созданном классе.

Рассмотрим создание своего класса на примере группы кнопок навигации.

Для визуального создания классов и подклассов в Visual FoxPro используется конструктор классов (Class Designer).

) Создание класса можно осуществить с использованием Диспетчера проектов (Project Manager):

вкладка Classes Þ кнопка New

На экране появляется диалоговое окно New Class, в котором следует указать: имя класса, базовый класс и библиотеку, в которой он будет храниться


Рисунок 1 Создание нового класса


В появившемся окне Конструктора классов появляется прообраз разрабатываемого класса. Список доступных для него свойств, событий и методов приведен в окне Properties. Команды New Property и New Method меню Class предназначены для добавления новых свойств и методов. Если вы хотите использовать данные, которые будут иметь отношение к нескольким объектам, лучше запомнить эти данные не в переменной, а в свойстве. Для выполнения каких-либо действий - создавайте методы.

В описании класса свойства и методы имеют глобальный диапазон действия (Public). Свойства и методы, определенные как защищенные (Protected), могут использоваться только в пределах данного класса или подкласса, основанного на данном классе. Свойства и методы, определенные как скрытые (Hidden), могут использоваться только в пределах данного класса.

В данном примере прообразом создаваемого класса является объект - контейнер (Рисунок 2).


Рисунок 2 Конструктор классов Устанавливаем свойство ButtonCount = 4 (контейнер содержит 4 кнопки управления).


Для каждой кнопки назначаем следующие свойства:


Command1.Picture = "top.bmp" Command1.Caption = "" Command1.Name = "Top" Command2.Picture = "prev.bmp" Command2.Caption = "" Command2.Name = "Preview" Command3.Picture = "next.bmp" Command3.Caption = "" Command3.Name = "Next" Command4.Picture = "bottom.bmp" Command4.Caption = "" Command4.Name = "Bottom"

Описываем событие Click каждой кнопки:

* PROCEDURE Command1.Click Go top _screen.ActiveForm.Refresh()

* ENDPROC

* PROCEDURE Command2.Click If !BOF() Skip -1 EndIf _screen.ActiveForm.Refresh()

*ENDPROC

* PROCEDURE Command3.Click If !EOF() Skip EndIf _screen.ActiveForm.Refresh()

* ENDPROC

* PROCEDURE Command4.Click Go bottom _screen.ActiveForm.Refresh() * ENDPROC


Созданный класс изображен на рисунке 3.


Рисунок 3 Конструктор классов. Кнопки навигации


В качестве примера рассмотрим контейнер, который содержит два элемента Textbox и Timer . У каждого из этих классов своя функция, но в совокупности они образуют новый элемент управления - часы.

В класс контейнер мы добавили свойство nTimeFormat (ClassðNew Property) значение которого определяет, в каком формате - 12 или 24 часовом - выводить на экран время. Установка значения 0 для этого свойства задает вывод в 12-часовом формате (am/pm), а 1 - в 24-часовом (military). Событие Timer происходит каждую секунду (1000мс), и после этого запускается процесс обновления показаний в текстовом поле - новое значение присваивается свойству Value объекта Тext2.

Объект класса Timer позволяет организовать выполнение команды или последовательности команд через заданный интервал времени, прошедшее после последнего события Timer. Отсчет ведется в миллисекундах.

Устанавливаем следующие свойства для наших элементов.


Text1.Enabled = .F..Value = (CDOW(DATE())+ " " + CMONTH(DATE()) + " " + ALLT(STR(DAY(DATE()))) + ", " +ALLT(STR(YEAR(DATE())))). Enabled = .F. .Value = (IIF(THIS.PARENT.nTimeFormat=0, IIF(VAL(SUBSTR(TIME(),1,2))>12,ALLT(STR((VAL(SUBSTR(TIME(),1,2))-12)))+SUBSTR(TIME(),3,6),TIME()),TIME()))1.Internal = 1000

Описываем процедуру Timer для таймера:

*PROCEDURE TIMER1.TIMER.PARENT.Text1.VALUE= CDOW(DATE())+ " " + ;(DATE()) + " " + ;(STR(DAY(DATE()))) + ;

", " +ALLT(STR(YEAR(DATE())))THIS.PARENT.nTimeFormat=0.PARENT.Text2.VALUE= ; IIF(VAL(SUBSTR(TIME(),1,2))>12,; ALLT(STR((VAL(SUBSTR(TIME(),1,2))-12)))+; SUBSTR(TIME(),3,6),TIME()).PARENT.Text2.VALUE=TIME()

*ENDPROC



Обеспечение доступности разработанных классов

Разрабатываемые в Конструкторе классы хранятся в выбираемых вами библиотеках классов, которые следует включить в проект. При проектировании формы вы можете легко перетаскивать их из Диспетчера проектов на поверхность формы, создавая необходимые объекты. Но все же удобнее получить доступ к своим классам из панели инструментов Form Controls.


Рисунок 4 Подключение библиотеки классов

Для того чтобы можно было легко использовать свои классы при работе с панелью инструментов, в диалоговом окне Options меню Tools следует сделать следующие установки. Выберите вкладку Controls и нажмите кнопку Add. В появившемся диалоговом окне выберите файл - визуальную библиотеку классов, - в котором хранятся ваши классы. Теперь при нажатии на кнопку View Classes на панели инструментов Form Controls, из появляющегося меню (см. Рис. 3) вы легко можете выбрать свою библиотеку классов.

Сделать библиотеки классов доступными в момент запуска программ позволяет команда Set Classlib TO <ClassLibraryName>

Например: set classlib to c:\vfp\prim_met\myclass

Задание этой команды без идентификаторов - Set Classlib TO - закрывает все открытые библиотеки.

Команда release Classlib <ClassLibraryName> позволяет закрыть указанную визуальную библиотеку классов из открытых ранее.


2. Использование odbc-технологии для создания внешних представлений


Приобретение практических навыков в использовании ODBC-технологии для создания внешних представлений (Remote Views), а также независимых представлений (Offline Views).

1)Спроектировать запрос, для реализации которого необходимо использовать таблицы .DBF и электронные таблицы .XLS.

2)С помощью ODBC установить источник данных - MS Excel. Выполнить соединение.

)Создать внешнее представление Remote Views. Выполнить изменения в представлении и продемонстрировать их в таблице .XLS.

)Создать независимое внешнее представление Offline Views. Использовать внешнее представление для вывода данных в отчете.

3. Определение источника данных ODBC

isual FoxPro обладает мощными встроенными средствами создания и поддержки баз данных. При работе с данными, сохраняемыми в DBF-таблицах Visual FoxPro, создаются так называемые локальные данные. Но возможны ситуации, когда требуемые данные хранятся не в локальных таблицах. Информация, используемая в разрабатываемом приложении может, находиться в электронных таблицах Microsoft Excel, в текстовом виде, в файлах базы данных Paradox или же на сервере базы данных типа SQL Server. Такие данные называются удаленными данными, несмотря на то, что они могут находиться даже на одном компьютере с Visual FoxPro.

Для доступа к удаленным данным используется стандартный протокол доступа к базам данных - ODBC. Open Database Connectivity (открытые средства связи с базами данных) - это технология, встроенная в cреду Windows, которая позволяет двум различным системам баз данных совместно использовать свои данные.

Работа ODBC основана на ODBC-процессоре Windows. Модель ODBC разделена на три отдельных уровня. Первый - ODBC-процессор Windows. Два других можно определить как драйверы ODBC: один для приемника данных, второй для источника.

ODBC - это сервис, предоставляемый Windows, но прежде чем обратиться к любым ODBC-источникам данных, необходимо установить драйвер источника данных в Windows.

Для этого примера используйте драйвер Microsoft Excel. Тем не менее, для всех источников данных необходимо в поле ввода Имя источника данных указать имя источника данных, которое в дальнейшем используется для ссылки на источник данных. Поле ввода Описание содержит краткое описание источника данных. Если при определении значений остальных полей возникнут проблемы, обратитесь к администратору базы данных, к которой вы собираетесь определить доступ. После выбора базы данных щелкните на кнопке ОК в установочном диалоговом окне ODBC-драйвера.


4. Использование соединений


Удобным средством для работы с удаленными данными является именованное соединение, которое хранится в базе данных и на которое можно ссылаться по имени при создании удаленного представления. Соединение - это заранее определенный удаленный источник данных, описание которого хранится в базе данных Visual FoxPro. Соединения создаются с помощью команды Connections (Соединение), выбираемой из контекстного меню конструктора базы данных.

Область Specify data source (Определить источник данных) содержит опции Data source, userid, password (Источник данных, идентификатор пользователя, пароль) и Connection string (Строка соединения), определяющие способ соединения с источником данных. При выборе первой опции в области отображаются поля ввода, приведенные в таблице 2.1.


Таблица 2.1 - Назначение полей ввода области Specify data source

Поле НазначениеData source (Источник данных) Userid (Идентификатор пользователя) Password (Пароль) Database (База данных)Имя источника данных из списка установленных источников данных ODBC Идентификатор пользователя для выбранного источника данных Пароль пользователя Имя базы данных

При выборе опции Connection String (Строка соединения) вместо приведенных выше полей ввода отображается только одно поле ввода Connect string (Строка соединения), в котором можно ввести строку соединения с источником данных.

Кнопка Verify Connection (Проверить соединения) предназначена для проверки соединения с указанным источником данных. Кнопка New Data Source (Новый источник данных) позволяет определить новый источник данных непосредственно из конструктора соединений.

Область Display ODBC login prompts (Отображение окна доступа к ODBC-источнику) содержит опции, определяющие, когда будет открываться диалоговое окно Data Source Login (Доступ к источнику данных), рассматриваемые в таблице 2.2.


Таблица 2.2 - Опции области Display ODBC login prompts

Наименование НазначениеWhen login info is not specified (Когда параметры доступа не определены) Always (Всегда) Never (Никогда)Диалоговое окно Data Source Login открывается только в том случае, если заданный идентификатор пользователя и пароль не найдены в определении именованного соединения. Указывает, что Visual FoxPro всегда открывает для пользователя окно Data Source Login, в котором можно выбрать другой регистрационный идентификатор и другой пароль из числа хранящихся в именованном соединении Указывает, что Visual FoxPro никогда не открывает диалоговое окно входа в базу данных

В области Data processing (Обработка данных) определяются свойства, связанные с обработкой данных соединения, отраженные в таблице 2.3.


Таблица 2.3 - Опции области Data processing

НаименованиеНазначениеAsynchronous execution (Асинхронное выполнение) Display warnings (Показывать предупреждения) Batch processing (Пакетная обработка данных) Automatic transactions (Автоматические транзакции) Packet size (Размер пакета данных )Задает признак асинхронного соединения Задает признак отображения не перехватываемых предупреждений Задает пакетный режим обработки данных Задает автоматическую обработку транзакций Задает размер пакета данных, передаваемого от сервера базы данныхДля определения значений параметров области Data processing можно воспользоваться функцией DBSETPROP().

Область Timeout intervals (Интервалы времени) содержит опции, устанавливающие временные параметры обработки данных, отраженные в таблице 2.4.


Таблица 2.4 - Опции области Timeout intervals

Наименование НазначениеConnection (sec) (Соединение) Query (sec) (Запрос) Idle (min) (Холостой режим) Wait time (ms) (Время ожидания)Задает интервал тайм-аута соединения в секундах Задает интервал тайм-аута запроса в секундах Задает интервал тайм-аута холостого режима в минутах. Активные соединения по истечении этого интервала времени деактивируются Задает промежуток времени в миллисекундах, по истечении которого Visual FoxPro может определить, завершено ли выполнение оператора SQL

По умолчанию для именованного соединения задается имя Connect1. При закрытии окна конструктора соединений открывается диалоговое окно Save, предлагающее ввести имя соединения.

Все созданные вами именованные соединения отображаются в разделе Connections списка Database. Для изменения параметров именованного соединения выберите требуемое соединение и нажмите кнопку Modify. откроется окно конструктора соединений, в котором вы можете изменить любые параметры соединения.


5. Создание удаленного представления данных


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

-в диспетчере проектов из списка Databases выберите раздел Remote Views (Удаленные представления), затем нажмите кнопку New (Новый) для вызова конструктора представлений.

-используйте команду CREATE SQL VIEW с предложением REMOTE и/или CONNECTION.

Далее, как и при создании локального представления данных, выберите используемые в представлении данных таблицы и поля выбранных таблиц. При создании удаленных представлений данных необходимо обратить внимание на вкладку Update Criteria (Критерии обновления), в которой задаются условия обновления представлений.

В Visual FoxPro возможно также объединить данные из двух удаленных представлений в локальное. Можно также объединить данные из удаленного и локального представлений или даже из удаленного представления и локальной таблицы. Эти объединения могут быть выполнены в локальных представлениях, если в данных существуют соответствующие отношения.

При использовании ODBC-драйвера Microsoft Excel для создания удаленного представления данных создается таблица Visual FoxPro или курсор. Эта таблица содержит выбранные данные из электронной таблицы Microsoft Excel.

Это связано с тем, что ODBC-драйвер передает текстовые данные в виде строки длиной 255 символов. Так как Visual FoxPro не может отображать в текстовом поле более 254 символов, любые текстовые данные помещаются в Memo-поле. Приемлемым решением этой проблемы является создание новых текстовых полей и копирование в них информации из Memo-полей командой, аналогичной следующей:


REPLACE ALL sqlchar WITH TRIM(sqlmemo)

Также можно изменить тип поля записи из Memo в Character, воспользовавшись кнопкой Properties вкладки Fields в Конструкторе представлений.

При обновлении данных в многоуровневом представлении изменения отражаются в том представлении, на котором основано представление верхнего уровня. Если нужно обновить базовые таблицы, многоуровнего представления, то необходимо применить команду TABLEUPDATE для каждого представления многоуровневой структуры.FoxPro автоматически выполняет команду TABLEUPDATE при закрытии представления. При этом представления верхнего уровня закрываются первыми, поэтому вам придется обновлять представления с каждого верхнего уровня на каждый последующий нижний уровень. После закрытия последнего (самого нижнего уровня) представления базовые таблицы для данных представлений будут содержать полный список всех выполненных обновлений.


6. Создание независимого внешнего представления данных


Независимые внешние представления - Offline Views - это представления, которые после получения данных могут использоваться самостоятельно, в отрыве от источника данных, и при необходимости обновлять данные в источнике на основе выполненных пользователями изменений. Например, сбор и обработка информации на удаленном компьютере вне сети. По окончании рабочего дня может быть выполнено обновление данных на сервере. При этом Visual FoxPro автоматически управляет задачей координации изменений между независимым представлением и данными в БД.

Для получения независимого представления на основе существующего, необходимо открыть соответствующую БД и использовать функцию CREATEOFFLINE(), которая возвращает .Т., если независимое представление успешно создано. Но перед этим необходимо разрешить делать попытки блокирования группы записей. Для этого следует установить значение SET MULTILOCKS в значение ON. Например, создать независимое представление на основе внешнего представления Pub_titles:

класс приложение представление данные еxcel

SET MULTILOCKS ON

CREATEOFFLINE("Pub_titles")


После выполнения этой функции в каталоге по умолчанию будут созданы три файла с именем представления и расширениями DBF,TDF, TDX. Местоположение и имена этих файлов можно изменить, если указать второй аргумент функции CREATEOFFLINE() (см. Help).

Открыть и работать с данными в независимом представлении можно, используя команду USE. В этом случае данные будут получены не с сервера, а из таблицы, созданной функцией CREATEOFFLINE(). Опция ONLINE этой команды используется для переноса изменений, выполненных в независимом представлении, на БД сервера. Следующие команды обновляют данные на сервере:

Pub_titles ONLINE

TABLEUPDATE(.T.)


Узнать, какой режим используется для работы с внешним представлением, можно с помощью функции DBGETPROP(). Так, в нашем примере, следующая команда вернет .Т.:


? DBGETPROP("Pub_titles", "VIEW", "Offline")


Для перехода в режим работы обычного представления необходимо выполнить функцию DROPOFFLINE() с указанием имени представления. Перед выполнением этой функции необходимо закрыть представление. Например:


USE

DROPOFFLINE("Pub_titles")


После выполнения функции таблица на локальном компьютере будет стерта, и данные в дальнейшем будут извлекаться с сервера


7. Вопросы для защиты лабораторной работы


1)Какие преимущества имеет архитектура "клиент-сервер" в использовании технологии обработки данных средствами СУБД?

)Что такое технология Open Database Connectivity (ODBC)? Какие основные компоненты входят в ее состав?

3)Какие необходимые условия требуется соблюдать для создания удаленного представления (Remote Views)?

4)Какие установки требуется выполнить для передачи данных из внешнего представления в исходную таблицу .XLS?

5)Что такое независимые представления? Каков механизм работы с ними?


8. Коллекции объектов. Управление объектами Excel


Практическое использование теоретических знаний по работе с коллекцией объектов при проектировании пользовательского приложения.

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

Объекты коллекции позволяют значительно проще выполнять многие распространенные действия с прикладной программой. Например, для выполнения действий с каждым объектом в коллекции можно использовать операторы цикла:


*Организуем ссылку на запущенное приложение

oExlApp = GETOBJECT(,"Excel.Application")= 1

*Определяем сколько открытых книг

nCount = oExlApp.Application.WorkBooks.Count

FOR nWrk = 1 TO nCount * Выведем наименование каждой рабочей книги ? oExlApp.Application.WorkBooks.Item(nWrk).FullName

NEXT

* Закроем приложение oExlApp.Application.Quit


Для запуска примера необходимо загрузить Excel и открыть рабочие книги. Для ссылки на первую рабочую книгу в коллекции можно использовать: oExlApp.Application.WorkBooks.Item(1)

Закрыть первую книгу в коллекции oExlApp.Application.WorkBooks.Item(1).Close

В свою очередь каждая рабочая книга содержит коллекцию рабочих листов, каждый рабочий лист - коллекцию ячеек и т.д. Сослаться на ячейку A1 можно следующим образом: oExlApp.Application.WorkBooks.Item(1). Worksheets.Item(1).Cells.Item(1,1)

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

При использовании OLE Automation важным понятием является понятие объектов верхнего уровня. В каждом приложении объекты верхнего уровня позволяют ссылаться на них из другой программы.

Ссылка на вновь создаваемый объект OLE Automation в программе Visual FoxPro 5.0 выполняется с помощью функции CREATEOBJECT(). Если OLE-объект уже существует, получить на него ссылку можно с помощью функции GETOBJECT(). Например:


oSht = GETOBJECT("D:\VFPro\продажи.XLS","EXCEL.SHEET")


При использовании OLE Automation установка SET OLEOBJECT, которая определяет, будет ли Visual FoxPro проводить поиск в регистре Windows, должна быть включена.

Любая из двух приведенных ниже строк выполнит запуск копии Excel в скрытом виде:


oApp = CREATEOBJECT("EXCEL.APPLICATION")= GETOBJECT(" ","EXCEL.APPLICATION")


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


oApp = GETOBJECT(,"EXCEL.APPLICATION")


< Пример 1: Создание нового рабочего листа в запускаемой невидимой копии Excel и заполнение его цифрами. Созданная таблица сохраняется в файле TEMP.XLS в каталоге, установленном по умолчанию для Excel.

объект Sheet:

= CREATEOBJECT("EXCEL.SHEET")nVal = 1 TO 10.Worksheets.Item(1).Cells.Item(nVal, nVal).Value = nVal * nVal

ENDFOR

Для просмотра результата и сохранения файла:

oExlSheet.Application.Visible = .T..SaveAs("TEMP.XLS")


< Пример 2: Создание ссылки на первый рабочий лист в файле продажи.XLS. Файл в данном случае должен располагаться в каталоге, указанном по умолчанию для приложения, использующего OLE Automation, иначе необходимо указать путь к нему. В этот файл, содержащий результаты расчетов, заносим новые данные и сохраняем их, а затем выводим результат вычислений на экран.


oExlSheet = GETOBJECT("продажи.XLS", "EXCEL.SHEET").Worksheets.Item(1).Range("G2").Value = 16.Worksheets.Item(1).Range("G3").Value = 10.Parent.Save

? oExlSheet.Worksheets.Item(1).Range("G4").Value


< Пример 3: Создание нового рабочего листа с диаграммой. Сначала идет заполнение необходимыми данными второго рабочего листа, на котором размещаются данные. Затем, с помощью метода ChartWizard, обновляем диаграмму на первом рабочем листе. В ChartWizard из большого числа параметров указываем только область данных и условие построения диаграммы по колонкам. Остальные параметры принимают значение по умолчанию. После этого выводим Excel на экран и используем команду WAIT для того, чтобы рабочая книга не была выгружена после завершения работы программы.


*объект Chart= CREATEOBJECT("EXCEL.CHART")

*Стираем данные по умолчанию на раб. листе со значениями

oExlChart.Parent.Sheets(2).Range("A1:D10").Clear nVal = 1 TO 10 *Заполняем таблицу новыми значениям

oExlChart.Parent.Sheets(2).Cells(nVal,1).Value = nVal.Parent.Sheets(2).Cells(nVal,2).Value = nVal* nVal

NEXT

* Строим график по новым значениям по колонкам

oExlChart.ChartWizard(oExlChart.Parent.Sheets(2).Range("A1:B10"),,,2)

*Просмотр результата.Application.Visible = .T.

WAIT


< Пример 4: Рассмотрим подробнее параметры метода ChartWizard.

lExpression.ChartWizard(Source, Gallery, Format, PlotBy, CategoryLabels, SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle).ource - источник данных диаграммы

Gallery - тип диаграммы. Может принимать следующие значения:

- Диаграмма с областями

- Линейная диаграмма

- Гистограмма

- График

- Круговая диаграмма

- Лепестковая диаграмма

- Точечная диаграмма

- Нестандартная, график\гистограмма

- Объемный вариант диаграммы с областями

- Объемный вариант линейной диаграммы

- Объемный вариант гистограммы

- Объемный вариант графика

- Объемный вариант круговой диаграммы

- Объемный вариант поверхности

- Кольцевая диаграмма

Format - Разновидность диаграммы, выбранной в параметре Gallery.

PlotBy - Определяет ряды в строках или столбцах. Значение 1 - строки, 2 - столбцы.

SeriesLabels - Имена рядов данных. Задается номер столбца или строки, содержащей названия рядов, отображаемые в легенде.

HasLegend - Определяет включать или нет легенду в диаграмму.

Title - Название диаграммы

CategoryTitle - заголовок оси Х

ValueTitle - заголовок оси Y.

Часто на практике необходимо использовать не просто числовые значения, а данные таблиц. Рассмотрим пример создания рабочего листа с диаграммой, где исходные данные для диаграммы берутся из таблиц Money и Kyrs. Рассмотрим динамику изменения курса одной валюты, для выбора валюты используем элемент управления ComboBox, источником данных для которого является код валюты. Наименование валюты хранится в элементе TextBox - txtName_val.

Public data_n,data_f,n

*Записываем в переменные начальную и конечную дату для выборки,

*которые хранятся в элементах TextBox - text1 и text2.

data_n = ThisForm.text1.Value_f = ThisForm.text2.Value

*Используя команды SELECT проводим выборку значений из таблиц

*и записываем их в курсор kurs

Select k.kod_val, v.name_val, k.kyrs_pok, k.kyrs_prod, k.data_kurs;kurs K, money V; Where K.kod_val=V.kod_val; And K.kod_val=val(Alltrim(ThisForm.Combo1.DisplayValue)); And (Between(K.data_kurs,data_n,data_f)); Group By K.data_kurs; Into cursor kurs

*Для удобства использования данных при построении диаграммы

*необходимые значения можно записать из курсора в массив

select k.kyrs_pok, k.kyrs_prod, k.data_kurs, k.name_val; kursy k;array kursy

*Переменная для подсчета количества строк в массиве

n = Alen(kursy,1)= CreateObject("Excel.Application")

*Добавляем книгу.WorkBooks.Add.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(1,1).Value='Покупка'.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(1,2).Value='Продажа'.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(1,3).Value='Дата'

*Заполняем ячейки первого листа книги значениями из массива *kursy

For i=1 to n.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(i+1,1).Value=kursy(i,1).WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(i+1,2).Value=kursy(i,2).WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(i+1,3).Value=kursy(i,3)

*Добавляем диаграмму .Charts.Add

*Выделение данных, создание диаграммы

Fula='A1:B'+Transform(n)

oExlApp.ActiveChart.ChartWizard(oExlApp.WorkBooks.Item(1).WorkSheets.Item(1).Range(Fula),4,2,2,,1,1,ThisForm.txtName_val.Value+' - График изменения курса по дням','Дата','Курсы в тенге')

*Используя язык макросов Excel, можно создать подписи к оси X

oExlApp.ActiveChart.SeriesCollection(1).XValues = '=Лист1!R1C3:R'+Transform(n)+'C3'

*Сохраняем и закрываем книгу..WorkBooks(1).SaveAs('C:\Temp.xls').WorkBooks(1).CloseoExlAppForm "C:\a\graph.scx"

Чтобы просматривать диаграмму с помощью формы, необходимо сделать следующее. Создаем таблицу Tgraph с полем типа General. Создаем форму Graph.scx, с размещенным на ней элементом OLEBOUNDCONTROL, источником данных для которого является поле таблицы Tgraph.

В событие Init формы записываем:

CLOSE TABLE ALLTgraph1ALL IN 1 NOOPTIMIZEBLANK && Добавляем запись

*Вставляем в поле General объект Excel

Append General gen FROM ('C:\Temp.xls') Class ExcelChart.oleboundcontrol1.refresh().oleboundcontrol1.visible=.t.

< Пример 5: Для расчитывания сложных математических задач посредством Excel, можно использовать функции Excel.

*Рассчитываем произведение матриц

*Диапазон ячеек, куда будет сохраняться результат произведения

Fla = 'A'+Transform(m)+':E'+Transform(m+4)

*формула расчитывающая произведение двух матриц= '=MMULT(A'+Transform(m+2-7)+':E'+Transform(m+2+4-7)+',A'+Transform(m-n+1-7)+':E'+Transform(m-7)+')'.Application.WorkBooks.Item(1).WorkSheets.Item(1).(Fla).FormulaArray = Formula

*Рассчитываем обратную матрицу

Fla = 'A'+Transform(m4+1)+':E'+Transform(m4+1+4)= '=MINVERSE

(A'+Transform(m3+1)+':E'+Transform(m3+1+4)+')'.Application.WorkBooks.Item(1).WorkSheets.Item(1).Range(Fla).FormulaArray = Formula

*Рассчитываем среднее значение= '=AVERAGE(A'+Transform(2)+':A'+Transform(n+1)+')'.Application.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(m6+1,1).Formula = Formula

*Рассчитываем степень числа= '=POWER(A'+Transform(m7+i)+',2)'.Application.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(m7+i,6).Formula = Formula

*Рассчитываем сумму ряда и корень из полученного числа

Formula = '=SUM(J'+Transform(m7+1)+':J'+Transform(m7+n)+')'.Application.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(m8,10).Formula = Formula= '=SQRT(F'+Transform(m8)+')'.Application.WorkBooks.Item(1).WorkSheets.Item(1).Cells.Item(m8+1,6).Formula = Formula

1)Спроектировать запрос (реализовать в виде формы), в результате работы которого выполнить следующие действия:

а) данные из .DBF таблицы передать в Excel;

в) полученные данные в Excel обработать с помощью Мастера функций;

с) построить график в Excel по данным результата вычислений;

д) создать отчет в VFP и добавить к нему построенный график из Excel.


9. Использование элементов управления ActiveX при проектировании приложения пользователя


Элементы управления ActiveX являются одним из наиболее мощных средств создания приложений. Элемент ActiveX представляет собой файл с расширением OCX, который имеет интерфейс для управления свойствами, событиями и методами элементов ActiveX как на этапе проектирования, так и во время работы приложения.

Перечень поставляемых с Visual FoxPro элементов управления ActiveX приведен в таблице 1.


Таблица 1 Элементы управления ActiveX

Имя файлаЭлемент управления ActiveXНазначениеCOMCTRL.OCXImageList ControlДля хранения коллекции объектов ListImageListView ControlДля отображения списков различных объектовProgressBar ControlДля визуального контроля длительности выполнения какого-то действияSlider ControlДля выбора дискретных значений в каком-либо диапазонеStatusbar ControlДля отображения данных о текущем состоянии приложенияTabStrip ControlДля создания многостраничных форм с вкладкамиToolBar ControlДля хранения коллекции объектов ButtonsTreeView ControlДля отображения иерархических списков специальных объектов Node, содержащих текст или изображениеCOMDLG32.OCXCommon Dialogs ControlЭлемент обеспечивает набор стандартных диалоговых окон для таких операций, как открытие, сохранение и печать файлов, выбор цвета и шрифтаDBLIST32.OCXMSDataCombo ControlРаскрывающийся список предназначен для работы с данными в Visual BasicMSDataList ControlFOXHWND.OCXVisual FoxPro HWND ControlПозволяет вывести в форме окно для показа изображения. (Не только файлы формата BMP, но и формата ICO и WMF) FOXTLIB.OCXVisual FoxPro Foxtlib ControlЭлемент выполняет функции просмотра библиотеки объектов OLE-сервера Visual FoxProGRID32.OCXGrid ControlОбъект для отображения данныхMCI32.OCXMicrosoft Multimedia ControlЭлемент управляет воспроизведением и записью файлов мультимедиа устройствамиMSACAL70.OCXCalendar ControlЭлемент может быть встроен в форму приложения для быстрого поиска даты.MSCOMM32.OCXMicrosoft Comm ControlПредставляет элементы управления для передачи данных в приложение по последовательному интерфейсу.MSMAPI32.OCXMicrosoft MAPI Message ControlПредставляют набор элементов для создания в пользовательском приложении возможности передачи почтовых сообщенийMicrosoft MAPI Session ControlRICHTX32.OCXRich TextBox ControlОбеспечивает возможность создания окна для работы с форматированным текстомSYSINFO.OCXSysInfo ControlПри работе программы является невидимым объектом и предназначен для получения информации о системных установках.

Так как большинство из элементов разрабатывались для использования в Visual Basic, не все их возможности удается реализовать в Visual FoxPro.

Для того чтобы использовать элементы ActiveX следует на вкладке Controls окна Options выбрать необходимые элементы (рис.1), и, для добавления элемента на форму, переключить панель инструментов Form Controls в режим представления элементов ActiveX.

Пример 1: Элементы управления ProgerssBar и StatusBar.

В Конструкторе форм с помощью панели инструментов Form Controls, переключенной в режим отображения элементов ActiveX, добавим в новую форму элемент управления StatusBar.С помощью окна StatusBar Control Properties, которое вызывается при выборе одноименной команды в контекстном меню объекта, установим на вкладке Panels две панели.

На первой будем отображать имя текущей таблицы (свойство Style установим в значение Text), на второй выведем текущее время.

В окне Properties установим значения следующих свойств объекта:


Align = 0 - None ; Name = "StatusBar"


Добавим в форму объект ProgressBar и аккуратно подберем его размер и расположение. Установим значение свойства Name = ProgressBar.

С помощью объекта ProgressBar будем отображать процесс перебора клиентов. Для этого добавим в DataEnvironment формы таблицу Clients. Для отображения имен клиентов используем элемент управления Text Box. Для перебора расположим на форме кнопку Next, в код события Click, которой запишем:


Select Clients If !EOF() ThisForm.ProgressBar.Value = nCounter nCounter = nCounter+1 Skip EndIf ThisForm.Refresh


Для того чтобы вывести на первой панели строки состояния имя текущей таблицы, достаточно в код события Init объекта StatusBar записать:


This.Panels(1).Text = ALIAS()


В событии Init объекта Form зададим начальные значения свойств элементов формы:


Public nCounter Select Clients ThisForm.ProgressBar.Min = 1 ThisForm.ProgressBar.Max = Reccount() ThisForm.ProgressBar.Value = ThisForm.ProgressBar.Min nCounter = 1


Пример 2. Элемент управления Calendar Control.

Рассмотрим пример использования этого элемента ActiveX для ввода и корректировки даты в форме.

Создадим простейшую форму , в которой разместим текстовое поле для ввода или редактирования даты. Значение даты будем запоминать в специально созданном свойстве формы dDate, которому присвоим начальное значение Date().

В событии Init объекта Text Box запишем:


ThisForm.dDate = This.Value


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

Для вызова календаря справа от текстового поля разместим кнопку с соответствующим изображением. Для события Click этой кнопки запишем код:


Do Form Form_calendar with ThisForm.dDate to ThisForm.dDate ThisForm.Text1.value = ThisForm.dDate


Команда DO FORM вызывает форму с календарем, в которую в качестве параметра с помощью опции WITH передается текущее значение даты в текстовом поле.

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

Для размещения календаря создадим модальную форму (свойство WindowType = 1 Modal). Добавим в форму свойство для запоминания выбранной даты - dParam. Разместим объект Calendar с помощью панели инструментов Form Controls, переключенной в режим ActiveX.

Для того чтобы передать значение выбранной даты в событие AfterUpdate календаря запишем:

dd = ctod (str(This.day)+str(This.month)+str(This.year)) Thisform.dParam = dd ThisForm.Release


В событие Unload формы запишем код, который обеспечит передачу значения даты в главную форму: return This.dParam

Для придания календарю требуемого внешнего вида используйте диалоговое окно Calendar Control Properties, которое можно вызвать при нажатии правой кнопки мыши на этом объекте. Здесь же можно установить понедельник в качестве первого дня недели с помощью раскрывающегося списка First day.


Лабораторная работа Тема: Использование элементов управления при проектировании форм приложения 1. Разрабо

Больше работ по теме:

Изучение компонента Delphy — TTreeView
Практическое задание
Microsoft Access
Практическое задание
Создание многотабличной базы данных в MS Access
Практическое задание
Эффективные коды
Практическое задание
Эффективные коды
Практическое задание

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ