| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 64:
 65:
 66:
 67:
 68:
 69:
 70:
 71:
 72:
 73:
 74:
 75:
 76:
 77:
 78:
 79:
 80:
 81:
 82:
 83:
 84:
 85:
 86:
 87:
 88:
 89:
 90:
 91:
 92:
 93:
 94:
 95:
 96:
 97:
 98:
 99:
 100:
 101:
 102:
 103:
 104:
 105:
 106:
 107:
 108:
 109:
 110:
 111:
 112:
 113:
 114:
 115:
 116:
 117:
 118:
 119:
 120:
 121:
 122:
 123:
 124:
 125:
 126:
 127:
 128:
 129:
 
 | unit TRM_DateTimePicker;
 interface
 
 uses
 Windows, Messages, SysUtils, Classes, Controls, Forms, ComCtrls, Dialogs, ExtCtrls, CommCtrl;
 
 type
 TTRM_DateTimePicker = class(TDateTimePicker)
 private
 
 FOnMouseLeave: TNotifyEvent;
 FOnMouseEnter: TNotifyEvent;
 
 procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
 procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
 
 procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
 protected
 
 procedure DoMouseEnter; dynamic;
 procedure DoMouseLeave; dynamic;
 
 procedure DoDropDown; dynamic;
 public
 
 published
 
 property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
 property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
 
 property WeekNumbers;
 end;
 
 procedure Register;
 
 implementation
 
 procedure Register;
 begin
 RegisterComponents('TRM', [TTRM_DateTimePicker]);
 end;
 
 
 
 procedure TTRM_DateTimePicker.CMMouseEnter(var msg: TMessage);
 begin
 DoMouseEnter;
 end;
 
 procedure TTRM_DateTimePicker.CMMouseLeave(var msg: TMessage);
 begin
 DoMouseLeave;
 end;
 
 procedure TTRM_DateTimePicker.CNNotify(var Message: TWMNotify);
 begin
 if Message.NMHdr.code = DTN_DROPDOWN then
 begin
 if Self.WeekNumbers then
 DoDropDown;
 end;
 inherited;
 end;
 
 procedure TTRM_DateTimePicker.DoMouseEnter;
 begin
 if Assigned(FOnMouseEnter) then
 FOnMouseEnter(Self);
 end;
 
 procedure TTRM_DateTimePicker.DoMouseLeave;
 begin
 if Assigned(FOnMouseLeave) then
 FOnMouseLeave(Self);
 end;
 
 procedure TTRM_DateTimePicker.DoDropDown;
 const
 MCM_GETMAXTODAYWIDTH = MCM_FIRST + 21;
 var
 Style: LongInt;
 hDTP: THandle;
 r: TRect;
 intTodayWidth: Integer;
 
 cname: array [0 .. 256] of Char;
 begin
 
 inherited;
 
 hDTP := DateTime_GetMonthCal(Self.Handle);
 
 Style := GetWindowLong(hDTP, GWL_STYLE);
 SetWindowLong(hDTP, GWL_STYLE, Style or MCS_WEEKNUMBERS);
 
 r := Rect(0, 0, 0, 0);
 SendMessage(hDTP, MCM_GETMINREQRECT, 0, LongInt(@r));
 
 intTodayWidth := SendMessage(hDTP, MCM_GETMAXTODAYWIDTH, 0, 0);
 
 if intTodayWidth > r.Right then
 r.Right := intTodayWidth;
 
 GetClassName(GetParent(hDTP), cname, sizeof(cname));
 if AnsiSameText(cname, 'DropDown') then
 begin
 hDTP := GetParent(hDTP);
 
 inc(r.Right, 6);
 inc(r.Bottom, 6);
 end;
 
 MoveWindow(hDTP, r.Left, r.Top, r.Right - r.Left, r.Bottom - r.Top, true);
 
 end;
 
 end.
 |