Deem |
Отправлено: 25.06.2004, 10:16 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Хочу сделать перелив на форме от clBtnFace до clBtnShadow. Однако, эти константы имеют значение 15 и 16. Как определить реальное соответствие этим цветам составляющих RGB?
|
|
AVC |
Отправлено: 25.06.2004, 10:40 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Ноги растут отсюда
(Win2000) HKEY_CURRENT_USER\Control Panel\Colors |
|
Doga |
Отправлено: 25.06.2004, 11:28 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
CODE |
TColor Color1 = clBtnFace;
int R1;
int G1;
int B1;
R1 = GetRValue(ColorToRGB(Color1)); //Красный
G1 = GetGValue(ColorToRGB(Color1)); //Зелёный
B1 = GetBValue(ColorToRGB(Color1)); //Синий
|
|
|
Deem |
Отправлено: 29.06.2004, 10:36 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Спасибо. Все классно работает.
Кто хочет градиентную заливку для формы, нате.
(Вызывать в OnPaint )
CODE |
void __fastcall TForm1::GradientBackground()
{
double R1,R2;
double G1,G2;
double B1,B2;
TColor Color1 = clBtnFace,
Color2 = clBtnShadow;
R1 = GetRValue(ColorToRGB(Color1));
G1 = GetGValue(ColorToRGB(Color1));
B1 = GetBValue(ColorToRGB(Color1));
R2 = GetRValue(ColorToRGB(Color2));
G2 = GetGValue(ColorToRGB(Color2));
B2 = GetBValue(ColorToRGB(Color2));
float RStep,GStep,BStep;
int Y;
RStep = (R2 — R1) / (float)ClientRect.Bottom;
GStep = (G2 — G1) / (float)ClientRect.Bottom;
BStep = (B2 — B1) / (float)ClientRect.Bottom;
for (Y = 0; Y < ClientRect.Bottom; Y++)
{
Canvas->Pen->Color = RGB(R1, G1, B1);
Canvas->MoveTo(0,(int)(Y));
Canvas->LineTo(ClientRect.Right+1,(int)(Y ) );
R1 += RStep;
G1 += GStep;
B1 += BStep;
};
} |
Может, через контекст устройства быстрее работает (как мелкософт советует).
Отредактировано Deem — 29/06/2004, 12:02
|
|