Программирование на Visual Basic

Цвета в RGB и Long форматах

   Windows, как графическая ОС работает с цветами, какс RGB-сочетаниями (Красный, Зелёный, Синий). При этом они обычно представлены в виде переменной типа Long. Для человека такой код цвета не всегда понятен (или всегда непонятен, кому как нравится). Поэтому в Visual Basic существует функция RGB(Red As Byte, Green As Byte, Blue As Byte), которая превращает сочетание Красного зелёного и синего цветов в одну Long-переменную. Увы обратной функции создатели VB не предусмотрели.
   Чтобы исправить это, мы создадим специальный класс,кодирующий RGB в Long и обратно. (Почему класс? С ним будет проще работать, чем с функцией, никаких временных переменных к примеру).
Для начала, как обычно, объявим переменные.

Option ExplicitPrivate mbRed As Byte   "Переменные дляPrivate mbGreen As Byte "хранения  Private mbBlue As Byte  "RGB параметровPrivate mlColor As Long "Цвет в Long представлении

Теперь дело за малым, объявим свойства класса, отвечающие за перекодировку цвета.

"Сначала присвоение, хотя обычно Property Let/ Get"идут в пареPublic Property Let Red(bRed As Byte) mbRed = bRedEnd PropertyPublic Property Let Green(bGreen As Byte) mbGreen = bGreenEnd PropertyPublic Property Let Blue(bBlue As Byte) mbBlue = bBlueEnd PropertyPublic Property Let Color(lColor As Long) mlColor = lColor "Вот здесь  и прохолит всё преобразование "Выделяем красный  mbRed = mlColor And &HFF  "Выделяем зелёный mbGreen = (mlColor / &H100) And &HFF  "Выделяем синий mbBlue = (mlColor / &H10000) And &HFF End Property"Теперь кодируем чтение свойствPublic Property Get Red As Byte Red = mbRedEnd PropertyPublic Property Get Green As Byte Green = mbGreenEnd PropertyPublic Property Get Blue As Byte Blue = mbBlueEnd PropertyPublic Property Get Color As Byte "Собираем Red, Green, Blue в одно значение mlColor = RGB(mbREd, mbGreen, mbBlue) Color = mlColorEnd Property

   Объяснять, я думаю ничего не надо. Разве, что:команды для перекодировки цвета я разместил так, для экономии времени.(Ведь "собрать" RGB в Long лучше один раз при чтении чем три раза при записи, наоборот соотвественно лучше один раз кодировать, при записи.)

Hosted by uCoz