Цвета в 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 лучше один раз при чтении чем три раза при записи, наоборот соотвественно лучше один раз кодировать, при записи.)