Danke Kiffi aber jetzt habe ich schon mit Canvas angefangen und sieht erstmal so aus :
Code: Alles auswählen
EnableExplicit
; Hiermit stellt man den ersten Tag der Woche ein. Ich mag Montag, deswegen eine 1
#firstDayOfTheWeek = 1
LoadFont(0, "Courier New", 10)
LoadFont(1, "Courier New", 10, #PB_Font_Bold)
Procedure showCalendarMonth()
Protected j
Protected date.q
Protected DrawTextX
Protected DrawTextY = -10
If StartDrawing(CanvasOutput(0))
For j = Month(Date()) To 12
date = Date(2018, j, 4, 0, 0, 0)
Protected y.i = Year(date), m.i = Month(date)
; Nimm den ersten Tag des Monats
Protected firstDay.q = Date(y, m, 1, 0, 0, 0)
; Berechne wie viele Tage man zurück gehen muss um auf dem ersten Tag der Woche zu landen
Protected diff.i = -DayOfWeek(firstDay) + #firstDayOfTheWeek
If diff > 0 : diff - 7 : EndIf
; Berechne daraus das erste Datum auf dem Kalenderblatt
Protected firstDayOfCalendarMonth.q = AddDate(firstDay, #PB_Date_Day, diff)
; Nimm den letzten Tag im Monat
Protected lastDay.q = AddDate(AddDate(Date(y, m, 1, 0, 0, 0), #PB_Date_Month, 1), #PB_Date_Day, -1)
; Berechne wie viele Tage man vor gehen muss um auf dem letzten Tag der Woche zu landen
diff = (#firstDayOfTheWeek + 6 - DayOfWeek(lastDay)) % 7
; Berechne daraus das letzte Datum auf dem Kalenderblatt
Protected lastDayOfCalendarMonth.q = AddDate(lastDay, #PB_Date_Day, diff)
; Mache aus der Monatszahl ein Wort
Protected ms.s = StringField("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", m, ",")
; Nur eine Liste von Wochentagen
Protected dList.s = "So,Mo,Di,Mi,Do,Fr,Sa"
; Zeige Monat und Jahr an
DrawTextY + 20
DrawingFont(FontID(1))
DrawText(10, DrawTextY, ms + " - " + y, RGB(0, 0, 0), RGB(255, 255, 255))
; Zeige Liste der Wochentage als erste Zeile an
Protected i.i, line.s = ""
For i = 0 To 6
line + StringField(dList, (#firstDayOfTheWeek + i) % 7 + 1, ",") + " "
Next i
DrawTextY + 20
DrawText(10, DrawTextY, line, RGB(0, 0, 0), RGB(255, 255, 255))
DrawingFont(FontID(0))
; Laufe über alle Tage des Kalenderblatts und schreibe sie raus.
Protected day.q = firstDayOfCalendarMonth
While day <= lastDayOfCalendarMonth
If DayOfWeek(day) = #firstDayOfTheWeek
If day <> firstDayOfCalendarMonth
DrawTextY + 20
DrawText(10, DrawTextY, line, RGB(0, 0, 0), RGB(255, 255, 255))
EndIf
line = ""
Else
line + " "
EndIf
If day < firstDay Or day > lastDay
line + RSet(Str(Day(day)), 2, " ")
Else
line + RSet(Str(Day(day)), 2, " ")
EndIf
day = AddDate(day, #PB_Date_Day, 1)
Wend
DrawTextY + 20
DrawingFont(FontID(0))
DrawText(10, DrawTextY, line, RGB(0, 0, 0), RGB(255, 255, 255))
DrawTextY + 20
Next j
StopDrawing()
EndIf
EndProcedure
Define i
If OpenWindow(0, 0, 0, 200, 830, "Kalender", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, 200, 830, #PB_Canvas_Border)
showCalendarMonth()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow : EndIf