Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2008
JUANRS JUANRS is offline
Miembro
 
Registrado: ago 2007
Posts: 27
Poder: 0
JUANRS Va por buen camino
Wink Objeto TmxCalendar

Hola a tod@s:
Me he instalado un componente llamado TmxCalendar para Delphi, ya que en teoria éste componente me permitirá colorear las celdas del calendario que me interesen (no como el objeto Tcalendar, el cual es demasiado basico). El objeto TmxCalendar posee de un evento llamado: OnGetItemStyle, el cual exige estos parametros: .OnGetItemStyle(Sender:TmxCustomCalendar; AstyleType: TmxStyleType;ADate:TDate;var AFont:TFont;var AColor:TColor);
Mi pregunta es:¿Qué debo poner en el parametro AStyleType:TmxStyleType? He probado con todo, pero no tengo ni idea, no se ya que poner, y la verdad es que no encuentro ningun tipo de información. ¿Alguien lo ha usado alguna vez?¿Me pueden pasar algunos ejemplos? Muchas gracias a todos y saludos.
Mil Gracias.
Responder Con Cita
  #2  
Antiguo 27-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En realidad ese parámetro te informa a ti del estilo de la celda en cuestión, pero, no te permitirá "poner" nada, o, cuando sí, no serviría de nada, puesto que es un parámetro que no se pasa por referencia, como se hace con "AFont" y "AColor", en este caso.

Mirando en este hilo, se ve que el parámetro en cuestión se utiliza para averiguar qué estilo tiene ya la celda que se va a pintar: para que puedas escoger su color y su fuente. Es decir, como verás en el hilo que enlazo, se hace algo así:

Código Delphi [-]
// colorear todos los fines de semana:
if AStyleType = stWeekend then AColor := clgreen

//colorear la fecha que hace click
else if AStyleType = stSelected then AColor := clYellow;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 28-01-2008
JUANRS JUANRS is offline
Miembro
 
Registrado: ago 2007
Posts: 27
Poder: 0
JUANRS Va por buen camino
Muchas Gracias dec, por tu aportación, muchas gracias.
He estado realizando pruebas con la información que me has suministrado, yo lo que quiero hacer es lo siguiente: Al mostrar el calendario, recorro todos los dias del mes uno a uno, mediante un bucle while, y mi intención es colocar en otro color los días que tengan asociado algun evento, cada dia puede tener ninguno, uno o varios eventos, solo me interesa colorear los que tengan uno o mas eventos relacionados. La verdad es que no se como poner esa condición, ¿No existe ninguna función que pasando un dia y un color te coloree dicha celda del calendario? Es que no me puedo creer que sea tan complicado.
Haber si alguién puede ayudarme, gracias a todos de nuevo.
Responder Con Cita
  #4  
Antiguo 28-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No he utilizado el componente de que hablamos, pero, según Lepe dice en el hilo que enlacé más arriba se ve que el componente ejecuta cierto evento cuando va a "dibujar" un día en el calendario. De este modo, el asunto quedaría más o menos así:

Código Delphi [-]
uses DateUtils;

procedure mxcalendar1.OnGetItemStyle(Sender:TmxCustomCalendar;
  AstyleType:TmxStyleType; ADate:TDate;
   var AFont:Tfont; var AColor:TColor)

var MiFecha :Tdate;
begin
  // colorear según la fecha que yo quiera:
  MiFecha := encodeDate(2007, 03, 25);
  if ADate = MiFecha then
  begin
    AFont.Style := AFont.Style + [fsBold] // poner en negrita la letra de ese día
    Acolor := clRed; // color de esa fecha en rojo
  end;

  // colorear todos los fines de semana:
  if AStyleType = stWeekend then AColor := clgreen

  //colorear la fecha que hace click
  else if AStyleType = stSelected then AColor := clYellow;
  ....
  // mira en mxCalendar.pas para ver el StyleType
end;

El código anterior es el que copia Lepe en el hilo enlazado. Ahora bien, se entiende que el componente ejecutará ese evento cuando va a dibujar cada uno de los días del calendario. Tú podrías aprovechar el evento para averiguar si el día que se va a dibujar "tiene tareas", y, si las tiene, colorear el día como mejor te parezca.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 29-01-2008
JUANRS JUANRS is offline
Miembro
 
Registrado: ago 2007
Posts: 27
Poder: 0
JUANRS Va por buen camino
Muchas Gracias, perfecto, he conseguido colorear los dias que necesito dentro del calendario, es exactamente lo que queria. Muchas Gracias dec, pero tengo el siguiente error: es LENTISIMO, me tarda todo un mundo en mostrar el calendario, demasiado lento para el uso que le quiero dar, la verdad.
Se podria restringir el numero de llamadas a la función?? ¿¿Porqué se ejecuta tantas veces??? Si no fuera por la lentitud seria sensacional.
Haber si alguien tiene alguna idea.
De nuevo, gracias.
Responder Con Cita
  #6  
Antiguo 29-01-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Habría que ver porqué es tan lento, qué es lo que lo ralentiza. Imagino que cuando se va a dibujar un día tú "miras" a ver si ese día ha de ser o no "resaltado". Pues bien, puede que ese proceso de "mirar" sea lo que ralentize la tarea. No sé. Habría que ver el código que estás usando.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 29-01-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Efectivamente, el evento OnGetItemStyle se procesa por cada día del mes actual (el que se ve en el calendario), habrá que optimizarla al máximo.

Ahora mismo pinto en amarillo 15 días del mes, y el rendimiento es óptimo (ni siquiera noto el repintado, cambiando de mes rápidamente).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 30-01-2008
JUANRS JUANRS is offline
Miembro
 
Registrado: ago 2007
Posts: 27
Poder: 0
JUANRS Va por buen camino
Chicos, asunto resuelto. Funciona a la perfección y además ahora rápido (no sabia que éste evento se producía para cada dia del mes), estaba haciendo un while de todos los dias del mes dentro del evento, con lo que se estaba haciendo dicho bucle tantas veces como días tuviera dicho mes. Ignorante yo..
Otra vez más, gracias, sin vuestra ayuda no creo que lo hubiera conseguido. Copio a continuación el código que he colocado dentro del evento en cuestión, de alguna manera ya forma parte de todos:

var
sql,sFecha : string;
begin
sFecha := datetimetostr(ADate);
sFecha:= formatdatetime('yyyy-mm-dd',strtodate(sFecha));

sql := 'select * from tbEventos where nEmp = ' + IntToStr(gblnEmpresa) + ' and dFecha = "' + sFecha + '"';

ModuloDatos.qryEventos.sql.clear;
ModuloDatos.qryEventos.sql.add(sql);
ModuloDatos.qryEventos.open;
if not ModuloDatos.qryEventos.Eof then
begin
AColor:=clGreen;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Serializar un objeto a .XML marceloalegre Varios 0 03-01-2008 14:24:40
Clonar Objeto senda OOP 1 13-08-2007 18:24:35
Objeto Ole omy Varios 0 03-02-2006 21:40:32
Pasarle un objeto a una DLL adlfv OOP 3 19-08-2005 20:42:49
objeto ole omy Varios 6 05-11-2003 18:15:54


La franja horaria es GMT +2. Ahora son las 01:09:45.


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
Copyright 1996-2007 Club Delphi