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 

Efectos en calendario

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Efectos en calendario Responder citando

Estoy usando en un formulario un elemento TMonthCalendar en el que sólo han de poderse seleccioanr el rango de fechas diez antes y después de una fecha dada (por ejemplo: si la fecha es el 15 de septiembre de 2006, sólo podré elegir entre el 5 y el 25 de septiembre de 2006). ¿Hay alguna forma de realzar ese rango de fechas poniéndolo, por ejemplo, en negrita?
_________________
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: Responder citando

Hola Angel:

Para marcar los días en negrita tendrías que usar el evento "OnGetMonthInfo" del "TMonthCalendar". Una de las maneras que se me ocurre es que crees una variable "TDate" miembro de la clase del form donde tengas el control llamada por ejemplo "fechaCentral" en esta pongas por ejemplo el valor "15/09/2006" y luego el siguiente código en el evento "OnGetMonthInfo":
Código:
    // Añadimos #include <vector> para poder usar esta plantilla
    std::vector<unsigned> dias;
    // 10 días antes y 10 días despues de la fecha central
    for (TDate d = fechaCentral - 10; d <= fechaCentral + 10; d++)
    {
        unsigned short anyo, mes, dia;
        d.DecodeDate(&anyo, &mes, &dia);
        if (static_cast<DWORD>(mes) == Month)
            dias.push_back(dia);
    }
    if (dias.size() > 0)
    {
        MonthCalendar1->BoldDays(&dias[0], dias.size()-1,
            static_cast<unsigned>(MonthBoldInfo));
    }

Otra forma que se me ocurre sin usar la variable "fechaCentral" seria usando las propias variables miembro de "TMonthCalendar" llamadas "MinDate" y "MaxDate" así tú decides la fecha mínima y máxima y se marcarían en negrita todas entre esas fechas, con la ventaja de que ya el control se encarga de que solo sea seleccionable entre ese rango. Si prefieres este método, el código que habría que poner en el evento "OnGetMonthInfo" seria:
Código:
    // Añadimos #include <vector> para poder usar esta plantilla
    TMonthCalendar* cal = static_cast<TMonthCalendar*>(Sender);
    std::vector<unsigned> dias;
    for (TDate d = cal->MinDate; d <= cal->MaxDate; d++)
    {
        unsigned short anyo, mes, dia;
        d.DecodeDate(&anyo, &mes, &dia);
        if (static_cast<DWORD>(mes) == Month)
            dias.push_back(dia);
    }
    if (dias.size() > 0)
    {
        MonthCalendar1->BoldDays(&dias[0], dias.size()-1,
            static_cast<unsigned>(MonthBoldInfo));
    }

Si quieres ver más detalles de cómo marcar los días en el TMonthCalendar quizás te sirva también este mensaje:

https://cppbuilder.es/viewtopic.php?t=2865

Espero que te sirva. Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo. Funciona perfectamente y es exactamente eso lo que estaba buscando. Eres un monstruo. Wink
_________________
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
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.