Autor
Mensagem
Boa tarde Pessoal
vi no Forum DevMedia esse topico http://www.devmedia.com.br/forum/delphi/388292-datas-em-negrito---monthcalendar-delphi4.html, aonde com ele tambem consegui deixar a data em negrito, só que tem um porem quando fica em negrito, elel coloca para todos os meses.
Alguem sabe como ?
Obrigado.
vi no Forum DevMedia esse topico http://www.devmedia.com.br/forum/delphi/388292-datas-em-negrito---monthcalendar-delphi4.html, aonde com ele tambem consegui deixar a data em negrito, só que tem um porem quando fica em negrito, elel coloca para todos os meses.
Alguem sabe como ?
Obrigado.
Obrigado pelo retorno,
ai esta meu codigo para darem uma olhada:
procedure TFPesquisaReserva.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var
aDias: array of cardinal; // array dinâmico
nDia: word;
nDiaString: string;
function DiaOK: boolean; // sub-function para não duplicar o dia
var
i: integer;
begin
Result := True;
if Length(aDias) > 0 then
for i := 0 to High(aDias) do
if aDias[i] = nDia then
begin
Result := False;
exit;
end;
end;
begin
SetLength(aDias, 0); // inicializo o array
// filtro a tabela para listar somente os registros cuja data
// corresponda ao mesmo mês e ano que estiver sendo exibido no calendário
CDS_Pesquisa.Close;
SQLDataSet_Pesq.CommandText := 'select data from reserva';
CDS_Pesquisa.Open;
// faço a varredura nos registros para 'pintar', no calendário, os dias necessários
while not CDS_Pesquisa.Eof do
begin
nDiaString := FormatDateTime('dd',CDS_Pesquisa.FieldByName('DATA').AsDateTime);// obtém o dia da data
nDia := StrToInt(ndiaString);
if DiaOK then // verifica se pode incluir o dia no array (não repete o dia)
begin
SetLength(aDias, Length(aDias)+1); // incrementa o número de elementos no array
aDias[High(aDias)] := nDia; // atribui o dia ao novo elemento do array
end;
CDS_Pesquisa.Next;
end;
ai esta meu codigo para darem uma olhada:
procedure TFPesquisaReserva.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var
aDias: array of cardinal; // array dinâmico
nDia: word;
nDiaString: string;
function DiaOK: boolean; // sub-function para não duplicar o dia
var
i: integer;
begin
Result := True;
if Length(aDias) > 0 then
for i := 0 to High(aDias) do
if aDias[i] = nDia then
begin
Result := False;
exit;
end;
end;
begin
SetLength(aDias, 0); // inicializo o array
// filtro a tabela para listar somente os registros cuja data
// corresponda ao mesmo mês e ano que estiver sendo exibido no calendário
CDS_Pesquisa.Close;
SQLDataSet_Pesq.CommandText := 'select data from reserva';
CDS_Pesquisa.Open;
// faço a varredura nos registros para 'pintar', no calendário, os dias necessários
while not CDS_Pesquisa.Eof do
begin
nDiaString := FormatDateTime('dd',CDS_Pesquisa.FieldByName('DATA').AsDateTime);// obtém o dia da data
nDia := StrToInt(ndiaString);
if DiaOK then // verifica se pode incluir o dia no array (não repete o dia)
begin
SetLength(aDias, Length(aDias)+1); // incrementa o número de elementos no array
aDias[High(aDias)] := nDia; // atribui o dia ao novo elemento do array
end;
CDS_Pesquisa.Next;
end;
fldb, compare o trecho:
// filtro a tabela para listar somente os registros cuja data
// corresponda ao mesmo mês e ano que estiver sendo exibido no calendário
CDS_Pesquisa.Close;
SQLDataSet_Pesq.CommandText := 'select data from reserva';
CDS_Pesquisa.Open;
com o código do post original.
cadê a filtragem da data? você está escolhendo sempre TODOS os registros da tabela. é preciso escolher somente os registros cujo ano e mês correpondam ao ano e mês do calendário.
leia com bastante atenção o texto em vermelho.
// filtro a tabela para listar somente os registros cuja data
// corresponda ao mesmo mês e ano que estiver sendo exibido no calendário
CDS_Pesquisa.Close;
SQLDataSet_Pesq.CommandText := 'select data from reserva';
CDS_Pesquisa.Open;
com o código do post original.
cadê a filtragem da data? você está escolhendo sempre TODOS os registros da tabela. é preciso escolher somente os registros cujo ano e mês correpondam ao ano e mês do calendário.
leia com bastante atenção o texto em vermelho.
Obrigado pelo retorno amigão mas achei outra maneira, vou colocar aqui o fonte para caso alguem precisar.
Valeu
procedure TFPesquisaReserva.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var dias :array of cardinal;
Data,Datenow :TDateTime;
begin
CDS_Pesquisa.Close;
SQLDataSet_Pesq.CommandText := 'select data from reserva where Situacao = ''R'' order by data desc';
CDS_Pesquisa.Open;
CDS_Pesquisa.FIRST;
WHILE NOT CDS_Pesquisa.EOF DO
BEGIN
Data := CDS_Pesquisa.FieldByName('DATA').AsDateTime;
SetLength(dias,CDS_Pesquisa.RECORDCOUNT);
Datenow:= StrToInt(FORMATDATETIME('MM',DATA));
if month = DATENOW THEN
BEGIN
MonthBoldInfo:=0;
dias[CDS_Pesquisa.RECNO-1]:= STRTOINT(FORMATDATETIME('DD',DATA));
MonthCalendar1.BoldDays(dias,MonthBoldInfo);
END;
CDS_Pesquisa.Next;
end;
end;
Valeu
procedure TFPesquisaReserva.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var dias :array of cardinal;
Data,Datenow :TDateTime;
begin
CDS_Pesquisa.Close;
SQLDataSet_Pesq.CommandText := 'select data from reserva where Situacao = ''R'' order by data desc';
CDS_Pesquisa.Open;
CDS_Pesquisa.FIRST;
WHILE NOT CDS_Pesquisa.EOF DO
BEGIN
Data := CDS_Pesquisa.FieldByName('DATA').AsDateTime;
SetLength(dias,CDS_Pesquisa.RECORDCOUNT);
Datenow:= StrToInt(FORMATDATETIME('MM',DATA));
if month = DATENOW THEN
BEGIN
MonthBoldInfo:=0;
dias[CDS_Pesquisa.RECNO-1]:= STRTOINT(FORMATDATETIME('DD',DATA));
MonthCalendar1.BoldDays(dias,MonthBoldInfo);
END;
CDS_Pesquisa.Next;
end;
end;
da forma como está você vai varrer a tabela inteira e
pode acabar pintando dias referentes a outros anos que não o apontado no
calendário.
troque sua instrução para algo como:
SQLDataSet_Pesq.CommandText :=
'select data from reserva '+
'where Situacao = ''R'' and extract(month from data)='+inttostr(month)+
' and extract(year from data)='+FormatDateTime('YYYY',MonthCalendar1.Date);
essa alteração serve para o FB. adapte os comandos para o banco que você utiliza.
troque sua instrução para algo como:
SQLDataSet_Pesq.CommandText :=
'select data from reserva '+
'where Situacao = ''R'' and extract(month from data)='+inttostr(month)+
' and extract(year from data)='+FormatDateTime('YYYY',MonthCalendar1.Date);
essa alteração serve para o FB. adapte os comandos para o banco que você utiliza.






