El problema es que el Canvas de un TPanel no es accesible. Pero nada te impide crear uno nuevo.
Vamos a realizar algún cambio en la función de degradado y reescribimos el evento OnPaint
Código:
void TForm1::PintarDegradadoH(TCanvas *Canvas, TRect& rect, TColor c1, TColor c2,
int nTonos)
{
c1 = static_cast<TColor>( ColorToRGB(c1) );
c2 = static_cast<TColor>( ColorToRGB(c2) );
//rojo
int Rf = GetRValue(c1);
int Rd = GetRValue(c2)-Rf;
// verde
int Gf = GetGValue(c1);
int Gd = GetGValue(c2)-Gf;
// azul
int Bf = GetBValue(c1);
int Bd = GetBValue(c2)-Bf;
// Canvas->Brush->Style =bsClear;
int R, G, B;
float incremento = (float)nTonos/ (rect.right>1?rect.right:1);
for (int i= rect.left; i < rect.right; i++)
{
R = Rf + MulDiv(incremento * i , Rd , nTonos);
G = Gf + MulDiv(incremento * i , Gd , nTonos);
B = Bf + MulDiv(incremento * i , Bd , nTonos);
// Canvas->Pen->Color = (Graphics::TColor)RGB(R, G, B);
Canvas->Pen->Color = (TColor) RGB(R, G, B);
Canvas->MoveTo(i, rect.Bottom);
Canvas->LineTo(i, rect.Top);
Canvas->FrameRect(rect);
}
// Canvas->Brush->Color = clRed;
// Canvas->DrawFocusRect(rect);
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
TControlCanvas *CV = new TControlCanvas;
CV->Control = Panel1;
Panel1->Update();
TRect R;
::GetClientRect(Panel1->Handle, &R);
PintarDegradadoH(CV, R, clBtnFace, clBlack, 95);
delete CV;
}
Saludos.