datas em negrito / monthcalendar - delphi4

Delphi

08/10/2010

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

Yuli Chrysostomo

Curtidas 0

Respostas

Emerson Nascimento

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.


GOSTEI 0
Yuli Chrysostomo

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

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:
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; 
    Alguém poderia me ajudaar ?? Ficaria muito grata! 
GOSTEI 0
Emerson Nascimento

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.
GOSTEI 0
Yuli Chrysostomo

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
POSTAR