Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Показывать номера недели в TDateTimePicker

Delphi , Компоненты и Классы , TDateTimePicker

Показывать номера недели в TDateTimePicker

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   CommCtrl;

 type
   THackCommonCalendar = class(TCommonCalendar);

   {...}

 procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
 var
   Style: Integer;
   ReqRect: TRect;
   MaxTodayWidth: Integer;
 begin
   with THackCommonCalendar(Sender as TDateTimePicker) do
   begin
     // set style to include week numbers 
    Style := GetWindowLong(CalendarHandle, GWL_STYLE);
     SetWindowLong(CalendarHandle, GWL_STYLE, Style or MCS_WEEKNUMBERS);
     FillChar(ReqRect, SizeOf(TRect), 0);
     // get required rect 
    Win32Check(MonthCal_GetMinReqRect(CalendarHandle, ReqRect));
     // get max today string width 
    MaxTodayWidth := MonthCal_GetMaxTodayWidth(CalendarHandle);
     // adjust rect width to fit today string 
    if MaxTodayWidth > ReqRect.Right then
       ReqRect.Right := MaxTodayWidth;
     // set new height & width 
    SetWindowPos(CalendarHandle, 0, 0, 0, ReqRect.Right, ReqRect.Bottom,
       SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOZORDER);
   end;
 end;

Программный код, который я предоставил, является обходом для отображения номеров недель в контроле TDateTimePicker в Delphi. Вот подробное описание того, что он делает:

  1. Класс THackCommonCalendar наследуется от абстрактной базовой класса TCommonCalendar, который является общим базисом для общих календарных контролов, включая TDateTimePicker.
  2. В обработчике события DateTimePicker1DropDown код доступ к underlying объекту TCommonCalendar с помощью кастинга.
  3. Он устанавливает стиль календаря для включения номеров недель, вызывая SetWindowLong с индексом GWL_STYLE и добавляя флаг MCS_WEEKNUMBERS.
  4. Код затем рассчитывает требуемый прямоугольник для контрола календаря, вызывая MonthCal_GetMinReqRect.
  5. Он получает максимальную ширину строки сегодня в контроле календаря, вызывая MonthCal_GetMaxTodayWidth.
  6. Если строка сегодня шире расчитанного прямоугольника, код adjusts прямоугольник для подгонки строки сегодня.
  7. Наконец, код устанавливает новые высоту и ширину контрола календаря с помощью SetWindowPos.

Обход необходим потому, что контрол TDateTimePicker не поддерживает отображение номеров недель по умолчанию.

Вот альтернативное решение, использующее подход к рисованию: Вместо изменения стиля underlying окна или adjustments прямоугольника размера, вы можете нарисовать номера недель сами в контроле TDateTimePicker. Вы можете переопределить метод DrawItem и добавить код для рисования номеров недель. Этот подход может требовать больше усилий, но предоставляет более гибкость.

Вот простой пример:

procedure TForm1.DateTimePicker1DrawItem(Control: TCustomControl; Rect: TRect;
  State: TDrawState);
begin
   // Рисуем номера недель
  with THackCommonCalendar(DateTimePicker1) do
  begin
    Canvas.Font.Color := clWindowText;
    Canvas.Font.Size := 8;
    for i := 1 to GetWeekCount() do
    begin
      Canvas.TextOut(Rect.Left + (i - 1) * Rect.Width / GetWeekCount(), Rect.Top,
        IntToStr(i));
    end;
  end;
end;

Код рисует номера недель в контроле TDateTimePicker, переопределяя метод DrawItem. Вам нужно будет adjust позицию рисования и настройки шрифта в соответствии с вашими требованиями.

Обратите внимание, что это только простой пример, и вы можете хотеть customize appearance номеров недель далее.

В статье описывается модификация компонента TDateTimePicker для отображения номеров недели в календаре.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDateTimePicker ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-02 04:06:01/0.0034589767456055/0