 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 04 Feb, 2004 7:24 pm Asunto: Dividir Celda de Un DBGrid |
|
|
Como puedo dibujar cuadros o rectangulos dentro de una Celda del DBGrid,, tengo un DBRGrid, con 13 columnas, la primera representa un numero y las 12 a los meses
Numero | enero|febreo|...etc..|diciembre
bueno lo que deseo es poder dividir la celda con cuadros donde represente el numero de dias del mes correspondiente a la cabecera...
si es enero, que las celdas de abajo, tenga 31 cuadritos, asi sucesivametne..
ya busque en el foro, para realizarlo, pero no viene ningun ejemplo para ello
Saludos y espero sus respuestas... _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 05 Feb, 2004 7:00 pm Asunto: |
|
|
Se que es utlizando el Canvas, pero no puedo hacerlo cuado lo hago me aparece dibujado todo el cuadro..
Saludos espero respuestas,... _________________
 |
|
| Volver arriba |
|
 |
Marky Master

Registrado: 28 Dic 2002Mensajes: 251Ubicación: Las Rozas - Madrid (España)
|
Publicado: Jue 05 Feb, 2004 11:29 pm Asunto: |
|
|
| Supongo que tendrás que currarte todo el código en el OnDrawColumnCell mediante Canvas y sus respectivos métodos. Ya sabes LineTo, Ellipse,FillRect,etc o apis como DrawText... No se cómo más podría orientarte. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 06 Feb, 2004 1:23 am Asunto: |
|
|
Exacto, es el metodo que dices.. el problema, es el manejo del TRect, dentro del mismo evento.., no puedo dibujar dentro del la celda.. tal parece que El TRect, es para el area de dibujo pero del DBGrid, no de la celda. o algo asi.. seguire intentando.. gracias... _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 07 Feb, 2004 2:48 am Asunto: |
|
|
Bueno esta parte ya permite Pintar los Cuadritos,
| Código: |
void __fastcall TFHABITACIONES::DBGrid2DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
// Puntero al DbGrid enlazado con este evento
TDBGrid *grid = dynamic_cast<TDBGrid*>(Sender);
TRect AreaCelda=Rect; // area de la celda
grid->Canvas->Pen->Color = clBlack;
grid->Canvas->Font->Color = clBlack;
if( Column->Title->Caption.UpperCase().Trim()=="ENERO"||
Column->Title->Caption.UpperCase().Trim()=="MARZO"||
Column->Title->Caption.UpperCase().Trim()=="MAYO"||
Column->Title->Caption.UpperCase().Trim()=="JULIO"||
Column->Title->Caption.UpperCase().Trim()=="AGOSTO"||
Column->Title->Caption.UpperCase().Trim()=="OCTUBRE"||
Column->Title->Caption.UpperCase().Trim()=="DICIEMBRE"){
int Dias=31;
int AnchoCuadro = Column->Width/Dias; // Ancho del Cuadrito a dibujar.
for(int a=1;a<=Dias;a++){
grid->Canvas->Pen->Color = clYellow ;
grid->Canvas->Rectangle(AreaCelda.Left,AreaCelda.Top, AreaCelda.Left+AnchoCuadro,AreaCelda.Bottom);
grid->Canvas->TextOut(AreaCelda.Left+2,AreaCelda.Top,IntToStr(a));
AreaCelda.Left+=AnchoCuadro;
}
}
if( Column->Title->Caption.UpperCase().Trim()=="ABRIL"||
Column->Title->Caption.UpperCase().Trim()=="JUNIO"||
Column->Title->Caption.UpperCase().Trim()=="SEPTIEMBRE"||
Column->Title->Caption.UpperCase().Trim()=="NOVIEMBRE"){
int Dias=30;
int AnchoCuadro = Column->Width/Dias; // Ancho del Cuadrito a dibujar.
for(int a=1;a<=Dias;a++){
grid->Canvas->Pen->Color = clYellow ;
grid->Canvas->Rectangle(AreaCelda.Left,AreaCelda.Top, AreaCelda.Left+AnchoCuadro,AreaCelda.Bottom);
grid->Canvas->TextOut(AreaCelda.Left+2,AreaCelda.Top,IntToStr(a));
AreaCelda.Left+=AnchoCuadro;
}
}
if(Column->Title->Caption.UpperCase().Trim()== "FEBRERO"){
int Dias;
Word Y1,M1,D1;
DecodeDate(Date(),Y1,M1,D1);
if( (Y1%4==0) && (Y1 % 100 !=0) || (Y1%400==0))
Dias=29;
else
Dias=28;
int AnchoCuadro = Column->Width/Dias; // Ancho del Cuadrito a dibujar.
for(int a=1;a<=Dias;a++){
grid->Canvas->Pen->Color = clYellow ;
grid->Canvas->Rectangle(AreaCelda.Left,AreaCelda.Top, AreaCelda.Left+AnchoCuadro,AreaCelda.Bottom);
grid->Canvas->TextOut(AreaCelda.Left+2,AreaCelda.Top,IntToStr(a));
AreaCelda.Left+=AnchoCuadro;
}
}
grid->DefaultDrawColumnCell(AreaCelda, DataCol, Column, State);
}
//---------------------------------------------------------------------------
|
ahora, viene lo mas dificil..je je ponerles color a los cuadritos de acuerdo al estado de la habitacion
Ocupados. - color rojo
Bloqueados - color cafe
Disponibles - color verde
Reservados - color verde claro..
estos representa, el uso de los cuartos de un hotel por los dias del mes..
les paso el codigo.. para que si alguien, me puede ayudar, a pintar los cuadritos de los diferentes colores
[/code] _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 09 Feb, 2004 6:51 am Asunto: |
|
|
Como casi nadie me responde ahora me autorespondo yo..
el problema de la divicion esta resuelto.. ahora viene lo dificil, en la parte del contenido del campo de la columna ener.. tengo una cadena de caracteres.. espesificamente 31 letras, cada una de ellas representa. el dia. con diferenetes estados.. ahora como pinto los cuadritos de cada uno que a cabo de dibujar..
la cadena es:
"DDDDDDDDDRRRDDRDDDDDOOOBBBOOBBB"
esto es una cadena del mes de enero, ahora es cuestion de pintar de acuerdo a la letra contenida en cada una de las posiciones...
saludos... _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 10 Feb, 2004 12:26 am Asunto: |
|
|
me he vuelto a responder je je, esto es para los que tambien esta con el mismo problema
he solucionado los cuadros y los colores, basicamente, es una tabla con los siguientes campos
habitacion,year,enero,febrero, etcc.... diciembre
en cada una de ellas se establece el numero de habitacion el año y el estado por los mesesm
114, 2004, "dddddddrrrdddooo", etc...
ahora bien.. lo que se realiza es tomar la cadena de caracteres haciendolo de la siguiente manera y pintando los cuadritos...
| Código: |
void __fastcall TFHABITACIONES::DBGrid2DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
TDBGrid *grid = static_cast<TDBGrid*>(Sender);
TRect AreaCelda=Rect; // area de la celda
grid->Canvas->Font->Color = clBlack;
grid->Canvas->Font->Size = 8;
grid->Canvas->Font->Name = "Arial";
grid->Canvas->Pen->Color =clBtnFace;
if (Column->Title->Caption.UpperCase().Trim()=="ENERO"){
if(!Query2ENERO->Value.IsEmpty()){
AnsiString Estados=Query2ENERO->Value.UpperCase().Trim();
int Dias=Estados.Length() ;
float AnchoCuadro = Column->Width/Dias; // Ancho del Cuadrito a dibujar.
for(int a=1;a<=Dias;a++){
if(Estados.SubString(a,1)=="D")
grid->Canvas->Brush->Color = clLime;
if(Estados.SubString(a,1)=="R")
grid->Canvas->Brush->Color = clRed;
if(Estados.SubString(a,1)=="O")
grid->Canvas->Brush->Color = clYellow;
if(Estados.SubString(a,1)=="B")
grid->Canvas->Brush->Color = clGray;
grid->Canvas->Rectangle(AreaCelda.Left,AreaCelda.Top, AreaCelda.Left+AnchoCuadro,AreaCelda.Bottom);
grid->Canvas->TextOut(AreaCelda.Left+3,AreaCelda.Top+3,IntToStr(a));
AreaCelda.Left+=AnchoCuadro;
}
}
}
grid->DefaultDrawColumnCell(AreaCelda, DataCol, Column, State);
}
|
esto hace que en la celda a paresca dividida y con los numeros de los dias, el problema ahora es que es para cadda uno de los meses, es decir 12 veces este mismo codigo.., lo que espero es que se pueda hacer un poco mas corto,, les suena la frase "Micro Write", es lo mismo pero mas corto.. je je _________________
 |
|
| 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.
|