Hallo #,
mit folgendem Code (aufgerufen im OnDropDown)
kann zur Laufzeit bei einem DateTime Picker
links die Kalenderwoche zusätzlich angezeigt werden.
Delphi-Quellcode:
{
name:
DTP_AddWeekNumber
usage:
to add a week number column to the calendar
parameter:
theDTP
return parameter:
return:
notes:
- method mustbe called in OnDropDown
dunit: no
}
procedure DTP_AddWeekNumber(theDTP: TDateTimePicker);
const
MCM_GETMAXTODAYWIDTH = MCM_FIRST + 21;
var
Style: LongInt;
hDTP: THandle;
r: TRect;
intTodayWidth: Integer;
begin
// Notlösung unter Vista
// if IsWindowsVista then Exit;
{to get a handle of calendar}
hDTP := DateTime_GetMonthCal(theDTP.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;
{ DTP_AddWeekNumber }
Unter Vista wird aber der Sonntag nicht mehr komplett angezeigt ;(
Hat jemand die KW-Anzeige unter Vista schon zum Laufen bekommen ?
Meine "Notlösung": unter Vista nicht anzeigen ;(
Heiko