Ver Mensaje Individual
  #5  
Antiguo 16-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Tienes que usar un tipo TDateTime... por ejemplo:

Quiero resaltar el dia 20 de cada mes:
Código Delphi [-]

uses DateUtils:

var Resalta:TDateTime:
begin
Resalta := RecodeDay(ADate, 20);

if Adate = Resalta then
  color := clRed
else
  color := clBlack;

"ADate" es el parámetro de ese evento. Si te fijas lo que hago es comparar si la fecha que se va a pintar coincide con el día 20 de ese mes.

No trae ayuda, pero trae el código fuente, así que manteniendo control pulsado mientras haces click sobre la palabra "stDay" te llevará más o menos a esto:
Código Delphi [-]
  TmxStyleType = (stSelected, stToday, stDay, stWeekEnd, stIndirect );
Intuyo que:
- StSelected es la fecha seleccionada en el calendario
- StToday si se trata de la fecha actual de windows.
- StDay (de lunes a viernes)
- stWeekEnd (si es un fin de semana, según el código fuente, usa sábado y domingo.
- stIndirect.... no lo he mirado a fondo, creo que es para los días de otro mes... me explico: Si el día 1 de abril empieza en miercoles, entonces puede pintar los días 30 y 31 de Marzo en el Primer Lunes y Martes del mes abril. (hay que retocar otras propiedades para que eso funcione.

Ten en cuenta que solo puedes pintar los colores del mes que se está mostrando, no de otros meses.

Si quieres pintar un conjunto de fechas, podrías usar algo así:
Código Delphi [-]
var  Resalta:  array of Tdate;
begin
  SetLength(Resalta, 10) ; // creamos un array de 11 posiciones, empieza en cero.
  Resalta[0] : = EncodeDate(2007,3, 20);
  etc.
end;

//ahora en ese evento de pintado:
color := clText
if AStyleType = stDay then
  for i:= low(Resalta) to high(Resalta) do
    if ADate = Resalta[i] then
    begin
      color := clRed
      break;
    end;

El hecho de preguntar por if AStyleType = stDay, es porque solo quiero que entre en ese bucle en los días laborables, así impedimos que entre preguntando en fines de semana... es decir, nos estamos ahorrando 8 bucles del for en cada mes (todos los fines de semana de ese mes). Como es un evento que se aplica por cada día a pintar del mes, tenemos que hacerlo eficiente.

En fin, técnicas hay muchas, solo tienes que guardar las fechas que quieres resaltar y después comparar.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 16-03-2007 a las 13:27:06.
Responder Con Cita