Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2010
alopete alopete is offline
Miembro
 
Registrado: sep 2007
Posts: 95
Poder: 17
alopete Va por buen camino
Crear un calendario

Buenas:
Necesito un calendario un customizable con colores y algunos eventos. He mirado un rato largo en internet y clubdelphi y lo mejor que he encontrado es el tmxcalendar, pero tiene el inconveniente de que no puedo colorear un dia en concreto al hacer click (me decolora los otros dias). Me ha dado bastantes problemas y finalmente lo he descartado (tal vez por ignorancia).

A final me he decidido a hacer un calendario pero no se muy bien como hacerlo. Necesito que al hacer click, el dia clicado se ponga en un color determindao y al hacer click derecho aparezca un popup en el que se diga el color que se quiera y ponga el dia de ese color. He empezado haciendo un panel con 7+8 =56 labels `para mostrar el numero de la semana y tb el nombre del dia: lunes, martes,...) pero me doy cuenta de que no es la mejor manera. A alguien se le ocurre algo mejor?


Muchas gracias
Alopete
Responder Con Cita
  #2  
Antiguo 11-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Has probado YearPlan? Lo usé hace tiempo, aunque tampoco hice grandes cosas.
Es free y trae código fuente, así que tal vez puedas modificarlo si te hace falta.

Puedes encontrarlo en Torry, aquí y también lo he subido al FTP del ClubDlephi.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-03-2010
alopete alopete is offline
Miembro
 
Registrado: sep 2007
Posts: 95
Poder: 17
alopete Va por buen camino
Muchas gracias por responder.

Ahora mismo lo bajo y me pongo a ello. Cuando lo pruebe, comentare que tal ha ido para que les sirva a los demas.


Alopete
Responder Con Cita
  #4  
Antiguo 16-03-2010
alopete alopete is offline
Miembro
 
Registrado: sep 2007
Posts: 95
Poder: 17
alopete Va por buen camino
Hola de nuevo:
Neftali, ya mire el planYear pero me parecio un poco mas complicado que la otra opcion que he barajado: al final he hecho un calendario anual con 12 stringgrids. Cada Stringgrid lleva un array asociado con el dia y el color del que quiero pintar el calendario. En los eventos OnDrawCell de cada Stringgrid pinto el dia del color que corresponda y en el evento on click, le pongo el color que el usuario quiere.
Me ha costado un poco pero ya esta (+ o -)

Gracias pro vuestra ayuda.
Responder Con Cita
  #5  
Antiguo 18-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si puedes, estaría bien que subieras el ejemplo al FTP del club. Así le podría servir a otros usuarios que busquen sobre el mismo tema.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 22-03-2010
alopete alopete is offline
Miembro
 
Registrado: sep 2007
Posts: 95
Poder: 17
alopete Va por buen camino
Hola de nuevo:

Cuando tenga un rato (esta tarde supongo), explicare como lo he conseguido. Despues de pegarme un rato es conceptualmente facil pero me ha costado un poco acertar.

Un saludo
Responder Con Cita
  #7  
Antiguo 22-03-2010
alopete alopete is offline
Miembro
 
Registrado: sep 2007
Posts: 95
Poder: 17
alopete Va por buen camino
Hola de nuevo:
Explico un poco como he hecho: he creado 12 stringgrids, una tabla con el calendario para cada empleado (un registro por cada dia) y un array por cada mes del año. Cuando entro en la pantalla copio los datos de la tabla al array, asi que por cada mes tengo todos sus dias en el array. Tambien guardo en la tabla el color en el que se tiene que pintar el dia, o sea, la celda del stringgid.

PAra pintar el stringgrid utilizo el evento drawcell, que se lanza un monton de veces pero a mi me va bien (y no hay otra posibilidad):

Código Delphi [-]
 
procedure TCalFrm.FebreroDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  sTexto: String;           // Texto que va a imprimir en la celda actual
  iAnchoTexto: Integer;     // Ancho del texto a imprimir en pixels
  PosArray:integer;
  TipoDia:String;
begin
  sTExto:='';
   with Febrero.Canvas do  begin
    // Lo primero es coger la fuente por defecto que le hemos asignado al componente
    // Los nombres de los dias y los numeros de semana
   if gdFixed in State then    begin
      Brush.Color := $00FF8000;// le ponemos azul de fondo
      Font.Color := clWhite;// fuente blanca
      Font.Style := [fsBold];// y negrita
        if (AROw=0) or (ACol=0) then
          sTexto := DameTitulo(Arow,Acol);
   end
    else begin
          sTexto := Febrero.Cells[ACol,Arow];
          PosArray := Acol+(ARow-1)*7;
          if ArrayFebrero[POsArray].Dia = 0 then
            sTExto := '';
          if sTExto <>'' then begin
            //obtengo el color en el que quiero pintar la celda
            TipoDia := ArrayFebrero[POsArray].Tipo;
            DameColor(TipoDia);
            Brush.Color := DameColor(TipoDia);
          Font.Style := [fsBold];
          end
          else begin
          Brush.Color := clwindow
          Font.Style := [];// y negrita
          end;
          Font.Color := clBlack;
    end;
    FillRect( Rect );
    iAnchoTexto := TextWidth( sTexto );
    if sTExto <>'' then
      TextOut( Rect.Left + ( ( Rect.Right - Rect.Left ) - iAnchoTexto ) div 2, Rect.Top + 2, sTexto );
   end;
end;


con eso se pinta el stringgird solo.
El otro evento que he utilizado es el onclick del stringrid, en el cual le digo en que color hay que pintar la celda y lo grabo en la tabla:


Código Delphi [-]
procedure TCalFrm.FebreroClick(Sender: TObject);
var
  Col, Row: integer;
  Colo1, Colo2, Colo3: byte;
  PosArray:integer;
  TipoDiaIni,TipoNuevo:String;
  HorasT,HorasE,HorasA:double;
  Motivo:String;
  exito:boolean;
begin
  Col := Febrero.Col;
  Row := Febrero.Row;
  if (Col<>0) and (Row <>0) then begin
    //obtengo la posicion en la que esta el dia en el array
    PosArray    := Col+(Row-1)*7;
    TipoDiaIni  := arrayFebrero[PosArray].Tipo;
    Tiponuevo   := DeRadioAChar(rgtipo.ItemIndex);
    HorasT      := arrayFebrero[PosArray].Horast;
    HorasE      := arrayFebrero[PosArray].Horase;
    HorasA      := arrayFebrero[PosArray].Horasa;
    Motivo      := arrayFebrero[PosArray].motivo;
    try
        if cdsCalendario.locate('FECHA',arrayEnero[PosArray].Fecha,[]) then begin
          //pongo los datos en el array y en la tabla y lo grabo 
          DameHoras(TipoNuevo,HorasT,HorasE,HorasA);
          arrayFebrero[PosArray].Tipo   := TipoNuevo;
          cdsCalendario.Edit;
          cdsCAlendarioTIPO.AsString  := TipoNuevo;
          cdsCalendario.Post;
          cdsCalendario.ApplyUpdates(0);
        end;
    finally
    end;
    Febrero.Refresh;
  end;
end;

Bueno, no se com o ha quedado, si alguien no lo entiende, que me lo diga.
Responder Con Cita
  #8  
Antiguo 01-04-2017
tuni tuni is offline
Miembro
 
Registrado: jun 2012
Posts: 34
Poder: 0
tuni Va por buen camino
Hola
me gustaria estudiar tu ejemplo.Lo has colgado en el FTP para poder probarlo,estudiarlo y aprender de él.
Gracias
Responder Con Cita
  #9  
Antiguo 03-04-2017
alopete alopete is offline
Miembro
 
Registrado: sep 2007
Posts: 95
Poder: 17
alopete Va por buen camino
Calendarios

Hola
No me es posible subir el formulario porque forma parte de un proyecto e iba a dar muchos errores pero la solución que encontré es básicamente el código que puse en su día.
Siento no poder ayudar más.

Alopete
Responder Con Cita
  #10  
Antiguo 03-04-2017
tuni tuni is offline
Miembro
 
Registrado: jun 2012
Posts: 34
Poder: 0
tuni Va por buen camino
No pasa nada.
Era para visualizarlo mejor y poder adaptarlo a mis necesidades.
Gracias
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
crear un calendario sin usar el Date del sistema pablopessoa Varios 0 13-02-2009 20:09:44
calendario sisgeorge C++ Builder 2 02-07-2008 18:01:00
calendario reina Varios 9 17-04-2007 13:33:28
Como crear calendario y reloj Mario1980 Varios 4 15-10-2004 17:20:45
Calendario srangel JAVA 1 04-09-2004 13:58:08


La franja horaria es GMT +2. Ahora son las 09:35:00.


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