Da ich grade mit einem ähnlichen Problem beschäftigt bin und über diesen Thread gestolpert bin, wollte ich kurz hinterlassen was ich bereits als mögliche Lösung entdeckt habe. Auf QualityCentral findet man folgenden Workaround:
http://qc.embarcadero.com/wc/qcmain.aspx?d=26318
Delphi-Quellcode:
//Edit ComCtrls.pas to change the TOnGetMonthInfoEvent type definition:
TOnGetMonthInfoEvent = procedure(Sender: TObject; Month, Year: LongWord; var MonthBoldInfo: LongWord) of object;
//and change the (private) TMonthCalendar.CNNotify method adding the lines with comments:
procedure TMonthCalendar.CNNotify(var Message: TWMNotifyMC);
var
ST: TSystemTime;
I, MonthNo, YearNo: Integer; // Add year
{$IF DEFINED(CLR)}
DayState: TNMDayState;
CurState: TMonthDayStateArray;
{$ELSE}
DayState: PNMDayState;
CurState: PMonthDayState;
{$IFEND}
begin
with Message, NMHdr{$IFNDEF CLR}^{$ENDIF} do
begin
case code of
MCN_GETDAYSTATE:
begin
DayState := NMDayState;
with DayState{$IFNDEF CLR}^{$ENDIF} do
begin
{$IF DEFINED(CLR)}
SetLength(CurState, cDayState);
{$ELSE}
FillChar(prgDayState^, cDayState * SizeOf(TMonthDayState), 0);
{$IFEND}
if Assigned(FOnGetMonthInfo) then
begin
{$IF DEFINED(CLR)}
CurState := TMonthDayStateArray(NativeBufToArray(prgDayState, CurState));
{$IFEND}
for I := 0 to cDayState - 1 do
begin
YearNo := stStart.wYear; // Get year
MonthNo := stStart.wMonth + I;
if MonthNo > 12 then
begin
Inc(YearNo); // Update year
MonthNo := MonthNo - 12;
end;
{$IF DEFINED(CLR)}
FOnGetMonthInfo(Self, MonthNo, YearNo, CurState[I]); // Pass year
{$ELSE}
FOnGetMonthInfo(Self, MonthNo, YearNo, CurState^); // Pass year
Inc(CurState);
{$IFEND}
end;
end;
{$IF DEFINED(CLR)}
prgDayState := ArrayToNativeBuf(CurState, prgDayState);
NmDayState := DayState;
{$IFEND}
end;
end;
MCN_SELECT, MCN_SELCHANGE:
with NMSelChange{$IFNDEF CLR}^{$ENDIF} do
begin
ST := stSelStart;
if not IsBlankSysTime(ST) then
FDateTime := SystemTimeToDateTime(ST);
if FMultiSelect then
begin
ST := stSelEnd;
if not IsBlankSysTime(ST) then
FEndDate := SystemTimeToDateTime(ST);
end;
end;
end;
end;
inherited;
end;
anstatt die
VCL Quellen zu überschreiben kann man natürlich einfach eine eigene Komponente ableiten...
entschuldigt bitte die Threadnekromantie, aber anderen Suchenden ist damit evtl geholfen