| Scalabium Software | |
| Knowledge for your independence'. | |
|  Home  Delphi and C++Builder
        tips | 
| #164: How can I display week numbers in TDateTimePicker? | 
| 
 | Standard TDateTimePicker component allow to display the week numbers in dropdowned panel (where calendar displayed with navigator). For some reason (maybe forgot) the Borland didn't publish this feature and today I want to demonstrate how you may activate this feature. All what you need is to use the next code in OnDropDown event: procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
const
  MCM_GETMAXTODAYWIDTH  = MCM_FIRST + 21;
var
  Style: LongInt;
  hDTP: THandle;
  r: TRect;
  intTodayWidth: Integer;
begin
  {to get a handle of calendar}
  hDTP := DateTime_GetMonthCal(DateTimePicker1.Handle);
  {change a style}
  Style := GetWindowLong(hDTP, GWL_STYLE);
  SetWindowLong(hDTP,  GWL_STYLE, Style or MCS_WEEKNUMBERS);
  {now we must change the width for calendar because week numbers shifted all strings}
  {1. to get the required rect }
  r := Rect(0, 0, 0, 0);
  SendMessage(hDTP, MCM_GETMINREQRECT, 0, Longint(@r));
  {2. to get the maximum width of the "today" string}
  intTodayWidth := SendMessage(hDTP, MCM_GETMAXTODAYWIDTH, 0, 0);
  {3. adjust rect width to fit the "today" string }
  if intTodayWidth > r.Right then
    r.Right := intTodayWidth;
  {4. to set new the height and width }
  SetWindowPos(hDTP, 0,
              r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top,
              SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOZORDER);
end;
As you see, I include the MCS_WEEKNUMBERS style. It's easy and I hope will be useful for your end-users. 
 | 
|       | Copyright© 1998-2025, Scalabium
        Software. All rights reserved. |