Есть GroupBox. На нем имеются Label ы. Свойство Transparent у них true. GroupBox по событию OnPaint формы заливается градиентной кистью вот так
bool GradientRect(HDC hDC, TRect &Rect, bool IsVertical, TColor Start, TColor End)
{
TRIVERTEX vert[2];
vert[0].x = Rect.Left;
vert[0].y = Rect.Top;
vert[0].Red = GetRValue(Start)
vert[0].Green = GetGValue(Start)
vert[0].Blue = GetBValue(Start)
vert[0].Alpha = 0;
vert[1].x = Rect.Right;
vert[1].y = Rect.Bottom;
vert[1].Red = GetRValue(End)
vert[1].Green = GetGValue(End)
vert[1].Blue = GetBValue(End)
vert[1].Alpha = 10;
GRADIENT_RECT gRect;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
DWORD Direction = (IsVertical ? GRADIENT_FILL_RECT_V : GRADIENT_FILL_RECT_H);
return GradientFill(hDC, &vert[0], 2, &gRect, 1, Direction);
}
void __fastcall TMainForm::FormPaint(TObject *Sender)
{
TRect Rect;
Rect.Left=0;
Rect.Top=0;
Rect.Right=GroupBox4->Width;
Rect.Bottom=GroupBox4->Height;
TColor ColStart = clAqua;
TColor ColEnd = clSkyBlue;
GradientRect(GetDC(GroupBox4->Handle),Rect, true, ColStart,ColEnd);
}
В начале все хорошо но потом после перерисовки формы Labelы пропадают. (Например после перетаскивания формы за пределы монитора) Так же если до этого
поменять свойство Caption у Labelов (программно естественно в процессе выполнения приложения) то их цвет (именно цвет а не цвет шрифта) то этот цвет становится равным цвету у GroupBox. Как вообще построена перерисовка? А вот кнопка к примеру не исчезает при перерисовке. Можно ли это как то исправить?