Estoy usando un código que me facilitó
escafandra en el
Foro Club Builder para destacar en este elemento determinadas fechas. El código es este:
Código:
#define BOLDDAY(ds, iDay) \
if (iDay > 0 && iDay < 32)(ds) |= (0x00000001 << (iDay - 1))
#define DTM_GETMCSTYLE (DTM_FIRST + 12)
#define DTM_SETMCSTYLE (DTM_FIRST + 11)
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DWORD style = SendMessage(DateTimePicker1->Handle, DTM_GETMCSTYLE, 0, 0);
SendMessage(DateTimePicker1->Handle, DTM_SETMCSTYLE, 0, style | MCS_DAYSTATE);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DateTimePicker1DropDown(TObject *Sender)
{
MONTHDAYSTATE MonthBInfo[3] = {0, 0, 0};
HANDLE hCalendar = (HANDLE)SendMessage(DateTimePicker1->Handle, DTM_GETMONTHCAL, 0, 0);
BOLDDAY(MonthBInfo[0], 0);
BOLDDAY(MonthBInfo[1], 15);
BOLDDAY(MonthBInfo[2], 0);
if(hCalendar > 0)
SendMessage(hCalendar, MCM_SETDAYSTATE, 3, LPARAM(MonthBInfo));
}
Necesito que me destaque las fechas, por ejemplo, entre el 1 de abril y hoy 24 de abril y con ese código me hace esto:

Como veis unos días sí los pone en negrita y otros no. He probado en ese evento con variaciones del código como esta:
Código:
void __fastcall TfFacAlb::FecPagoDropDown(TObject *Sender)
{
MONTHDAYSTATE MonthBInfo[3] = {0, 0, 0};
Word Year, Month, Day;
fMenu->Query->Close();
fMenu->Query->SQL->Text = "SELECT Fecha FROM Factura WHERE TipoDoc = 3 AND NumFactura = :NumFactura";
fMenu->Query->ParamByName("NumFactura")->AsInteger = StrToInt(pItem->SubItems->Strings[3]);
fMenu->Query->Open();
DecodeDate(fMenu->Query->FieldByName("Fecha")->AsDateTime, Year, Month, Day);
HANDLE hCalendar = (HANDLE)SendMessage(FecPago->Handle, DTM_GETMONTHCAL, 0, 0);
BOLDDAY(MonthBInfo[0], 0);
BOLDDAY(MonthBInfo[1], Day);
BOLDDAY(MonthBInfo[2], 0);
if (hCalendar > 0)
SendMessage(hCalendar, MCM_SETDAYSTATE, 3, LPARAM(MonthBInfo));
}
o esta:
Código:
void __fastcall TfFacAlb::FecPagoDropDown(TObject *Sender)
{
MONTHDAYSTATE MonthBInfo = 0;
Word Year, Month, Day;
fMenu->Query->Close();
fMenu->Query->SQL->Text = "SELECT Fecha FROM Factura WHERE TipoDoc = 3 AND NumFactura = :NumFactura";
fMenu->Query->ParamByName("NumFactura")->AsInteger = StrToInt(pItem->SubItems->Strings[3]);
fMenu->Query->Open();
DecodeDate(fMenu->Query->FieldByName("Fecha")->AsDateTime, Year, Month, Day);
HANDLE hCalendar = (HANDLE)SendMessage(FecPago->Handle, DTM_GETMONTHCAL, 0, 0);
BOLDDAY(MonthBInfo, Day);
if (hCalendar > 0)
SendMessage(hCalendar, MCM_SETDAYSTATE, 3, LPARAM(MonthBInfo));
}
Pero lo ponga como lo ponga me hace siempre lo msimo. ¿Qué puedo estar haciendo mal?