Danke nochmal für die Hilfe. Ich habe es nun mit dem CN_NOTIFY lösen können.
Über farbliche Markierungen (OwnerDraw?) mache ich mir zu einem anderen Zeitpunkt gedanken.
Delphi-Quellcode:
type
TDynArrayLongWord = array of LongWord;
TForm1 = class(TForm)
MonthCalendar1: TMonthCalendar;
Memo1: TMemo;
procedure MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
procedure FormCreate(Sender: TObject);
private
OriginalCalendarWindowProc: TWndMethod;
jahr_zusatz: integer;
procedure CalendarWindowProcEx(var Message: TMessage);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CalendarWindowProcEx(var Message: TMessage);
begin
if Message.Msg = CN_NOTIFY then
begin
jahr_zusatz := 0;
end;
OriginalCalendarWindowProc(Message);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OriginalCalendarWindowProc := MonthCalendar1.WindowProc;
MonthCalendar1.WindowProc := CalendarWindowProcEx;
end;
function MyMonthMarker(Month, Year: integer): TDynArrayLongWord;
begin
// Zum Test
SetLength(result, 2);
result[0] := month;
result[1] := year-2000;
end;
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
var MonthBoldInfo: Cardinal);
var
jahr, monat, tag: word;
begin
DecodeDate(monthcalendar1.Date, jahr, monat, tag);
(Sender as TMonthCalendar).BoldDays(MyMonthMarker(Month, jahr+jahr_zusatz), MonthBoldInfo);
if month = 12 then inc(jahr_zusatz);
end;
Gruß
blackdrake