
'rgb as long искомый цвет
r = rgb/65536
g = (rgb-r*65536)/256
b = (rgb-r*65536)-g*256
alibek писал(а):GAGArin, красивее и быстрее использовать маску, cGreen = (cColor And &h00ff00&) / 256&
alibek писал(а):Color = (Not (Color)) And &h00FFFFFF& - инвертирование
Red = (Color And &h0000FF&)
Green = (Color And &h00FF00&) / 256&
Blue = (Color And &hFF0000&) / 65536&
Ruslan Demidow писал(а):alibek писал(а):GAGArin, красивее и быстрее использовать маску, cGreen = (cColor And &h00ff00&) / 256&
Alibek, а покажи, плиз, свой код для ражложения на цвета с использованием маски.
Спасибо.
Ruslan Demidow писал(а):Я всё это к чему спрашиваю?
Мне хочется в richtextbox'е сделать инверсию выбранного участка текста. Если есть более лёгкий способ сделать цвет инверсным в контроле (без преобразования в RGB и обратно), то буду рад узнать об этом.
tyomitch писал(а):Кстати, самый простой способ инвертировать цвет Color - это Color Xor vbWhite. Безо всяких масок и т.п.
Ruslan Demidow писал(а):tyomitch писал(а):Кстати, самый простой способ инвертировать цвет Color - это Color Xor vbWhite. Безо всяких масок и т.п.
А если пользователь у меня может менять в установках по умолчанию не только цвет шрифта текста, но и фон для richtextedit'а?
Т.е. например если фон белый, цвет шрифта чёрный - то пойдёт.
'Создай проект без форм с одним модулем. И встав в него этот код.
Option Explicit
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Public Type RGBColors
rgbRed As Byte
rgbGreen As Byte
rgbBlue As Byte
rgbReserved As Byte
End Type
Public Sub Main()
Dim lngColor As OLE_COLOR
Dim udtRGB As RGBColors
lngColor = VBA.RGB(188, 81, 204)
CopyMemory udtRGB, lngColor, 8
'В Immediate будет это: "188 | 81 | 204"
Debug.Print udtRGB.rgbRed; "|"; udtRGB.rgbGreen; "|"; udtRGB.rgbBlue
End Sub
TEH3OP писал(а):Ruslan Demidow писал(а):tyomitch писал(а):Кстати, самый простой способ инвертировать цвет Color - это Color Xor vbWhite. Безо всяких масок и т.п.
А если пользователь у меня может менять в установках по умолчанию не только цвет шрифта текста, но и фон для richtextedit'а?
Т.е. например если фон белый, цвет шрифта чёрный - то пойдёт.
Дык, тады вместе с цветом текста, и цвет фона инвертируй.
TEH3OP писал(а):А вот разложить цвет на составляющие, можно и так (кстати это наиболее быстрый способ):
- Код: Выделить всё
'Создай проект без форм с одним модулем. И встав в него этот код.
Option Explicit
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Public Type RGBColors
rgbRed As Byte
rgbGreen As Byte
rgbBlue As Byte
rgbReserved As Byte
End Type
Public Sub Main()
Dim lngColor As OLE_COLOR
Dim udtRGB As RGBColors
lngColor = VBA.RGB(188, 81, 204)
CopyMemory udtRGB, lngColor, 8
'В Immediate будет это: "188 | 81 | 204"
Debug.Print udtRGB.rgbRed; "|"; udtRGB.rgbGreen; "|"; udtRGB.rgbBlue
End Sub
Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 13