MonthCalendar em negrito

Delphi

13/09/2012

ai galera, boa tarde. Vcs poderiam me ajudar numa rotina? É o seguinte tenho uma tabela de nome AGENDA e estou querendo deixar o dia em negrito em um MonthCalendar de acordo com a data cadastrada na agenda entao se existe um compromisso pra hoje o sistema mostrar a data de hoje em negrito.

Estou usando o codigo:

procedure TFrmCompromissos.mtc_calendarioGetMonthInfo(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
CdsAgenda.Filtered:= False;
CdsAgenda.Filtered:= 'EXTRACT(YEAR FROM DATA) = ' + IntToStr(YearOf(mtc_calendario.Date))+
' AND EXTRACT(MONTH FROM DATA) = ' + IntToStr(MonthOf(mtc_calendario.Date));
CdsAgenda.Filtered:= True;
// faço a varredura nos registros para 'pintar', no calendário, os dias necessários
while not CdsAgenda.Eof do
begin
nDia := DayOf(CdsAgenda.FieldByName('DATA').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;
CdsAgenda.Next;
end;

CdsAgenda.Filtered := False; // limpa o filtro da tabela

if Length(aDias) > 0 then // se algum dia foi incluído, pinta no monthcalendar
mtc_calendario.BoldDays(aDias, MonthBoldInfo);
end;

Mas tá dando erro na linha em que estou filtrando... dizendo: "Incompatible types: 'Boolean' and 'string' que o faço para resolver?????
Marcos Morais

Marcos Morais

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

13/09/2012

Você está passando um string para a propriedade CdsAgenda.Filtered. O correto seria usar a propriedade Filter e não a Filtered nessa linha.
GOSTEI 0
Marcos Morais

Marcos Morais

13/09/2012

Você está passando um string para a propriedade CdsAgenda.Filtered. O correto seria usar a propriedade Filter e não a Filtered nessa linha.


Fiz o que vc disse, o erro nao deu mais ... contudo não está funcionando pois nao deixou o dia no monthcalendar em negrito
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/09/2012

Pois é, o seu código tinha um problema de fato, mas nada relacionado a colocar o dia em negrito. Depure o código e veja se está passando corretamente pela instrução BoldDays.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/09/2012

E então, alguma novidade?
Conseguiu identificar o problema?
GOSTEI 0
Marcos Morais

Marcos Morais

13/09/2012

E então, alguma novidade?
Conseguiu identificar o problema?


Nada... já olhei linha a linha e está tudo certo,não está dando erro, mais também não está deixando o dia em negrito como estou precisando..
GOSTEI 0
Alisson Santos

Alisson Santos

13/09/2012

Como informado pelo colega acima, você debugou o programa para ver se está passando na linha.
Pois se não estiver passando na linha não deixará o dia em negrito.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/09/2012

Se passar pela instrução que marca os dias em negrito, "entre" na função para depurá-la também.
GOSTEI 0
POSTAR