Het component TDateTimePicker heeft in Delphi geen property weeknumbers. Het gekke is dat het component MonthCalendar die wel heeft. Als je de combobox uitklapt (TDateTimePicker) krijg je een MonthCalendar te zien. Dus waarom zit die niet in die DateTimePicker
(waarschijnlijk omdat microsoft het gemaakt heeft
)
Maar deze 2 componenten zijn volgens mij standaard windows contols, want ik heb nergens code gezien in de vcl source waar ze getekend worden.
Nu wil ik dus perse wel weeknummers hebben. Nu dacht ik dat ik gewoon zelf een nieuw component maak en die baseer op TDateTimePicker en vervolgens een property weeknumbers aanmaak:
Maar dit wil jammer genoeg niet werken. Zal dit nooit gaan werken (omdat het een windows control is en die het niet toestaat bijv) of is het wel mogelijk?
Maar deze 2 componenten zijn volgens mij standaard windows contols, want ik heb nergens code gezien in de vcl source waar ze getekend worden.
Nu wil ik dus perse wel weeknummers hebben. Nu dacht ik dat ik gewoon zelf een nieuw component maak en die baseer op TDateTimePicker en vervolgens een property weeknumbers aanmaak:
code:
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
| unit DateTimePickerEx;
interface
uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ComCtrls, CommCtrl;
type
TDateTimePickerEx = class(TDateTimePicker)
private
FWeekNumbers: Boolean;
procedure SetWeekNumbers(Value: Boolean);
procedure SetComCtlStyle(Ctl: TWinControl; Value: Integer; UseStyle: Boolean);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property WeekNumbers: Boolean read FWeekNumbers write SetWeekNumbers default False;
end;
procedure Register;
implementation
procedure TDateTimePickerEx.SetComCtlStyle(Ctl: TWinControl;
Value: Integer; UseStyle: Boolean);
var
Style: Integer;
begin
if Ctl.HandleAllocated then
begin
Style := GetWindowLong(Ctl.Handle, GWL_STYLE);
if not UseStyle then Style := Style and not Value
else Style := Style or Value;
SetWindowLong(Ctl.Handle, GWL_STYLE, Style);
end;
end;
procedure TDateTimePickerEx.SetWeekNumbers(Value: Boolean);
begin
if FWeekNumbers <> Value then
begin
FWeekNumbers := Value;
SetComCtlStyle(Self, MCS_WEEKNUMBERS, Value);
end;
end;
procedure Register;
begin
RegisterComponents('Additional', [TDateTimePickerEx]);
end;
end. |
Maar dit wil jammer genoeg niet werken. Zal dit nooit gaan werken (omdat het een windows control is en die het niet toestaat bijv) of is het wel mogelijk?