Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemilla con calendar (https://www.clubdelphi.com/foros/showthread.php?t=12109)

weke 06-07-2004 09:19:13

problemilla con calendar
 
Buenas!
La cuestión es que me gustaría que en el calendar se marcaran una serie de días, todavía no se como marcarlos, si poniendolos en negrita, otro color, pero eso es lo de menos. Por ejemplo, con el código que he encontrado en otro hilo,
Código Delphi [-]
MonthCalendar1.BoldDays([7, 21, 25], MonthBoldInfo);
se marcan los días indicados en negrita.
Los días que quiero marcar los tengo que sacar de una tabla, supongo que con un query. Utilizo ADO y Acces. En una tabla tengo el campo 'cumpleaños' con el siguiente formato (por ejemplo: 10 de diciembre). No consigo sacar solo los días para que en el mes que toque los marque en el calendar.

Espero que me puedan echar una manita.
Muchas gracias y un saludo a todos.

andres1569 06-07-2004 13:41:01

Hola:

Por lo que parece, el problema no lo tienes con el Calendar sino con la consulta que lanzas para obtener las fechas. ¿No bastaría con un
Código SQL [-]
SELECT extract (month from FECHACUMPLE) as mes,
           extract (day from FECHACUMPLE) as dia             
FROM CLIENTS
ORDER BY mes, dia
?

Luego recorres la consulta, y para cada mes (están agrupados) creas una matriz de números con los días encontrados, que es la que le pasas al TCalendar correspondiente:

Código Delphi [-]
procedure AsignaCumpleañosCalendario;
var
  Dias : array of Integer;
  m : Integer;

  function AsignaDiasMes;
  var
     MiCalendar : TMonthCalendar;
  begin
     Case m of
        1 : MiCalendar := MonthCalendar1;
        2 : MiCalendar := MonthCalendar2;
        ...   
       12 : MiCalendar := MonthCalendar12;
        else EXIT
        end; 
     if Length(Dias) > 0 then MiCalendar(BoldDays(Dias, MonthBoldInfo)); 
  end;

begin
  m := -1;
  Query1.First;
  while NOT Query1.EOF do
  begin
     with Query1.FieldByName('Mes') do
        if AsInteger <> m then
        begin
           AsignaDiasMes;  
           m := AsInteger;
           SetLength(Dias, 0);
        end;
     SetLength(Dias, Length(Dias) + 1);     
     Dias[High(Dias)] := Query1.FieldByName('Dia').AsInteger;
     Query1.Next;
  end;
  AsignaDiasMes;
end;
ufff ! Menudo código, me he tirado un ratito haciéndolo, espero que te sirva, me queda la duda de si almacenas la fecha como DATE y no como dices literalmente "10 de Diciembre", eso sería más problemático, pero sería culpa tuya, :D

weke 06-07-2004 14:12:27

La fecha la guardo literalmente, es decir, un string.
En cuanto pueda pruebo tu código y te cuento si he tenido que hacer algún cambio para modificar ese "problemilla" que me pueda dar el utilizar un string directamente en lugar de un Date.
Gracias por ese pedazo de código y un saludo.:D

andres1569 06-07-2004 16:23:40

Cita:

Empezado por weke
La fecha la guardo literalmente, es decir, un string

Eso sí es un problema, mayor aún si en el mismo campo string almacenas día y mes. Si estuvieran en campos separados te serviría el código que te puse, pues a fin de cuentas no importaría que los meses estuvieran ordenados de Enero a Diciembre sino solamente agrupados. Sólo tendrías que guardar el mes en la misma variable m pero se tipo string, el resto serviría, con algún retoque ...

Cita:

Empezado por weke
En cuanto pueda pruebo tu código y te cuento si he tenido que hacer algún cambio para modificar ese "problemilla" que me pueda dar el utilizar un string directamente en lugar de un Date.

Ten en cuenta que es un error conceptual utilizar un string para guardar la fecha, quizás te suponga un trastorno cambiarlo pero seguro que a la larga ese tiempo estará bien empleado (supongo, vamos).

Saludos


La franja horaria es GMT +2. Ahora son las 04:56:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi