FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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í:
|
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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í:
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. |
#5
|
|||
|
|||
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. |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
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. |
#8
|
|||
|
|||
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; |
|
|
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 |
|