// Getestet mit D4 unter XP//
Mit dem folgenden Code wird erreicht, dass beim Dropdown des
//
TDateTimePicker auch Wochennummern angezeigt werden.
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var
hn: THandle;
rct: TRect;
begin
hn := SendMessage(DateTimePicker1.Handle, $1008, 0, 0);
SetWindowLong(hn, GWL_STYLE, GetWindowLong(hn, GWL_STYLE) or 4);
SendMessage(hn, $1009, 0, integer(@rct));
MoveWindow(hn, 0, 0, rct.Right + 2, rct.Bottom + 2, true);
end;
// Wenn man den Code
noch etwas erweitert, können mehrere Monate
//
(bis 1 Jahr) angezeigt werden. Dabei muss man darauf achten, dass
// nicht zu viele
Monate senkrecht untereinander stehen, da sonst der
// Kalender nach oben
wegklappt und dann zum Teil unleserlich ist.
var
wochennummer: boolean = false;
waagerecht: integer = 6;
senkrecht: integer = 2;
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var
hn: THandle;
rct: TRect;
z: integer;
begin
if (waagerecht * senkrecht <= 12) and (waagerecht * senkrecht > 0)
and (senkrecht <= 4) then begin
case senkrecht of
2: z := 4;
3: z := 7;
4: z := 8;
else z := -4;
end;
hn := SendMessage(DateTimePicker1.Handle, $1008, 0, 0);
if wochennummer then
SetWindowLong(hn, GWL_STYLE, GetWindowLong(hn, GWL_STYLE) or 4);
SendMessage(hn, $1009, 0, integer(@rct));
MoveWindow(hn, 0, 0, (rct.Right + 4) * waagerecht,
(rct.Bottom - z) * senkrecht, true);
end;
end;
|