Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   colorear un día en un calendario (https://www.clubdelphi.com/foros/showthread.php?t=87428)

jeremiselxi 04-01-2015 18:24:30

colorear un día en un calendario
 
Buenas tardes.

Este tema se ha tratado muchas veces en este foro pero a la final solo necesito saber cual calendario me recomiendan para usarlo en.Delphi 7 con la finalidad de que se pueda colorear el día que yo elija.

En este sentido doy gracias de antemano por su acostumbrada colaboración.

Saludos

Casimiro Notevi 04-01-2015 20:00:56

Mira los enlaces de abajo de esta página

jeremiselxi 06-01-2015 05:15:30

Buenas noches.

Luego de probar y probar con varios componente, el que mas me gustó fue el MXcalendar se los recomiendo buscar en http://www.torry.net/.

Luego de instalarlo pude realizar distintas cosas y dado que ustedes siempre me ayudan cuando los necesito, adjunto todo lo que pude realizar con este componente.

Cabe destacar que todo el código que pondré se coloca en el evento OnGetItemStyles.

Sin mas, dejo estos códigos que espero les sirvan a todos.

Nota: El diseño que utilicé traté de que se parezca lo más que pude al calendario de los Sony Xperia E3

Saludos.

Código Delphi [-]


{$R *.dfm}

procedure TForm1.mxCalendar1GetItemStyle(Sender: TmxCustomCalendar;
  AStyleType: TmxStyleType; ADate: TDate; var AFont: TFont;  var AColor: TColor);


  var MiFecha :Tdate;
  var sql, sFecha : string;

begin


// colorear un día en concreto según la fecha que yo quiera:
MiFecha := encodeDate(2015, 01, 25);

  if ADate = MiFecha then
  begin
    AFont.Style := AFont.Style + [fsBold]; // poner en negrita la letra de ese día
    Acolor := clRed; // color de fondo a esa fecha en rojo.
  end;


  // colorear todos los fines de semanas:
  if AStyleType = stWeekend then
  begin
   AColor  := clBtnFace;    // Coloreando el fondo con el color clBtnFace a los fines de semanas.
   AFont.Style := AFont.Style + [fsBold]; // poner en negrita la letra de esos días.
   AFont.Color:= clRed;    // Coloreamos de Rojo el texto de los dias de los fines de semana.
  end;

  //colorear la fecha que hace click

    if AStyleType = stSelected then
    begin
      AColor := $004080FF; // Color mamei
      AFont.Size := 20; //Agrandamos el Tamaño de la letra del dia seleccionado.
    end;


 //Cambiamos el color de los dias del mes actual
  if AStyleType = stDay then
  begin
      AColor := clBtnFace;
  end;


  mxCalendar1.IndirectColor := clBtnFace; // Para cambiar los dias que no se muestran que no pertenecen al mes actual.
  mxCalendar1.IndirectFont.Color:= clSilver; // Cambiamos el texto de los dias de los meses que se muestran que no pertenecen al mes actual


 //Cambiamos los Nombres de los meses dado que aparecen en minuscula
 mxCalendar1.Messages.January:= 'Enero';
 mxCalendar1.Messages.February:= 'Febrero';
 mxCalendar1.Messages.March:='Marzo';
 mxCalendar1.Messages.April:='Abril';
 mxCalendar1.Messages.May:= 'Mayo';
 mxCalendar1.Messages.June:='Junio';
 mxCalendar1.Messages.July:='Julio';
 mxCalendar1.Messages.August:='Agosto';
 mxCalendar1.Messages.September:='Septiembre';
 mxCalendar1.Messages.October:='Octubre';
 mxCalendar1.Messages.November:='Noviembre';
 mxCalendar1.Messages.December:='Diciembre';

 //Para cambiar los nombres de los dias de la semana

 mxCalendar1.Messages.Monday  := 'Lun';
 mxCalendar1.Messages.Tuesday := 'Mar';
 mxCalendar1.Messages.Wednesday := 'Mie';
 mxCalendar1.Messages.Thursday := 'Jue';
 mxCalendar1.Messages.Friday := 'Vie';
 mxCalendar1.Messages.Saturday := 'Sab';
 mxCalendar1.Messages.Sunday := 'Dom';




{Si tenemos en una tabla un campo de tipo Date en la cual guardamos los días festivos,
 El codigo siguiente muestra como colorear el fondo de color rojo esos dias guardados en nuestra tabla.
}
sFecha := datetimetostr(ADate);
sFecha:= formatdatetime('yyyy-mm-dd',strtodate(sFecha));

sql := 'select * from diasfestivos where Fecha = "' + sFecha + '"';

Diasferiado.sql.clear;
Diasferiado.sql.add(sql);
Diasferiado.open;
Diasferiado.First;
if not Diasferiado.Eof then
begin
AColor:=clred;
end;




end;

end.

José Luis Garcí 06-01-2015 09:39:08

mira este hilo quizás es lo que estas buscando con los componentes estándar de Delphi

jeremiselxi 06-01-2015 23:06:33

Muchas gracias José Luis Garcí.

Verifiqué el hilo anterior pero no se colorea el día.
Con el código siguiente puedo colorear los días que yo quiero los cuales están guardados en una tabla
Código Delphi [-]
{Si tenemos en una tabla un campo de tipo Date en la cual guardamos los días festivos,
 El codigo siguiente muestra como colorear el fondo de color rojo esos dias guardados en nuestra tabla.
}
sFecha := datetimetostr(ADate);
sFecha:= formatdatetime('yyyy-mm-dd',strtodate(sFecha));

sql := 'select * from diasfestivos where Fecha = "' + sFecha + '"';

Diasferiado.sql.clear;
Diasferiado.sql.add(sql);
Diasferiado.open;
Diasferiado.First;
if not Diasferiado.Eof then
begin
AColor:=clred;
end;

Me gustaría hacerlo con el mountcalendar pero no he podido hacerlo :(.

Si alguien sabe estoy a la espera de sus comentarios.

Saludos

ecfisa 07-01-2015 01:32:00

Hola jeremiselxi
Cita:

Empezado por jeremiselxi (Mensaje 487355)
...
Me gustaría hacerlo con el mountcalendar pero no he podido hacerlo :(.
...

La clase MonthCalendar no implementa la personalización de los días del mes. Es mas, ni siquiera el método Paint... De modo que lo que buscas hacer, si bién no es inviable, es al menos una taréa demasiada pesada de encarar.

Mi consejo es que te busques un componente alternativo. Algunos enlaces que encontré buscando superficialmente:

Saludos :)

jeremiselxi 07-01-2015 05:05:04

Cita:

Empezado por ecfisa (Mensaje 487358)
Hola jeremiselxi

La clase MonthCalendar no implementa la personalización de los días del mes. Es mas, ni siquiera el método Paint... De modo que lo que buscas hacer, si bién no es inviable, es al menos una taréa demasiada pesada de encarar.

Mi consejo es que te busques un componente alternativo. Algunos enlaces que encontré buscando superficialmente:

Saludos :)

Muchas gracias por la información ecfisa :-).


La franja horaria es GMT +2. Ahora son las 12:03:31.

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