Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2010
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
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);
}
Necesito hacer lo mismo pero solo en un Panel de ese Form ...Alguien puede Indicarme como puedo adaptar el codigo para que realize el degradado solo en el panel

Gracias....
Responder Con Cita
  #2  
Antiguo 15-12-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Simplemente pasándole al método "PintarDegradadoH" el Canvas del panel.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 15-12-2010
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
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);
}
entra en la funcion al Hacer Click sobre el Panel pero no hace nada ..
Responder Con Cita
  #4  
Antiguo 15-12-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
this->canvas enfoca al canvas del form, no del panel. Prueba Panel1->canvas
Responder Con Cita
  #5  
Antiguo 15-12-2010
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
Gracias po contestar

he puesto

Código:
  PintarDegradadoH(Panel1->Canvas,(TRect &)this->GetClientRect(),clBtnFace,clBlack,95);
Tanto en el evento PaintForm1 como en el evento ClickPanel1 y me da los siguientes errores

'TCustomControl::Canvas is not accesible'
'Type mistmatch in parameter 'Canvas' (wanted 'TCanvas *', got 'TCanvas *')
Responder Con Cita
  #6  
Antiguo 15-12-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
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
  #7  
Antiguo 15-12-2010
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 15-12-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Vuelve a comprobarlo. Edite el mensaje con algún cambio mas en la función de degradado. A mi me funciona Ok.



Saludos.
Responder Con Cita
  #9  
Antiguo 15-12-2010
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Poder: 18
NEG1414 Va por buen camino
Como siempre tenias razon..funciona correctamente

la culpa era mia habia cometido un error

Muchas Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 01:55:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi