Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-11-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.731
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
TExtCalendar - Calendario alternativo a TCalendar

Os pongo en antecedentes:

Necesitaba un calendario para mi próximo proyecto (un gestor de actividades). El problema es que TCalendar, el que viene por defecto con Lazarus, no permite marcar fechas de ninguna forma, y como depende del sistema operativo no hay forma de menterle mano. Me puse a buscar y encontré TCalendarLite en un hilo del foro de FreePascal/Lazarus. Me gustó, pero tampoco permite marcar varias fechas, así que me puse a mirarlo para añadirle yo esa eventualidad, pero me encontré con un desaguisado de aúpa: Tres clases, una de las cuales no hace lo que se supone que debe hacer, y un código enrevesado y más complejo de lo que, en mi opinión, debería ser. Total, que me puse a re-escribirlo. La intención primera era mejorar TCalendarLite, pero al final he creado mi propio componente, mucho más simple y creo que mejor, Acabo de terminar hace unos minutos su funcionalidad básica y he decidido compartirlo con todos.

Funciona con Lazarus/FreePascal en Fedora, pero no creo que de problemas en Windows. Lo que me pregunto es si funcionaría en Delphi (a ver si puedo probarlo en mi viejo Delphi6 esta tarde). Permite cambiar muchas cosas del aspecto gráfico, también diferencia entre la fecha actual (o definida por el programador) y la fecha seleccionada por el usuario, y tiene casi todos los eventos de TCalendar y alguno más; todo ello en un código fuente elegante y magníficamente comentado. El "pero" es que le falta alguna cosilla todavía.

En fin, aquí tenéis el invento, según se ve con el programa de demostración (para Lazarus) adjunto:


Estoy pensando en modificarlo ligeramente, de forma que se comporte de forma similar a como lo hace TDrawGrid, para que el programador pueda dibujar cada casilla como le plazca. ¿Quizá extendiéndola a una TDrawExtCalendar? ¿O al revés, que TExtCalendar descienda de TDrawExtCalendar?

También estoy pensando en cómo podría extender una clase TDBExtCalendar que pudiera obtener información de una base de datos para marcar diferentes fechas. Esto último no sé muy bien cómo hacerlo, todavía. Me refiero, más que nada, a cómo indicar los campos a tener en cuenta (¿por defecto? ¿Propiedades? ...).
Archivos Adjuntos
Tipo de Archivo: zip extcalendar-141119-src-pas.zip (135,3 KB, 51 visitas)
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #2  
Antiguo 19-11-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.646
Poder: 27
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias Ñuño por compartirlo. He intentado probarlo en Delphi XE2, pero, hay algunos problemillas. Iba a copiar la lista aquí debajo, pero, Delphi me echa una mano como se ve en la siguiente imagen:



No creo que te sirva de mucho, pero, en fin, algo es algo.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 19-11-2014
[egostar] egostar is offline
Registrado
 
Registrado: Feb 2006
Posts: 6.423
Poder: 19
egostar Va por buen camino
Gracias Ñuño

Me parece muy interesante probar tu componente en delphi, también lo probaré en mi XE2 y en XE7.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 19-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.604
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #5  
Antiguo 19-11-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.731
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Caramba. Veo que entre la VCL y la LCL hay muchas más diferencias de lo que pensaba. ¡Incluso en la RTL! Se me hace extrañísimo que las funciones LeftStr y RightStr no estén definidas en SysUtils, o que TCanvas no tenga propiedades de ancho y alto (Width, Height).

Gracias por el informe. No sé si se podrá hacer compatible con Delphi.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 19-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.124
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ñuño.

Muchas gracias por compartirlo.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 19-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.124
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo Ñuño.

Probando en Delphi 7...

En principio, hay que declarar los tipos TTextLayout y TTextStyle previo a la declaración de la clase ya que no existe:
Código Delphi [-]
type
  TTextLayout = (tlTop, tlCenter, tlBottom);
    
  TTextStyle = packed record      
    Alignment: TAlignment;
    Layout: TTextLayout;
    SingleLine: Boolean;
    Clipping: Boolean;
    ExpandTabs: Boolean;
    ShowPrefix: Boolean;
    Wordbreak: Boolean;
    Opaque: Boolean;
    SystemFont: Boolean;
    RightToLeft: Boolean;
    EndEllipsis: Boolean;
  end;
  ...
  TCustomExtCalendar = CLASS (TGraphicControl)
  ...
Luego de eso me aparece:
Cita:
[Error] extcalendar.pas(122): Method 'GetControlClassDefaultSize' not found in base class
[Error] extcalendar.pas(266): Property 'OnMouseEnter' does not exist in base class
[Error] extcalendar.pas(269): Property 'OnMouseLeave' does not exist in base class
[Fatal Error] extcalendar.pas(310): File not found: 'LazUTF8.dcu'
Estoy acostumbrado a lidiar con los enventos OnMouseEnter y OnMouseLeave en Delphi 7 y no vas a tener problemas con eso, versiones posteriores ya los incluyen. Si encuentro algo mas lo pongo aquí .

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 19-11-2014 a las 21:22:26.
Responder Con Cita
  #8  
Antiguo 20-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: Feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 15
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Ñuño,

¡Excelente!

Nelson.
Responder Con Cita
  #9  
Antiguo 21-11-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.731
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Gracias por los ánimos.

ecfisa: Gracias por la información. Aunque no sé si definir los tipos TTextLayout y TTextStyle, porque más adelante se utilizan como parámetro de un método de TCanvas (método que creo que no existe en la VCL).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #10  
Antiguo 21-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.124
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ñuño.

Si, algo de eso ví... También me tuve que crear una función function IsFontEqual(f1, f2: TFont): boolean en reemplazo del método Font.IsEqual que no existe en Delphi. Al final hice varios cambios logrando que compile en Delphi 7 y hasta muestre el componente, pero no funciona para nada...

No he tenido mucho tiempo para dedicarle, pero si logro algo que valga la pena te adjunto el archivo.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Resaltar semana en un TCalendar MAXIUM Varios 3 20-05-2013 05:14:10
Fecha por defecto TCalendar leogobo Lazarus, FreePascal, Kylix, etc. 8 07-06-2011 20:24:06
Filtrar por campo con TCalendar leogobo Conexión con bases de datos 8 02-06-2011 05:23:45
Programa para generar ayuda en chm o uso alternativo de pdf Nasca Varios 6 11-09-2007 14:00:29
Pintar columna de TCalendar Delfino OOP 3 29-01-2005 07:25:43


La franja horaria es GMT +2. Ahora son las 03:02:49.


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