gpt4 book ai didi

c++ - BoldDays 与 TMonthCalendar

转载 作者:行者123 更新时间:2023-11-30 02:59:33 26 4
gpt4 key购买 nike

我用一个名为 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 事件,它会为您提供 MonthYear参数:

vector<appointment> appts = calCalendar.getAllAppointmentsOnMonthOfYear(Month, Year);

关于c++ - BoldDays 与 TMonthCalendar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com