 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Claudio Ens

Registrado: 18 Ago 2002Mensajes: 31Ubicación: Santigo, CHILE
|
Publicado: Lun 19 Ago, 2002 8:19 am Asunto: Color en degrade para FixedRows de un StringGrid |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 19 Ago, 2002 10:19 am Asunto: |
|
|
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 |
|
 |
Jose Urdaneta Invitado
|
Publicado: Jue 05 Jun, 2003 5:06 am Asunto: Error |
|
|
| Hola amigo... mira intente hacer tu ejemplo en bcb 5 y me dio error en el linker... que sera... me ayudas? |
|
| Volver arriba |
|
 |
el diego Master


Registrado: 23 Ago 2002Mensajes: 232Ubicación: Paris
|
Publicado: Lun 13 Oct, 2003 3:55 pm Asunto: |
|
|
En BCB 6.0 anda perfecto.
saludos |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
ramz4 Cdt

Registrado: 10 Jul 2007Mensajes: 1
|
Publicado: Mar 10 Jul, 2007 3:20 pm Asunto: Re: Error |
|
|
| 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 |
|
 |
likibuay Master


Registrado: 24 Abr 2006Mensajes: 190Ubicación: COLOMBIA
|
Publicado: Mar 14 Abr, 2009 8:30 am Asunto: |
|
|
excelente..... _Leo como siempre gracias por tus aportes! _________________ ><(((((º> From °l||l° §ÂN ÅNЮ€$ i§Lã$ °l||l°
_____________________ |
|
| Volver arriba |
|
 |
grz47 Ens


Registrado: 05 Ago 2005Mensajes: 40Ubicación: SINALOA, MEXICO
|
Publicado: Sab 25 Abr, 2009 7:30 am Asunto: En c++ builder 2009 manda error |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 25 Abr, 2009 7:43 am Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|