Fórum MonthCalendar - MonthBoldInfo pegando mes anterior #350138
05/12/2007
0
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
Curtir tópico
+ 0Posts
05/12/2007
Bebeketo
MonthCalendar.date:= date;
caso nao seja isto, especifique melhor seu problema
Gostei + 0
05/12/2007
Douglas Bitencourt
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
06/12/2007
Douglas Bitencourt
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)