Nun ja, es ist eigentlich kein Hexenwerk, sondern nur logisches Vorgehen.
Delphi-Quellcode:
procedure TStyledCalendar.FillWeeksNumbers;
var
I: Integer;
CaptionControl: ICaption;
LMonday : TDate;
begin
if FWeeks = nil then
Exit;
FWeeks.Visible := Model.WeekNumbers;
// Vom Monatsanfang den Wochenanfang ermitteln
LMonday := StartOfTheWeek( StartOfTheMonth( FDateTime ) );
// für jede Zeile
for I := 0 to FWeeks.ControlsCount-1 do
begin
// die Wochennummer ermitteln
if Supports(FWeeks.Controls[I], ICaption, CaptionControl) then
CaptionControl.Text := WeekOfTheYear(lMonday).ToString;
// Tag eine Woche weiterzählen
lMonday := IncWeek( lMonday );
end;
end;
Sorry for being short
Für die Überprüfung kann man auch gerne dieses kleine Konsolen-Programm starten (zeigt das Kalandar-Blatt) für den aktuellen Monat an.
Delphi-Quellcode:
program MonthCalendar;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.DateUtils,
System.SysUtils;
procedure OutputMonthCalendarFor(
const aDate: TDate; aRows: Integer = 6; aWeekNumbers: Boolean = true );
var
lFirstMonday: TDate;
lDay : TDate;
row, day : Integer;
begin
lFirstMonday := StartOfTheWeek( StartOfTheMonth( aDate ) );
if aWeekNumbers
then
write( '
' );
WriteLn( FormatDateTime( '
mmmm yyyy', aDate ):26 );
WriteLn;
lDay := lFirstMonday;
if aWeekNumbers
then
write( '
' );
for day := 1
to 7
do
begin
write( FormatDateTime( '
" "ddd" "', lDay ) );
lDay := IncDay( lDay, 1 );
end;
WriteLn;
lDay := lFirstMonday;
for row := 0
to aRows - 1
do
begin
if aWeekNumbers
then
write( WeekOfTheYear( lDay ):2, '
' );
for day := 0
to 6
do
begin
if lDay = DateOf( aDate )
then
write( '
<', DayOf( lDay ):2, '
>' )
else
write( '
', DayOf( lDay ):2, '
' );
lDay := IncDay( lDay, 1 );
end;
WriteLn;
end;
end;
begin
try
OutputMonthCalendarFor( Date );
except
on E:
Exception do
WriteLn( E.ClassName, '
: ', E.
Message );
end;
ReadLn;
end.
Sieht dann so aus
Code:
Januar 2016
Mo Di Mi Do Fr Sa So
53 28 29 30 31 1 2 3
1 4 5 < 6> 7 8 9 10
2 11 12 13 14 15 16 17
3 18 19 20 21 22 23 24
4 25 26 27 28 29 30 31
5 1 2 3 4 5 6 7
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)