Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TMonthCalendar


Автор: Dr Smth 22.11.2005, 17:30
Люди, помогите, кто знает, please.
Как работать с этой проклятой процедурой (имеется в виду MonthCalendar.BoldDays()).

Автор: Snowy 22.11.2005, 18:02
В справке пример есть.
Создаешь событие OnGetMonthInfo.
Пишешь обработчик:
Код

procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
  Month: Cardinal; var MonthBoldInfo: Cardinal);
begin
  MonthCalendar1.BoldDays([1,8, 15, 22, 29, Month], MonthBoldInfo);
end;

Дни [1,8, 15, 22, 29, Month] будут толстыми.

Автор: Dr Smth 22.11.2005, 18:52
Спасибо, но так эти дни получаются толстыми в любом месяце, а мне нужно в разных месяцах разные числа выделять. Как этого добиться?

Автор: _hunter 22.11.2005, 19:01
Month менять smile

Автор: Dr Smth 22.11.2005, 19:04
Как его менять-то?

Автор: _hunter 22.11.2005, 19:23
да как угодно...
Цитата
а мне нужно в разных месяцах разные числа выделять

из этого я делаю вывод что они ( месяцы ) у тебя по какому-то алгоритму получаются

Автор: Dr Smth 22.11.2005, 19:38
Собственно говоря, вот что нужно: просто выделить определённые даты. Пользователь щёлкает стрелки на компоненте, изменяя месяц, в соотвествии с этим подсвечиваются нужные даты для данного месяца. Этот Month имеет тип Cardinal, а что дальше - понять не могу. Как для разных месяцев подсвечивать разные даты? Пока не выходит. Пробовал далать проверку на месяц, и в соответствии с ней подсвечивать то, что нужно - не выходит: всё подряд становится жирным, проверка не действует.

Автор: Snowy 22.11.2005, 22:48
Цитата(Dr @ 22.11.2005, 18:52)
Спасибо, но так эти дни получаются толстыми в любом месяце, а мне нужно в разных месяцах разные числа выделять. Как этого добиться?

Цитата(_hunter @ 22.11.2005, 19:01)
Month менять

Нет, Month менять нельзя.
Month нам передается в событие OnGetMonthInfo.
То есть при листании календаря, вызывается это событие.
Ты смотришь, какой нынче месяц тебе передали и раскрашиваешь как тебе нужно.
Если ты заметил, то, в приведенном мной примере, не все месяцы раскрашиваются одинаково.
Вегда еще и красится число, совпадающее с номером месяца:
11 ноября, 12 декабля и т.п.
Месяц тебе уже дан свыше. Тебе нужно в обработчике только красить в соответствии со значением Month.

Автор: ~FoX~ 23.11.2005, 10:57
Я бы сделал как нибудь так:

Код

type TMBoldDay = array[1..12, 1..3] of Cardinal;

const
  D: TMBoldDay =
                   ((1, 8, 15),
                    (2, 12, 18),
                    (3, 7, 6),
                    (4, 5, 9),
                    (1, 8, 15),
                    (2, 12, 18),
                    (3, 7, 6),
                    (4, 5, 9),
                    (1, 8, 15),
                    (2, 12, 18),
                    (3, 7, 6),
                    (4, 5, 9)); 
//.....................
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
  Month: Cardinal; var MonthBoldInfo: Cardinal);
begin
  MonthCalendar1.BoldDays(D[Month+1], MonthBoldInfo);
end;

Автор: Dr Smth 25.11.2005, 17:02
Спасибо, ребята, это уже кое-что. В последнем коде только +1 не надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)