Назначение


Событие позволяет выделить определенные дни в календаре.




Описание


procedure OnGetMonthBoldInfo (Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal);



Примеры


// выделяем дни в календаре, если показан Январь 2020
procedure Form1_MonthCalendar1_OnGetMonthBoldInfo (Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal);
begin
    if (Month=1) and (Year=2020) then
        TdbMonthCalendar(Sender).BoldDays([1,3,4,6,8,10], MonthBoldInfo);
end;




// Выделение дней в календаре, которые присутствуют в таблице БД
procedure Form1_MonthCalendar1_OnGetMonthBoldInfo (Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal);
var
    AStr: array of string;
    AByte: Array of byte;
    sMonth, s: string;
    i, c: integer;
begin
    // получение дней, которые необходимо выделить в календаре
    sMonth := IntToStr(Month);
    if Length(sMonth)=1 then sMonth := '0' + sMonth;
    s := SQLExecute( 'SELECT group_concat(strftime(''%d'', "DateField"), ",") FROM booking WHERE strftime(''%m.%Y'', "DateField" ="'+sMonth+'.'+IntToStr(Year)+'"' );


    if s <> '' then
    begin
        AStr := SplitString(s, ','); // преобразуем строку с днями в массив AStr
        SetLength(AByte, Length(AStr)); // устанавливаем длинную массива AByte


        // преобразовываем массив из строк, в числовой массив
        c := Length(AByte)-1;
        for i := 0 to c do
            if ValidInt(AStr[i]) then AByte[i] := StrToInt(AStr[i]) else AByte[i] := 0;


        TdbMonthCalendar(Sender).BoldDays(AByte, MonthBoldInfo); // передаем массив с днями компоненту, которые необходимо выделить
    end;
end;