Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на BASIC / Visual Basic / Гед Мид. Удачные диаграммы GDI+ Работа с графикой [doc].doc
Скачиваний:
32
Добавлен:
02.05.2014
Размер:
870.4 Кб
Скачать

Улучшите диаграмму

    Мы уже улучшили вид диаграммы, установив SmoothingMode равным HighQuality, но я также люблю заканчивать отображение, поместив линии края вокруг каждого сегмента. Это очень легко сделать. Вставьте этот дополнительный код сразу после метода FillPie в верхнем отрывке кода:

g.DrawPie(New Pen(Color.Brown), rect, StartAngle, SweepAngle)

Вы можете изменить впечатление от линий, изменяя цвет линии согласно вашему предпочтению.

Заголовок

    Текст для ключа диаграммы создается с помощью другого метода Graphics – DrawString. Мы уже видели объекты Pen и Brush в действии в коде, написанном выше; Brush для заполнения сегментов, Pen для рисования внешних линий. Когда вы рисуете текст с помощью метода DrawString, вы можете ожидать использования объекта Pen для этого. Другой причудой графического класса является то, что вам нужен объект Brush, а не Pen, для рисования текста. Вы вспомните, что мы создали объект Brush для рисования сегментов диаграммы «на лету» в этой строке кода:

g.FillPie(New SolidBrush(gd.Clr), rect, StartAngle, SweepAngle)

    Мы могла сделать что-то подобное с кодом, рисующим текст, но его было бы труднее читать и анализировать. Поэтому мы создадим отдельную кисть для текста. По этой же причине мы создадим для текста отдельный шрифт (Font).

' Создает Brush для рисования текста

Dim TextBrsh As Brush = New SolidBrush(Color.Black)

' создает объект Font для отображения текста

Dim TextFont As New Font("Arial", 12, FontStyle.Bold)

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

g.DrawString("Chart Key", TextFont, TextBrsh, 310, 100)

Два значения в конце вышеуказанной строки кода являются координатами X иY позиции начала текста (т.е. левая верхняя позиция на форме).

Пули (Bullets) и Информация о Компании

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

Dim pxFromTop As Integer = 135

    Я поместил первую строку информации о компании на 35 пикселей ниже, чем Заголовок, на 135 пикселей ниже верхнего края формы. Теперь мы снова можем перечислить массив и использовать его информацию для создания деталей ключа диаграммы. Вы можете увидеть из комментариев, как мы достигли этого.

For Each gd As GraphData In Companies

' Рисуем пулю (bullet)

g.FillEllipse(New SolidBrush(gd.Clr), 310, pxFromTop, 15, 15)

' Рисуем линию вокруг пули (bullet).

g.DrawEllipse(New Pen(Color.Black), 310, pxFromTop, 15, 15)

' Рисуем текст – закодированный цветом

g.DrawString(gd.Description & " (" & gd.Amount & ")", TextFont,

TextBrsh, 360, pxFromTop)

' Увеличиваем промежуток от верха до следующей строки

pxFromTop += 30

Next

Единственная часть кода, которая нуждается в дополнительном объяснении – значения: 310 в первых двух строках – позиция X круглой пули (bullet) 15, 15 в первых двух строках представляют ширину и высоту эллипса. (Если они будут равны – то в результате получится круг) 360 в третьей строке это позиция X, где мы хотим поместить начало Названия Компании. Я думаю, мы охватили варианты всех других настроек в предыдущих отрывках кода.