datas em negrito / monthcalendar - delphi4
Oii pessoal,
to morrendo de tanto desespero já.. não consigo achar isso em lugar nenhum..
to fazendo um sistema de restaurante pro projeto final no colégio, e coloquei o componente monthcalendar
pra controlar as contas à pagar.
O que eu preciso saber é como fazer o seguinte:
ao cadastrar a conta no banco de dados, informando a data de vencimento, a data gravada no bd fique em negrito no calendário.
O problema é: o colégio trabalha com versão 4 do delphi , e o banco de dados é o databasedesktop.
# preciso mt mt da ajuda de vocês!!Só falta resolver isso, pra finalizar o sistema.
Beijinho, galera.
Yuli Chrysostomo
Curtidas 0
Respostas
Emerson Nascimento
08/10/2010
coloque esse código no evento OnGetMonthInfo:
MonthCalendar1.BoldDays([1,8], MonthBoldInfo);
ele deve tornar negrito o dia 1o. e o dia 8. se funcionar, bsata você alterar o conteúdo do array.
MonthCalendar1.BoldDays([1,8], MonthBoldInfo);
ele deve tornar negrito o dia 1o. e o dia 8. se funcionar, bsata você alterar o conteúdo do array.
GOSTEI 0
Yuli Chrysostomo
08/10/2010
mas não é possível eu colocar em negrito as datas que foram gravadas no banco de dados ?
por exemplo :
no banco de dados, têm compromissos para o dia 10/10 e dia 14/10, aí essas duas datas ficam em negrito
no month calendar!!
GOSTEI 0
Yuli Chrysostomo
08/10/2010
Eii pessoal, será que você conseguem me ajudar ??
encontrei um código pra colocar as datas do banco de dados em negrito no monthcalendar .. mas o rpoblema é que está em SQL e o meu bd é o "databasedesktop"
No caso eu teria que substituir todos os Q2 por table1 .. mas tah dando erro nessa linha aqui:
Q2.SQL.TEXT:=' SELECT DISTINCT DATA_LEITURA FROM AMCWU '+' ORDER BY DATA_LEITURA DESC';
O código inteiro tah aí, galerinha:
Alguém poderia me ajudaar ??
Ficaria muito grata!
procedure TForm1.CALENDARIOGetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var dias :array of cardinal;
DATA,DATENOW :TDATETIME;
begin
Q2.CLOSE;
Q2.SQL.CLEAR;
Q2.SQL.TEXT:=' SELECT DISTINCT DATA_LEITURA FROM AMCWU '
+' ORDER BY DATA_LEITURA DESC';
Q2.OPEN;
Q2.FIRST;
WHILE NOT Q2.EOF DO
BEGIN
DATA:=Q2.FIELDBYNAME('DATA_LEITURA').AsDateTime;
SetLength(dias,Q2.RECORDCOUNT);
DATENOW:= STRTOINT(FORMATDATETIME('MM',DATA));
if month = DATENOW THEN
BEGIN
MonthBoldInfo:=0;
dias[Q2.RECNO-1]:= STRTOINT(FORMATDATETIME('DD',DATA));
CALENDARIO.BoldDays(dias,MonthBoldInfo);
END;
Q2.Next;
end;
end; GOSTEI 0
Emerson Nascimento
08/10/2010
tente assim:
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var
aDias: array of cardinal; // array dinâmico
nDia: word;
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
Table1.Filtered := False;
Table1.Filter := 'EXTRACT(YEAR FROM DATA_LEITURA) = ' + IntToStr(YearOf(MonthCalendar1.Date))+
' AND EXTRACT(MONTH FROM DATA_LEITURA) = ' + IntToStr(MonthOf(MonthCalendar1.Date));
Table1.Filtered := True;
// faço a varredura nos registros para 'pintar', no calendário, os dias necessários
while not Table1.Eof do
begin
nDia := DayOf(Table1.FieldByName('DATA_LEITURA').AsDateTime); // obtém o dia da data
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;
Table1.Next;
end;
Table1.Filtered := False; // limpa o filtro da tabela
if Length(aDias) > 0 then // se algum dia foi incluído, pinta no monthcalendar
MonthCalendar1.BoldDays(aDias, MonthBoldInfo);
end;
obviamente você terá de trocar Table1 pelo nome correto do seu objeto TTable e o campo DATA_LEITURA pelo campo correto da sua tabela.
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var
aDias: array of cardinal; // array dinâmico
nDia: word;
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
Table1.Filtered := False;
Table1.Filter := 'EXTRACT(YEAR FROM DATA_LEITURA) = ' + IntToStr(YearOf(MonthCalendar1.Date))+
' AND EXTRACT(MONTH FROM DATA_LEITURA) = ' + IntToStr(MonthOf(MonthCalendar1.Date));
Table1.Filtered := True;
// faço a varredura nos registros para 'pintar', no calendário, os dias necessários
while not Table1.Eof do
begin
nDia := DayOf(Table1.FieldByName('DATA_LEITURA').AsDateTime); // obtém o dia da data
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;
Table1.Next;
end;
Table1.Filtered := False; // limpa o filtro da tabela
if Length(aDias) > 0 then // se algum dia foi incluído, pinta no monthcalendar
MonthCalendar1.BoldDays(aDias, MonthBoldInfo);
end;
obviamente você terá de trocar Table1 pelo nome correto do seu objeto TTable e o campo DATA_LEITURA pelo campo correto da sua tabela.
GOSTEI 0
Yuli Chrysostomo
08/10/2010
Galeraaa!!!
mt mt obrigada, pela ajuda de vocês.. eu consegui fazer o lance do negrito nas datas do monthcalendar.
Mas ainda tenho uma dúvida.. [/cada dia surgem mais, rsrs]
Gostaria de saber se é possível, por exemplo, ao invés de colocar as datas em negrito, mudar a cor delas..
Sendo o mesmo esquema; as datas que estão gravadas no bd .. ficarem de outra cor das demais.
Desse jeito essas datas teriam um destaque maior.
É possível fazer isso ??
GOSTEI 0