Code: Alles auswählen
;PureBasic 4.0 Beta6
z=0
d=0
Enumeration
#window
#kalendergadget
#Kalimg
EndEnumeration
;---Diese Procedure ermittelt ob das angebene Jahr(j) ein Schaltjahr ist
Procedure IsLeapyear(j)
Protected d.l
If ((j % 4) = 0 And (j % 100)) <> 0 Or (j % 400) = 0
d = 1
EndIf
ProcedureReturn d
EndProcedure
;----------------------------------------------------------------------
;---Diese Procedure ermittelt die Anzahl der Tage des Monats(m) im angegebenen Jahr(j)
Procedure GetNumOfDaysPerMonth(m, j)
Protected d.l
d = 30 + (m + m / 8) % 2 - 2 * ((m + 10) / 12 - (m + 9) / 12)
If m = 2
If IsLeapyear(j)
d + 1
EndIf
EndIf
ProcedureReturn d
EndProcedure
;------------------------------------------------------------------------
;---Diese Procedure erzeugt ein Image(Calenderid) auf dem mit dem angegebenen Font(CalenderFont)
;---ein Kalenderblatt welches den Monat des angegebenen Jahres anzeigt
Procedure CalenderImagegadget(Calenderid,CalenderFont.s,Jahr,Monat)
textfont1 = LoadFont(#PB_Any,CalenderFont, 12)
textid1=FontID(textfont1)
Dim months.l(12)
;Kalendertage für alle 12 Monate abfragen,eigentlich nicht nötig für den eingebenen Monat würde reichen
For a=1 To 12
months(a)= GetNumOfDaysPerMonth(a,Jahr)
Next a
;--------------------------------------------------------------------------------
Dim month_text.s(12)
month_text.s(1)="Januar"
month_text.s(2)="Februar"
month_text.s(3)="März"
month_text.s(4)="April"
month_text.s(5)="Mai"
month_text.s(6)="Juni"
month_text.s(7)="Juli"
month_text.s(8)="August"
month_text.s(9)="September"
month_text.s(10)="Oktober"
month_text.s(11)="November"
month_text.s(12)="Dezember"
wochentage.s="Mo Di Mi Do Fr Sa So"
For a=1 To 12
Next a
Dayplace= DayOfWeek(Date(Jahr,Monat,1,0,0,0))
If Dayplace=0
Dayplace=7
EndIf
If Calenderid = #PB_Any
Calenderid=CreateImage(#PB_Any,150,160,24)
Else
CreateImage(Calenderid,150,160,24)
EndIf
If Calenderid
If StartDrawing(ImageOutput(Calenderid))
DrawingFont(textid1)
DrawingMode(1)
FrontColor(RGB(255,255,255))
Box(0,0,150,20,RGB(51,102,153))
DrawText((150/2)-(TextWidth(month_text(Monat))/2),0,month_text(Monat))
Box(0,20,150,20,RGB(172,193,210))
DrawText((150/2)-(TextWidth(wochentage)/2),20,wochentage)
Box(0,40,150,120,RGB(255,255,255))
FrontColor(RGB(0,0,0))
;Kästchen Zeichnen
For a=4 To 150 Step 21
Line(a,40,0,160)
Next a
For a=40 To 160 Step 20
Line(0,a,150,0)
Next a
;------------------------
;Kalendertage auf das Image zeichnen
For c=40 To 160 Step 20
For b=5 To 150 Step 21.5
d=d+1
If z<months(Monat) And d>Dayplace-1
z=z+1
DrawText(b,c,Str(z))
EndIf
Next b
Next c
;-------------------------------------
StopDrawing()
ProcedureReturn Calenderid
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
;-----------------------------------------------------------
;-----------------------------------------------------------
;Beispiel -----------------------------------------
;Calender=CalenderImagegadget(#PB_Any,"Times",2006,4);Kalenderblatt für April erzeugen
CalenderImagegadget(#Kalimg,"Times",2006,4);Kalenderblatt für April erzeugen
;-
If OpenWindow(#window,0,0,300,200,"lolo")
If CreateGadgetList(WindowID(#window))
;ImageGadget(#kalendergadget,0,0,150,70,ImageID(Calender));Kalenderblat auf einem Imagegadget ausgeben
ImageGadget(#kalendergadget,0,0,150,70,ImageID(#Kalimg));Kalenderblat auf einem Imagegadget ausgeben
EndIf
EndIf
Repeat
event=WaitWindowEvent()
windowid=EventWindow()
gadgetid=EventGadget()
EventType=EventType()
Until event=#PB_Event_CloseWindow
End
;---------------------------------