![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выделение дней в календаре [D6, D7, WinXP]
Jetus © (2004-08-26 23:48:00)Доброе время суток! Уважаемые господа-мастера, подскажите, как бы это умудриться и выделить субботы и воскрксения в TCalendar другим цветом?
Sour Smile (2005-02-07 16:42:00) [1]> NAlexey © (27.08.04 13:22) [1]
> Ч.з сообщение MCN_GETDAYSTATE.
MCN_GETDAYSTATE это для компонента TMonthCalendar, а не для TCalendar (наследник TCustomGrid о котором писал Jetus), да и выделяет он не цветом, а жирным шрифтом. И несмотря на то, что это сообщение компонент TMonthCalendar уже обрабатывает в событии OnGetMonthInfo, для этой цели наверно таки прийдётся писать своего наследника, так как на вход этого события подаётся только номер месяца, а вот год Борланды почемуто решили не сообщать (без года понятное дело невозможно вычислить день недели).
А по поводу компоненты TCalendar - к сожалению тоже необходимо создать потомка и переписать метод DrawCell, но здесь безусловно больше свободы действий. Например так:
uses
..., Graphics;
type
TNewCalendar = class(TCalendar)
protected
procedureDrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
end;
...
procedureTNewCalendar.DrawCell(ACol, ARow: Integer; ARect: TRect;
AState: TGridDrawState);
var
TheText: String;
AYear, AMonth, ADay: Word;
DrawDay: Integer;
begin
TheText := CellText[ACol, ARow];
ifTheText='' then
begin
Canvas.Brush.Color := clGray;
Canvas.Font.Color := Font.Color;
end else
ifTryStrToInt(TheText, DrawDay) then
begin
DecodeDate(CalendarDate, AYear, AMonth, ADay);
if(Trunc(EncodeDate(AYear, AMonth, DrawDay))mod 7) < 2 then
begin
Canvas.Brush.Color := clRed;
Canvas.Font.Color := clWhite;
end else
begin
Canvas.Brush.Color := Color;
Canvas.Font.Color := Font.Color;
end;
end;
inherited;
end;
Jetus (2004-08-28 13:35:00) [2]Спасибо, а можно примерчик, а?
NAlexey (2004-08-27 13:22:00) [3]Ч.з сообщение MCN_GETDAYSTATE.