FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Panel con color degradado
Buenas...
Buscando he encontrada este codigo (Gracias Cesar) que realiza un degradado del color (de Azul a Rojo) de un Form. Código:
void TForm1::PintarDegradadoH(TCanvas *canvas, TRect& rect, TColor c1, TColor c2, int nTonos) { c1 = static_cast<TColor>( ColorToRGB(clNavy) ); c2 = static_cast<TColor>( ColorToRGB(clRed) ); //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; canvas->Unlock(); 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); canvas->Lock(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormPaint(TObject *Sender) { PintarDegradadoH(this->Canvas,(TRect )this->GetClientRect(),clBtnFace,clBlack,95); } Gracias.... |
#2
|
||||
|
||||
Simplemente pasándole al método "PintarDegradadoH" el Canvas del panel.
|
#3
|
|||
|
|||
Gracias por contestar... He puesto en el evento Click del Panel la llamada a PintarDegradado Código:
void __fastcall TForm1::Panel1Click(TObject *Sender) { PintarDegradadoH(this->Canvas,(TRect &)this->GetClientRect(),clBtnFace,clBlack,95); } |
#4
|
|||
|
|||
this->canvas enfoca al canvas del form, no del panel. Prueba Panel1->canvas
|
#5
|
|||
|
|||
Gracias po contestar
he puesto Código:
PintarDegradadoH(Panel1->Canvas,(TRect &)this->GetClientRect(),clBtnFace,clBlack,95); 'TCustomControl::Canvas is not accesible' 'Type mistmatch in parameter 'Canvas' (wanted 'TCanvas *', got 'TCanvas *') |
#6
|
||||
|
||||
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; } Última edición por escafandra fecha: 15-12-2010 a las 17:39:17. |
#7
|
|||
|
|||
Gracias por contestar escafranda ..
de esa manera en el panel se degrada el color pero la degradacion no es completa si el el Panel no es lo suficientemente Ancho...si la degradacione es de Azul a Rojo la degradacion no llega al rojo si el ancho es menor de Aprox Whith = 350 (que es lo que yo necesitaba) Gracias |
#8
|
||||
|
||||
Vuelve a comprobarlo. Edite el mensaje con algún cambio mas en la función de degradado. A mi me funciona Ok.
Saludos. |
#9
|
|||
|
|||
Como siempre tenias razon..funciona correctamente
la culpa era mia habia cometido un error Muchas Gracias |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
problema con XPman y color del panel | marcos_0586 | Varios | 1 | 11-08-2010 15:39:42 |
Degradado color en CSS | MAXIUM | HTML, Javascript y otros | 2 | 15-09-2008 02:57:12 |
Como obtengo los RGB's de un color más degradado que el que tengo | gluglu | Gráficos | 8 | 16-05-2008 15:48:10 |
No puedo capturar el Color de un Degradado | Deiv | Gráficos | 9 | 03-11-2006 22:06:52 |
Panel color blanco | xxxFALKORxxx | Varios | 2 | 27-05-2005 18:26:37 |
|