Программирование >>  Разработка пользовательского интерфейса 

1 ... 116 117 118 [ 119 ] 120 121 122 ... 147


RowSourceType = 5 - массив; RowSource = aType - имя массива;

BoundColumn = 2 - значение свойства Value определяется по второй колонке массива.

В коде события Init объекта cmbType для первоначального выбора первого типа графика запишем:

This.Value = 1

В коде события InteractiveChange для объекта cmbType предусмотрим выполнение пользовательского метода:

Присвоим ему имя olbGraph. В Data Environment формы добавим только что созданную таблицу и для свойства ControlSource объекта olbGraph выберем поле graph. В коде события Init обновим данные для отображаемого графика:

ThisForm.LockScreen = .T. SELECT Graphs

GO TOP cCom = Query

cCom =LEFT(cCom, LEN(cCom) - 2)

* Выполняем запрос, записанный в поле примечаний Query &cCom

ThisForm.RefreshGraph ThisForm.ChangeGraphType ThisForm.LockScreen = .F.

В коде для события Load формы опишем массив aType возможных типов графиков. В дальнейшем этот массив будет источником данных для списка типов графиков:

PUBLIC ARRAY aType[4,2] aType[1,1] = С областями aType[2,1] = Гистограмма aType[3,1] = График

aType[4,1] = Круговая

aType[1,2] = 1 aType[2,2] = 3 aType[3,2] = 4 aType[4,2] = 5

Тогда в событии Destroy формы не забудем стереть этот массив:

RELEASE aType

Для отображения названий графиков создадим раскрывающийся список с именем cmbData. Присвоим ему следующие значения свойств: RowSourceType = 2 - псевдоним; RowSource = Graphs.title

В коде события Init для объекта cmbData запишем: This.Value = Graphs.Title

В коде события InteractiveChange для объекта cmbData: LOCAL cData, cCom ThisForm.LockScreen = .T. cData = This.Value SELECT Graphs LOCATE FOR Title = cData

cCom = Query

cCom =LEFT(cCom, LEN(cCom) - 2)

&cCom

ThisForm.RefreshGraph ThisForm.ChangeGraphType

ThisForm.olbGraph.Object.ChartTitle.Caption = cData ThisForm.LockScreen = .F.

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



ThisForm.ChangeGraphType Опишем для формы пользовательский метод ChangeGraphType: LOCAL NType

nType = ThisForm.cmbType.Value IF ThisForm.opgShow.Value = 1

* Двухмерный график ThisForm.olbGraph.Type = NType

ELSE

* Трехмерный график ThisForm.olbGraph.Type = NType + 8

ENDIF

Для выбора двухмерного или трехмерного вида графика разместим в форме две кнопки выбора в группе кнопок выбора opgShow.

В коде события InteractiveChange для объекта opgShow предусмотрим выполнение пользовательского метода:

ThisForm.ChangeGraphType

Опишем для формы пользовательский метод RefreshGraph: LOCAL cGraphString, nY lim cGraphString =

* Сколько полей должно участвовать в построении графика nY lim = Graphs.Y number + 1

SELECT Datafile

* Создаем список полей, разделенных через табулятор,

* в конце строки записываем символ CHR(13) FOR iCounter = 1 TO nY lim

cGraphString = cGraphString + FIELDS(iCounter) ; + IIF(iCounter << nY lim, CHR(9), CHR(13))

ENDFOR

* Приводим к символьному типу данные

* и формируем строку для передачи в OLE-объект

SCAN

FOR iCounter = 1 TO nY lim

cGraphString = cGraphString + IIF(TYPE(Fields(iCounter))=C,;

EVALUATE(FIELDS(iCounter)); ,str(EVALUATE(FIELDS(iCounter))));

+ IIF(iCounter << nY lim, CHR(9), CHR(13))

ENDFOR ENDSCAN

SELECT Graphs

APPEND GENERAL graph DATA cGraphString

Построение графиков с помощью MS Excel 7.0

Работу с объектами Excel проиллюстрируем на примере создания формы для анализа данных в виде графиков, функционально аналогичной рассмотренной выше. При использовании Excel мы не связаны такими жесткими ограничениями на работу с данными, как в MS Graph, за счет того, что в Excel есть доступ к данным, на основании которых строится график через объект Sheet. В MS Graph данные располагаются в DataSheet, но к ним можно обеспечить только интерактивный, а не программный доступ. В то же время использование возможностей Excel требует больше ресурсов компьютера и лицензионной копии пакета на компьютере пользователя, в то время как MS Graph поставляется в составе всех пакетов разработки Microsoft. Посмотрите оба варианта форм для вывода графиков и выберите для себя более подходящий.

Для воплощения нашей идеи в Конструкторе формы создадим следующие объекты.

* oleChart - это объект OLE Container Control, с помощью которого мы встраиваем график Excel в форму. Нажимаем на панели инструментов Form Controls кнопку OLE Container Control и обводим в форме контур будущего графика. На экран выводится диалоговое окно Insert Object, в котором мы выбираем объект Excel Chart. Нажимаем кнопку OK и в обведенном контуре появляется график Excel, построенный на основании принятых по умолчанию данных, расположенных на втором рабочем листе таблицы. Одновременно, в соответствии с принципом редактирования на месте, изменяется главное меню Visual FoxPro для предоставления нам возможности отредактировать внешний вид представленного графика. Впоследствие можно вернуться к интерактивному



редактированию графика, нажав на этом объекте правую кнопку мыши и выбрав в контекстном меню команду Edit.

cmdExit - кнопка управления для выхода из формы. Свойству Caption присвоим значение OK .

cmdType - кнопка управления для изменения типа графика. При нажатии на кнопку будет происходить изменение типа графика. Свойству Caption присвоим значение Тип .

cmdSubType - кнопка управления для изменения подтипа графика. При нажатии на кнопку будет происходить изменение подтипа графика. Свойству Caption присвоим значение Подтип .

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

BoundColumn = 2 ColumnCount = 2 ColumnWidths = 150,0

FirstElement = 1 Name = cmbData

NumberOfElements = ALEN(aDataTables) RowSource = aDataTables RowSourceType = 5

Style = 2 Value = Total1

Как видно из перечисленных свойств, для формирования данных в списке мы будем использовать двумерный массив aDataTables. Первую колонку массива отведем для списка данных, доступных для графического отображения. Именно этот список будет видеть пользователь. Во второй колонке разместим названия источников данных (таблиц или курсоров). При запуске формы в списке будет выбран первый пункт, и для построения графика будет использована таблица Total1.

Остальные элементы управления не являются обязательными и служат для улучшения внешнего вида формы.

Для описания массива, используемого в комбинированном списке в событии Load объекта Form, запишем:

PUBLIC aDataTables(3,2)

aDataTables(1,1) = Результаты продаж

aDataTables(2,1) = Доход aDataTables(3,1) = Прибыль aDataTables(1,2) = Total1 aDataTables(2,2) = Total2 aDataTables(3,2) = Total3

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

Для изменения данных на графике в соответствии с изменением выбранного пункта в списке в событии InteractiveChange объекта cmbData запишем следующий код:

ThisForm.LockScreen = .T. SELECT (ThisForm.cmbData.Value) && Устанавливаем рабочую область nRow = 2

SCAN && Считываем данные

ThisForm.oleChart.Object.Parent.Sheets( Sheet1 ).;

Cells(nRow,2).;

Value = Sum1 ThisForm.oleChart.Object.Parent.Sheets( Sheet1 ).; Cells(nRow,3).;

Value = Sum2

ThisForm.oleChart.Object.Parent.Sheets( Sheet1 ).; Cells(nRow,4).; Value = Sum3



1 ... 116 117 118 [ 119 ] 120 121 122 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика