Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

По страницам сайта Visaul PROGS


Статья опубликована здесь: http://bit.pirit.info/forum/viewtopic.php?t=1679 Если у Вас есть вопросы ждем их на форуме http://bit.pirit.info/forum Автор: BiT Функция RGB в Visual Basic Чтобы установить определенный цвет, в Visual Basic предусмотрена специальная функция RGB, которая имеет следующий формат: RGB(красный, зеленый, синий) Результатом вызова данной функции является числовое значение типа Long, определяющее требуемый цвет. Параметры красный, зеленый и синий задают, соответственно, значения цветовых компонентов. При этом каждый из параметров находится в диапазоне от 0 до 255, т.е. занимает 1 байт памяти. Например, приведенные ниже команды рисуют на элементе picImage точку с координатами (X, Y) и цветом Color, установленным с помощью функции RGB. Option Explicit Dim Color As Long Private Sub Form_Load() Picture1.AutoRedraw = True Color = RGB(10, 10, 20) Picture1.PSet (200, 200), Color End Sub Одним из распространенных способов применения функции RGB является рисование градиентных заливок. При этом вначале задаются начальное и конечное значение цветовых кодов, между которыми должен создаваться градиент, после чего с единичным шагом рисуются линии постепенно изменяющегося цвета – горизонтальные, вертикальные или диагональные – в зависимости от выбранного типа градиента. Также можно задавать нелинейные градиенты – например, круговые. Пример рисования градиентных заливок трех типов: горизонтальной, вертикальной и диагональной. В качестве объекта для рисования градиентных заливок используется рисунок picGradient. В группе Тип градиента выбирается один из предлагаемых типов градиентной заливки (массив optType). Выбранный тип сохраняется в строковой переменной GradType. Текстовые поля R, G, B разделов Начальный цвет и Конечный цвет предназначены для ввода цветовых компонентов начального и конечного цвета для создания градиента. По нажатию кнопки Применить (cmdApply) вызывается определенная процедура (HorizontalGradient, VerticalGradient, DigonalGradient), в зависимости от выбранного типа градиента. Во всех этих процедурах вначале определяется шаг градиента по каждому из цветовых компонентов, после чего в цикле с помощью функции GRB задается цвет и рисуется линия (цвет и координаты постепенно изменяются). Для горизонтального градиента слева направо рисуются последовательные вертикальные линии с постепенным изменением цвета начального до конечного значения. В свою очередь при вертикальном градиенте рисуются горизонтальные линии сверху вниз. Диагональный градиент в рассматриваемом примере реализован следующим образом. При очередном проходе цикла одновременно рисуются две линии, процесс рисования начинается из левого верхнего и правого нижнего углов. Можно также реализовать другое направление градиента (т.е. из правого верхнего угла) или изменить структуру, рисуя не две, а четыре линии – из каждого угла к центру или, наоборот, из центра к углам. Option Explicit Private Type Color R As Integer G As Integer B As Integer End Type Dim CStart As Color Dim CEnd As Color Dim RStep@, GStep@, BStep@ Dim picH%, picW% Dim GradType$ Private Sub Form_Load() picH = picGradient.ScaleHeight picW = picGradient.ScaleWidth GradType = optType(0).Caption End Sub Private Sub optType_Click(Index As Integer) GradType = optType(Index).Caption End Sub Private Sub cmdApply_Click() ' Выполнение градиентной заливки выбранного типа picGradient.Cls ' Присвоение начальных и конечных значений ' цветовым компонентам R, G и B CStart.R = txtRStart CStart.G = txtGStart CStart.B = txtBStart CEnd.R = txtREnd CEnd.G = txtGEnd CEnd.B = txtBEnd ' Вызов градиентной заливки Select Case GradType Case "Горизонтальная" Call HorizontalGradient Case "Вертикальная" Call VerticalGradient Case "Диагональная" Call DigonalGradient End Select End Sub ' Горизонтальный градиент Private Sub HorizontalGradient() Dim ColorRGB& Dim i% ' Определение шагов изменения ' каждого цветового компонента RStep = (CEnd.R - CStart.R) / picW GStep = (CEnd.G - CStart.G) / picW BStep = (CEnd.B - CStart.B) / picW ' Задание цвета For i = 0 To picW - 1 ColorRGB = RGB(CStart.R + RStep * i, CStart.G + GStep * i, CStart.B + BStep * i) ' Рисование очередной линии picGradient.Line (i, 0)-(i, picH), ColorRGB Next End Sub ' Вертикальный градиент Private Sub VerticalGradient() Dim ColorRGB& Dim i% RStep = (CEnd.R - CStart.R) / picW GStep = (CEnd.G - CStart.G) / picW BStep = (CEnd.B - CStart.B) / picW For i = 0 To picW - 1 ColorRGB = RGB(CStart.R + RStep * i, CStart.G + GStep * i, CStart.B + BStep * i) picGradient.Line (0, i)-(picW, i), ColorRGB Next End Sub ' Диагональный градиент Private Sub DigonalGradient() Dim ColorRGB& Dim i% RStep = (CEnd.R - CStart.R) / picW GStep = (CEnd.G - CStart.G) / picW BStep = (CEnd.B - CStart.B) / picW For i = 0 To picW - 1 ColorRGB = RGB(CStart.R + RStep * i, CStart.G + GStep * i, CStart.B + BStep * i) picGradient.Line (picW, picH - i)-(picH - i, picW), ColorRGB Next End Sub Private Sub cmdExit_Click() Unload Me End Sub

В избранное