Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выделение дней в календаре [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо