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 

Dividir Celda de Un DBGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Dividir Celda de Un DBGrid Responder citando

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...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Se que es utlizando el Canvas, pero no puedo hacerlo cuado lo hago me aparece dibujado todo el cuadro..


Saludos espero respuestas,...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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]
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.