
- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект Graphics
- •Начинаем
- •Расположение и Размер
- •Вычислите Общее значение
- •Вычислите Доли и Нарисуйте Диаграмму
- •Рисуем диаграмму
- •Улучшите диаграмму
- •Заголовок
- •Пули (Bullets) и Информация о Компании
- •Расположите После Использования
- •Все сделано!
- •Нарисуем это!
- •Давайте начнем
- •Шаг 1: генерация данных
- •Шаг 2: Получаем элемент управления
- •Повторно используемые значения
- •Шаг 3: Установка полей, промежутки и размеры
- •Шаг 4а: Объекты Graphics и Bitmap
- •Шаг 4b: Вертикальная ось
- •Шаг 4c: Отметки и текст
- •Шаг 4d: Время для проверки
- •Шаг 5: Горизонтальная ось и панели
- •5B. Панели
- •5C. Названия стран
- •Шаг 6: Все показано!
- •Удачные диаграммы: Вторая помощь в круговых диаграммах. Часть 3
- •Разметка формы
- •Давайте начнем писать код
- •Временные переменные
- •Элементы пользовательского ввода
- •Получение данных
- •Создание диаграммы
- •Рисуем Panel
- •Финальное домоводство
- •Опция «Уппс!»
- •Настройка
- •Создаем данные
- •Элементы управления
- •Вертикальная ось
- •Точечные отметки шкалы
- •Проверяем 1, 2, 3
- •Базовая линия (ось X)
- •3D Панели
- •Последние штрихи
- •Удачные диаграммы. Часть 5 - Линейные графики
- •Данные для образца
- •Переменные
- •Внешние границы диаграммы
- •Объект Graphics
- •Вертикальная ось
- •Отметки
- •Горизонтальная ось (a.K.A. Базовая линия)
- •Рисование Линии (Линий)
- •Расчет вертикальной шкалы
- •Создаем и рисуем первый сегмент линии
- •Превращающаяся и исчезающая проблема линий
- •Первый сегмент линии
- •Остающиеся сегменты линии
- •Преобразования
- •Рисуем преобразованную линию
- •Проверяем
- •Отображаем месяцы
- •Отображаем результат
- •Соединения линий
- •Линии сетки
- •Горизонтальные линии сетки
- •Вертикальные линии сетки
- •Последнее отображение
- •Удачные диаграммы. Часть 6 - Динамическая линейная диаграмма
- •Элементы управления формы
- •Инициирующий код
- •Рисование направляющих линий диаграммы
- •Как это работает
- •Отображаем значения
- •Использование Vertical ScrollBar
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
Улучшите диаграмму
Мы уже улучшили вид диаграммы, установив 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, где мы хотим поместить начало Названия Компании. Я думаю, мы охватили варианты всех других настроек в предыдущих отрывках кода.