Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Color en degrade para FixedRows de un StringGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Color en degrade para FixedRows de un StringGrid Responder citando

hola amigos, tengo una duda con respecto a si se podrá realizar lo siguiente:

si coloco un stringgrid en una forma como puedo asignar una textura o un color en degrade a la columna que sirve como encabezado (fixedRows)
algo asi como la grilla que esta en foro de consultas.

si me pueden ayudar gracias...
_________________
__CMVM
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En el evento OnDrawCell puedes pintar cualquier cosa en cada celda, ya sea un degradado, una imagen de fondo, texto, etc...



Como ejemplo, crea un proyecto nuevo vacio y añade al Form un TStringGrid (StringGrid1), pon su propiedad DefaultDrawing a false y mete el siguiente código en cada sitio:


- En el constructor:

Código:
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    // Rellenamos el grid
    for (int y=0; y<StringGrid1->RowCount; y++)
        for (int x=0; x<StringGrid1->ColCount; x++)
            StringGrid1->Cells[x][y] = Format("(%d,%d)", ARRAYOFCONST((x, y)) );
}



- Esta es la función que pintara el degradado:

Código:
void PintarDegradadoH(TCanvas *canvas, TRect& rect, TColor c1, TColor c2,
    int nTonos)
{
    c1 = static_cast<TColor>( ColorToRGB(c1) );
    c2 = static_cast<TColor>( ColorToRGB(c2) );
    int Rf = GetRValue(c1), Gf=GetGValue(c1), Bf=GetBValue(c1);
    int Rd = GetRValue(c2)-Rf, Gd=GetGValue(c2)-Gf, Bd=GetBValue(c2)-Bf;
    int R, G, B;
    float incremento = (float)nTonos / rect.Height();

    for (int i=0; i<=rect.Height(); ++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 = (TColor) RGB(R, G, B);
        canvas->MoveTo(rect.left, rect.top+i);
        canvas->LineTo(rect.right, rect.top+i);
    }
}



- Y por ultimo lo siguiente en el evento OnDrawCell:

Código:
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
        // Puntero al Grid que ha llamado al evento
    TStringGrid *grid = dynamic_cast<TStringGrid*>(Sender);

    TRect rect = Rect;
    grid->Canvas->Font = grid->Font;

        // Pinta degradado en las celdas de la primera fila
    if (ARow==0 && State.Contains(gdFixed))
    {
        rect.right++;
        rect.Bottom++;
        PintarDegradadoH(grid->Canvas, rect, clLime, clGreen, 32);
        grid->Canvas->Font->Color = clWhite;
    }
        // Pinta las celdas que estan seleccionadas
    else if (State.Contains(gdSelected))
    {
        grid->Canvas->Brush->Color = clMenuHighlight;
        grid->Canvas->FillRect(rect);
        grid->Canvas->Font->Color = clHighlightText;
    }
        // Pinta el resto de las celdas
    else
    {
        grid->Canvas->Brush->Color = ARow & 0x01 ? grid->Color : TColor(0xe0ffe0);
        grid->Canvas->FillRect(rect);
        grid->Canvas->Font->Color = grid->Font->Color;
    }

    // Dibujar texto centrado horizontal y verticalmente con fondo transparente
    grid->Canvas->Brush->Style = bsClear;
    DrawText(grid->Canvas->Handle, grid->Cells[ACol][ARow].c_str(),
        grid->Cells[ACol][ARow].Length(), &rect,
        DT_CENTER | DT_VCENTER | DT_SINGLELINE );
}


También puedes bajar el ejemplo, tanto para BCB1 como para BCB6


Ultima edición por _Leo el Dom 07 Oct, 2007 6:30 am, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Error Responder citando

Hola amigo... mira intente hacer tu ejemplo en bcb 5 y me dio error en el linker... que sera... me ayudas?
Volver arriba
Mensaje    Asunto: Responder citando

En BCB 6.0 anda perfecto.

saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Y C++ 5.0 también
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Re: Error Responder citando

Jose Urdaneta escribió:
Hola amigo... mira intente hacer tu ejemplo en bcb 5 y me dio error en el linker... que sera... me ayudas?


Antes del nombre de la funcion PintarDegradadoH tienes que poner TForm1:: (siempre que tu form sea el 1).
El encabezado de la funcion quedaria de la siguiente manera:

void TForm1::PintarDegradadoH(TCanvas *canvas, TRect& rect, TColor c1, TColor c2,int nTonos)
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

excelente..... _Leo como siempre gracias por tus aportes!
_________________
><(((((º> From °l||l° §ÂN ÅNЮ€$ i§Lã$ °l||l°
_____________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: En c++ builder 2009 manda error Responder citando

buenas noches e exportado un proyecto que funcionaba perfecto en BDS 2006 al RAD 2009 pero a laora de compilar me marca el siguiente error ([BCC32 Error] USucData.cpp(347): E2034 Cannot convert 'wchar_t *' to 'const char *')a la hora de centrar el texto y no he podido solucionarlo de antemano gracias espero me puedan a yudar
_________________
GRZ 47
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cambia la siguiente línea:

   DrawText(grid->Canvas->Handle, grid->Cells[ACol][ARow].c_str(),

por:

   DrawText(grid->Canvas->Handle, grid->Cells[ACol][ARow].t_str(),
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.