- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用一个名为 TMonthCalendar 的 TMonthCalendar 控件编写了一个 C++ Builder VCL Forms 应用程序。
我想用控件将某些日子设置为粗体。
这是我当前的代码:
TMonthCalendar->BoldDays([1,8], MonthBoldInfo);
但是我收到以下错误:
E2193 Too few parameters in call to '_fastcall TCommonCalendar::BoldDays(unsigned int *,const int,unsigned int &)'
我可以帮忙做这件事吗?
这是文档的链接:http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ComCtrls.TMonthCalendar.OnGetMonthInfo
我看不出我的代码和文档有什么区别。但我仍然遇到错误。
谢谢
更新
我正在尝试以下代码:
unsigned int arr[2] = {1,8};
TMonthCalendar->BoldDays(arr, 1, MonthBoldInfo);
但出现以下错误:
[BCC32 Error] Assessment2.cpp(361): E2357 Reference initialized with 'unsigned long', needs lvalue of type 'unsigned int' Full parser context Assessment2.cpp(359): parsing: void _fastcall TformMain::TMonthCalendarGetMonthInfo(TObject *,unsigned long,unsigned long &)
和
[BCC32 Error] Assessment2.cpp(361): E2342 Type mismatch in parameter 'MonthBoldInfo' (wanted 'unsigned int &', got 'unsigned long') Full parser context Assessment2.cpp(359): parsing: void _fastcall TformMain::TMonthCalendarGetMonthInfo(TObject *,unsigned long,unsigned long &)
更新
我想从 vector 中检索某个月的所有日期,然后通过 TMonthCalendar 控件将日期设置为粗体。
这是我的代码:
vector<appointment> appointmentsOnMonth = calCalendar.getAllAppointmentsOnMonth(TMonthCalendar->Date);
if (appointmentsOnMonth.size() > 0)
{
unsigned int arr[appointmentsOnMonth.size()];
for (int i = 0; i < appointmentsOnMonth.size(); i++)
{
int dayOfAppointment = DayOf(appointmentsOnMonth[i].getAppDateTime());
arr[i] = dayOfAppointment;
}
TMonthCalendar->BoldDays(arr, 1, reinterpret_cast<unsigned int&>(MonthBoldInfo));
}
dayOfAppointment 变量工作正常,并获取应以粗体显示的天数整数值。我正在寻求一些帮助,请将这些日子显示为大胆的日子。
我遇到了一些与 unsigned int arr[] 和粗体显示有关的错误。他们在这里:
[BCC32 Error] Assessment2.cpp(366): E2313 Constant expression required [BCC32 Error] Assessment2.cpp(372): E2034 Cannot convert 'int[1]' to 'unsigned int *'
我认为这是因为静态数组需要编译时常量,因此第二个代码永远不会编译。有解决办法吗?
最佳答案
C++ 中 BoldDays()
的前两个参数由 Delphi 中的单个开放数组参数组成。一个开放数组由一个数据指针和一个指向所指向数据的最大索引组成。在 C++ 中,您不能使用 [1,8]
语法。那是 Delphi 语法。在 C++ 中,请改用 ARRAYOFCONST()
或 OPENARRAY()
宏,例如:
TMonthCalendar->BoldDays(ARRAYOFCONST((1,8)), MonthBoldInfo);
或者:
TMonthCalendar->BoldDays(OPENARRAY(unsigned int, (1,8)), MonthBoldInfo);
或者,只需使用您自己的数组手动声明参数值:
unsigned int arr[2] = {1,8};
TMonthCalendar->BoldDays(arr, 1, MonthBoldInfo);
更新:OnGetMonthInfo
事件的MonthBoldInfo
参数是一个unsigned long&
,但是BoldDays ()
取而代之的是 unsigned int&
。通过引用传递值时,数据类型需要匹配。您有两个选择:
1) 使用中间变量:
unsigned int arr[2] = {1,8};
unsigned int days;
TMonthCalendar->BoldDays(arr, 1, days);
MonthBoldInfo = days;
2) 使用类型转换:
unsigned int arr[2] = {1,8};
TMonthCalendar->BoldDays(arr, 1, reinterpret_cast<unsigned int&>(MonthBoldInfo));
更新:您不能使用运行时值声明静态固定长度数组。您必须改用动态分配的数组。由于您已经在使用 std::vector
,因此您可以将其用于数组:
vector<appointment> appts = calCalendar.getAllAppointmentsOnMonth(TMonthCalendar->Date);
if (!appts.empty())
{
vector<unsigned int> arr(appts.size());
for (vector<appointment>::iterator i = appts.begin(); i != appts.end(); ++i)
{
arr[i] = DayOf(i->getAppDateTime());
}
TMonthCalendar->BoldDays(&arr[0], arr.size()-1, reinterpret_cast<unsigned int&>(MonthBoldInfo));
}
话虽如此,OnGetMonthInfo
事件用于检索所有年份中给定月份的粗体日期,即重复发生的事件,因此使用 TMonthCalendar 没有意义::Date
属性就像你一样。您应该改用提供的 Month
参数:
vector<appointment> appts = calCalendar.getAllAppointmentsOnMonth(Month);
要为特定年份的给定月份设置粗体日期,请改用 OnGetMonthBoldInfo
事件,它会为您提供 Month
和 Year
参数:
vector<appointment> appts = calCalendar.getAllAppointmentsOnMonthOfYear(Month, Year);
关于c++ - BoldDays 与 TMonthCalendar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794009/
我正在使用 Delphi7,我想将 TDateTimePicker 控件的某些天加粗。 我读到,它最初是 TMonthCalendar 的后代,因此应该是可能的。 我还找到了一些示例代码,但它是用 C
我用一个名为 TMonthCalendar 的 TMonthCalendar 控件编写了一个 C++ Builder VCL Forms 应用程序。 我想用控件将某些日子设置为粗体。 这是我当前的代码
我是一名优秀的程序员,十分优秀!