int y = YearOf(Date());
int m = MonthOf(Date());
TDateTime dtFirst = EncodeDate(year, month, 1);
int week = DayOfWeek(dtFirst);
week -= 1;
int daySum = DayOfTheMonth(EndOfTheMonth(dtFirst));
注:
Date()获取日期
YearOf()获取某日的年份
MonthOf()获取某日的月份
EncodeDate()获取某年某月第N天是系统时间的第几天(1900年1月1日为第一天);
DayOfWeek()获取一周中的第几天,这里第一天是星期日,所以如果要让星期一为第一天,那么week -= 1;
EndOfTheMonth()获取某月的最后一天;
DayOfTheMonth()获取某日为当月的第几天;
补充一个方法:
ComboBox->Items->IndexOf(string);
设置string在ComboBox中的索引值;
日历源码:
/*
功能:计算日历中每个单元个的天数
*/
void _fastcall TMain::ShowCalendar(int year, int month)
{
TDateTime dtFirst = EncodeDate(year, month, 1);
int week = DayOfWeek(dtFirst);
week -= 1;
int daySum = DayOfTheMonth(EndOfTheMonth(dtFirst));
int day = 1;
for (int i = 1; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
if ((i - 1) * 7 + j < week || (i - 1) * 7 + j >= daySum + week)
{
sgCalendar->Cells[j][i] = "";
}
else
{
sgCalendar->Cells[j][i] = IntToStr(day);
if (EncodeDate(year, month, day) == Date())
{
sgCalendar->Row = i;
sgCalendar->Col = j;
}
day++;
}
}
}
}