MonthCalendar - MonthBoldInfo pegando mes anterior

Delphi

05/12/2007

Caros, boa tarde,

Peguei algumas dicas aqui no forum e resolvi em parte o meu problema com calendário.
Agora não consigo fazer com que o MonthCalendar pegue o mês atual exibido. Ao invés disso, ele pega o mês anterior.

No aguardo.
Obrigado

Douglas


Douglas Bitencourt

Douglas Bitencourt

Curtidas 0

Respostas

Bebeketo

Bebeketo

05/12/2007

no create ou onshow do form, coloque

MonthCalendar.date:= date;

caso nao seja isto, especifique melhor seu problema


GOSTEI 0
Douglas Bitencourt

Douglas Bitencourt

05/12/2007

Obrigado bebeketo pela resposta.

Sim, já tinha feito isso no on show do form.

Eu peguei o exemplo que o companheiro mota postou no forum juntei com o do Aroldo Zanela e adaptei para a minha realidade.
Trabalho com ADOquery e SQL simples neste projeto.

O que preciso: como existem vários lançamentos em um mesmo dia, e diversos lançamentos no mesmo mês, eu pego todos os dias em um determinado mês e agrupo por dia. Conforme o exemplo que peguei no forum, estes dias são armazenados no array que é passado como parâmetro para BoldDays junto com o valor do MonthBoldInfo.

Durante a execução a data (dia/mês/ano) está correta no MonthCalendar, mas ao verificar o valor do parâmetro MonthBoldInfo na depuração, o mês é sempre um mês a menos que o Mês atual, e consequentemente, os dias corretos ficam em Bold mas no mês anterior no calendário.

Por exemplo: estamos em dezembro e passamos para novembro. O valor do MonthBoldInfo fica 10 e não 11 como deveria ser.

Já tentei atribuir o valor do mês pegando no DecodeDate o valor extraído da data atual do MonthCalendar, e quando o passo a passo do depurador passa pelo MonthBoldInfo o mês pula de 11 (por exemplo) para 1024.

Segue meu código:

procedure TfrmMCAgenda.mcMComGetMonthInfo(Sender: TObject; Month: Cardinal;
  var MonthBoldInfo: Cardinal);
var
  Ano, Mes, Dia : word;
  Ano1, Mes1, Dia1 : word;
  DataMissa : string;
  Dias : array of cardinal; //array de dias do mês
  i, ContarReg : integer;

//  Meses : cardinal; //tentativa de pegar o valor do mês atual e passar como parâmetro

begin

  Inherited;
  Dias:= Nil;
  try
    DecodeDate(mcMCom.Date,Ano,Mes,Dia);
    i:= -1;

    qryMC_Agenda.Active := true;

  with qryMC_Agenda do
   begin
    close;
      SQL.Clear;
      SQL.add(´SELECT * FROM MC_TMP_EXIBE_DADOS´);
      SQL.add(´WHERE Month(DATA_MISSA)=:MES_MISSA´);
    SQL.Add(´and Year(DATA_MISSA)=:ANO_MISSA´);
      SQL.Add(´Order By DATA_MISSA´);
      Parameters.ParamByName(´MES_MISSA´).Value := IntToStr(mes);
      Parameters.ParamByName(´ANO_MISSA´).Value := IntToStr(ano);
      Prepared := true;
      ExecSQL;
      Open;

      if Eof then
        Exit
      else
      begin

        //estava tendo muitos problemas com Group By
        //e resolvi fazer deste jeito o agrupamento dos dias...
        qryMC_Agenda.First;

        ContarReg := RecordCount + 1; 
        //ContarReg serve para armazenar a quantidade total de dias no mês
        //após o agrupamento de dias, e este valor definirá o
        //tamanho do array Dias. 
        //Fiz isso para evitar o erro de espaços demais no array

        DataMissa := qryMC_AgendaDATA_MISSA.AsString;
        while not (Eof) do
        begin
          while (qryMC_AgendaDATA_MISSA.AsString = DataMissa) and not (Eof) do
          begin
            ContarReg := ContarReg - 1;
            qryMC_Agenda.Next;
          end;
          ContarReg := ContarReg + 1;
          DataMissa := qryMC_AgendaDATA_MISSA.AsString;
        end;

        SetLength(Dias,ContarReg); // Tamanho do array

        qryMC_Agenda.First;
        DataMissa := qryMC_AgendaDATA_MISSA.AsString;
        while not (Eof) do
        begin
          DecodeDate(qryMC_AgendaDATA_MISSA.AsDateTime,Ano1,Mes1,Dia1);
          Inc(i);
          Dias[i]:= Dia1;
          while (qryMC_AgendaDATA_MISSA.AsString = DataMissa) and not (Eof) do
          begin
            qryMC_Agenda.Next;
            DataMissa := qryMC_AgendaDATA_MISSA.AsString;
          end;
        end;
        Close;
      end;
//      Meses := Mes; //tentativa de pegar o valor do mês atual e passar como parâmetro
      mcMCom.BoldDays(Dias, MonthBoldInfo);
    end;
  except
    Exit;
  end;
  qryMC_Agenda.Active := false;
end;



Acho que é isso.

No aguardo, Obrigado,

Douglas


GOSTEI 0
Douglas Bitencourt

Douglas Bitencourt

05/12/2007

sobe.


GOSTEI 0
POSTAR