Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

10.4. Изображение окружности, дуг и секторов ‑ Circle

Метод имеет вид:<объект>.Circle [Step](x,y),<радиус>

[, [<цвет>][, [<начало>][, [<конец>][, <сжатие>]]]]

x, y ‑ координаты центра;

<радиус> ‑ размер большой полуоси;

<начало>, <конец> - высвечиваемый угол в радианах. Если начальная и конечная точки числа отрицательные, то изображается сектор, а не дуга;

<сжатие> ‑ параметр сжатия: отношение вертикального радиуса к горизонтальному радиусу. По умолчанию ‑ 1 (окружность).

Пример. Вывести круговую диаграмму бюджета (рис.10.4.1).

Рис. 10.4.1. Диаграмма

Private Sub Form_Click() ‘Процедура вывода диаграммы

Dim e(1 To 6) As Single ‘объявление массива статей дохода

pi = 3.14159 ‘число Pi, задание величин дохода по статьям дохода

e(1) = 1000: e(2) = 400: e(3) = 325: e(4) = 375: e(5) = 200: e(6) = 100

s = 0 ‘обнуление суммы дохода

For I = 1 To 6 : s = s + e(I): Next ‘ цикл подсчета суммы дохода

n = ‑0.00001 ‘начальная точка сектора

For I = 1 To 6 ‘цикл вывода секторов

F = e(I) /s ‘доля дохода по i-й статье дохода

r = F * 2 * pi ‘перевод доли дохода в радианы ‑ угол сектора

k = n ‑ r ‘вычисление конечной точки сектора

If k < ‑2*pi Then k = ‑2*pi ‘конечная точка внутри интервала 2Pi до ‑ 2Pi

Form1.FillStyle = I ‘i-й стиль штриховки сектора

If I = 1 Then ‘первый вырезанный сектор со смещенным центром

Form1.Circle (2100, 1900), 1500, , n, k ‘вывод первого сектора

Else ‘вывод остальных секторов

Form1.Circle (2000, 2000), 1500, , n, k ‘вывод сектора

End If

n = k ‘конечная точка становится начальной точкой следующего сектора

Next

End Sub

Пример. Вывести разноцветные концентрические окружности с центром посередине формы (рис.10.4.2).

Рис. 10.4.2. Окружности

Private Sub Command1_Click() ‘кнопка вывода окружностей

Dim CX, CY, Radius, Limit ' объявление переменных

ScaleMode = 3 ' единица измерения ‑ пиксель

CX = ScaleWidth / 2 ' установка X-позиции центра круга посередине формы

CY = ScaleHeight / 2 ' установка Y-позиции центра круга посередине формы

If CX > CY Then Limit = CY Else Limit = CX ‘максимальный радиус круга

For Radius = 0 To Limit 'цикл вывода окружностей радиуса Radius

Circle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255) ‘вывод

Next

End Sub

10.5. Формирование диаграмм (msChart,ChartFx)

Диаграмму можно сформировать с помощью мастера форм (п. 9.3) или объектов MSChart(компонентMicrosoftChartControl),ChartFx.

Рассмотрим порядок использования объекта MSChart.

Вначале нужно создать таблицу с числовыми значени­ями. Строки задают серии (числовые ряды), а колонки ‑ значения в сериях. Таблица может быть сформирована в оперативной памяти или находиться в базе данных в виде исходной таблицы или запроса

Специфичные свойства

Custom ‑ вызов окна настройки с более удобным интерфейсом. На страни­цеTextзадаются тексты заголовка (Title) и подножия диаграммы (Foot­note), осейX,Y,Z.

ChartType, DataSource‑ тип диаграммы и имя объекта управленияADOData(Adodc) с опи­санием таблицы базы данных (п. 9.9.1).

ColumnCount, RowCount‑ число колонок и строк в таблице. Для базы дан­ных значения этих свойств формируются автоматически.

ShowLegend=True‑ вывод легенды (наименований элементов серии).

Column, Row, Data‑ координаты и значение текущей ячейки таблицы.

При выполнении программы щелчком мышки можно выделить отдельные колонки диаграммы (“техника”).

Пример формирования диаграммы продажи продуктов, мебели и техники по кварталам с дан­ными из оперативной памяти (рис. 10.5.1). Раз­местим объект MSChart со свойством ShowLegend=True. Используя свойство Custom, зададим и другие очевидные свойства.

Рис. 10.5.1. Вид диаграммы

Private Sub Command1_Click() ‘ формирование диаграммы

Dim Column As Byte, Row As Byte ‘ объявление переменных

WithForm1.MSChart1 ' начало области умолчания объектаForm1.MSChart1

If Option1 Then .chartType=VtChChartType2dBar ‘столбиковая диаграмма

If Option2 Then .chartType=VtChChartType2dPie ‘круговая диаграмма

‘ формирование таблицы и заполнение ее случайными числами от 3 до 13

.ColumnCount= 3: .RowCount= 4 ' число колонок (3) и строк (2) в таблице

For Row = 1 To .RowCount ' цикл по строкам

For Column = 1 To .ColumnCount ‘ цикл по колонкам

.Row = Row: . Column = Column ‘ координаты текущей ячейки

.Data=Int(Rnd* 10) + 3 ‘ формирование случайного значения ячейки

Next‘конец цикла по колонкам

Next‘ конец цикла по строкам

.Column= 1: .ColumnLabel= “Продукты“ ‘ наименование колонки 1

.Column= 2: .ColumnLabel= “Мебель“ ‘ наименование колонки 2

.Column= 3: .ColumnLabel= “Техника“ ‘ наименование колонки 3

‘ формирование имен серий: квартал 1, квартал 2, квартал 3, квартал 4

For Row = 1 To .RowCount: .Row = Row: .RowLabel = “квартал “ & Row: Next End With ' конец области умолчания имени Form1.MSChart1

End Sub

Пример построения диаграммы продажи товаров (рис. 10.5.1) с дан­ны­ми из базы. Изменим предыдущий пример. Создадим базу из одной таб­ли­цы. В каждой строке таблицы данные о продаже одного товара. В пер­вом полеNtраз­мес­тим наименование товара, а в следующих четырех по­лях ‑ зна­че­ния сто­имос­ти про­­данных товаров по кварталам. Ко­лон­ки/ст­ро­ки таблицы базы будут строками (сериями)/колонками таблицы диаг­рам­мы. До­ба­вим на форму объектDataи че­рез его свойстваDataBaseName,Re­cordSourceсвяжем его с базой и та­б­ли­цей. Скроем объектMSChart1 (Visible=False) и составим процедуру:

Private Sub Command1_Click() ‘ формирование диаграммы

Dim Column As Byte, Row As Byte ‘ объявление переменных

WithForm1.MSChart1 ' начало области умолчания объектаForm1.MSChart1

If Option1 Then .chartType=VtChChartType2dBar ‘столбиковая диаграмма

If Option2 Then .chartType=VtChChartType2dPie ‘круговая диаграмма

Data1.Recordset.MoveLast‘ переход на последнюю строку таблицы

.ColumnCount=Data1.Recordset.RecordCount‘ число строк в таблице

.RowCount= 4 ‘ число серий (четыре квартала)

Data1.Recordset.MoveFirst‘ переход на первую строку таблицы

For Column = 1 To .ColumnCount ‘ цикл по колонкам (товарам)

.Column=Column‘ установка номера текущей колонки

ForRow= 1To.RowCount‘ цикл по строкам (кварталам)

.Row=Row‘ установка номера текущей строки

‘ формирование значения ячейки таблицы из поля таблицы базы

.Data=IIf(IsNull(Data1.Recordset.Fields(Row)),0, Data1.Recordset.Fields(Row))

Next‘ конец цикла по строкам (кварталам)

.ColumnLabel=Data1.Recordset.Fields(“nt“) ‘ имя колонки из поляNT

Data1.Recordset.MoveNext‘ переход к следующей строке (товару) таблицы

Next‘ конец цикла по колонкам (товарам)

‘ формирование имен серий: квартал 1, квартал 2, квартал 3, квартал 4

For Row = 1 To .RowCount: .Row = Row: .RowLabel = “квартал “ & Row: Next

EndWith' конец области умолчания имениForm1.MSChart1

End Sub

Объект ChartFX(компонентChartFX2.0OLECustomControl) имеет ряд отличий от объектаMSChart. Объект не может работать непос­ред­­ствен­но с базой данных.