Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#17

Re: Daten bei TMonthCalendar markieren

  Alt 14. Dez 2007, 20:33
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
Daniel Marschall
  Mit Zitat antworten Zitat