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

Вертикальные значения

    Наконец, нам нужно применить тот же метод мышления к процедуре, которая заполняет picValues PictureBox’а направляющими линиями и числами. Хотя код, расположенный ниже, со всеми его переменными, заместившими предыдущие, жестко вписанные, значения, кажется более сложным, логика кода, фактически, такая же. Надеюсь, комментарии и названия переменных помогут вам понять, как эта версия отражает версию с кодированными переменными.

Private Function DisplayVerticalValues(ByVal PB As PictureBox, ByVal HowManyChunks As Single, _

ByVal MinValue As Single, ByVal MaxValue As Single) As Bitmap

' Шаг 1

Dim bmp As New Bitmap(PB.Width, PB.Height)

Dim gv As Graphics = Graphics.FromImage(bmp)

' Шаг 2

' Рисуем направляющие линии с полосками значений

' Получаем общую доступную высоту и делим ее на части

' Это значение представляет количество пикселей

Dim TotalPixels As Integer = PB.Height

Dim SingleChunk As Single = TotalPixels / HowManyChunks

For i As Single = SingleChunk To TotalPixels Step SingleChunk

gv.DrawLine(Pens.WhiteSmoke, 0, i, PB.Width, i)

Next i

' Шаг 3

' Рисуем Numbers как текст, точно размещая по вертикали

' Начинаем с наибольшего допустимого значения

Dim NextMarker As Integer = MaxValue

Dim ValueRange As Single = MaxValue - MinValue

' В цикле рисуем числа пропорционально уменьшая их по одному

For i As Single = 0 To TotalPixels Step SingleChunk

gv.DrawString(CStr(NextMarker), New Font("Verdana", 8, FontStyle.Regular), Brushes.Black, 1, i)

NextMarker -= (ValueRange / HowManyChunks)

Next

' Шаг 4

Return bmp

' Шаг 5

gv.Dispose()

End Function

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

Возможные улучшения

    Следующим логическим шагом было бы создание классов Chart и Library, чтобы сделать ваш код более переносимым между приложениями. Следуя этому, если вы собираетесь использовать многие из этих видов диаграмм долгое время в будущем, было бы неплохо создать свой элемент управления и добавить его в Visual Studio Toolbox. В настоящее время нас устраивает этот набор процедур создающих линейную диаграмму. Класс, библиотека и пользовательский элемент будут ждать лучших времен. Тем не менее, мы раскрыли очень многое в этой статье и разработали удобный способ создания динамических линейных диаграмм. Мы прошли долгий путь от первого примера круговой диаграммы в Части 1!

Охваченные темы

В этой статье мы раскрыли следующие темы:

  • Кисти (Brushes)

  • Метод Dispose

  • Двойная буферизация

  • Метод DrawLine

  • Метод DrawImage

  • DrawString

  • Метод FillPolygone

  • Объект Font

  • Элемент меню Format

  • Метод Graphics.FromImage

  • Перья (Pens)

  • Масштабирование

  • Метод TranslateTransform

Пример

Весь описанный код, включенный в приложенный образец решения, был создан с помощью VB.NET 2003. Скачать пример можно по ссылке.