Ver Mensaje Individual
  #6  
Antiguo 15-12-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.

Última edición por escafandra fecha: 15-12-2010 a las 17:39:17.
Responder Con Cita