Robię mały programik, którego zadaniem jest zapisywanie notatek na wybrany dzień. Używam komponentów TMonthCalendar i RichEdit.
Jednym z założeń jest wyróżnienie dni w kalendarzu, które zawierają notatkę.
- Kod: Zaznacz cały
TStringList *Lista=new TStringList; //deklaracja obiektu 'Lista'.
....
- Kod: Zaznacz cały
Lista->Add("20110110"); //lista dni tworzona dynamicznie, głównie w momencie utworzenia nowej notatki.
Lista->Add("20110112");
Lista->Add("20110118");
Lista->Add("20110128");
W zdarzeniu OnGetMonthInfo można umieścić kod, który będzie wyróżniał poprzez pogrubienie zadane dni.
- Kod: Zaznacz cały
TDateTime date[366];
for(int x=0;x<Lista-> Count;x++)
{
date[x]=EncodeDate(Lista->Strings[x].SubString(1,4).ToInt(),Lista->Strings[x].SubString(5,2).ToInt(),Lista->Strings[x].SubString(7,2).ToInt());
}
WORD day,month,year;
int j = 0;
for (int i = 0; i < Lista->Count; i++)
{
DecodeDate(date[i],year,month,day);
unsigned bolddays[31];
if (Month==month )
{
bolddays[j] = day;
Calendar1->BoldDays(bolddays,j, (unsigned&)MonthBoldInfo);
j++;
}
}
Zadane dni ładnie i pieknie się wyróżniają, ale są 2 główne problemy.
1. Kod wyróżnia prawidłowo tylko wg miesiąca i dnia danego miesiąca. Rok nie jest brany pod uwagę. Tzn, notatka zapisana dnia 11.01.2012 będzie również wyróżniona w innych latach 11.01.2011, 2010, 2009, itd.
2. Dodanie nowej notatki powoduje dodanie do obiektu 'Lista' odpowiednio nowej daty. Jak automatycznie odświeżyć w TMonthCalendar dzień utworzenia tej notatki? Odświeżenie działa obecnie tylko przy nawigacji między miesiącami.
Chyba przekopałem już cały internet w tym temacie i natknąłem się na ciekawe rozwiązania wykorzystujące bezpośrednio API.
https://forums.embarcadero.com/thread.jspa?threadID=63457
Niestety program czasami się sypie - StackOverflow.
Może ktoś pomoże?









