Hallo Leute,
habe mal das Kalender-Gadget von Windows nachgebildet. Mit dem Utility kann man jedes beliebige Programm starten.
- Nun habe ich das Problem das DrawText die Farbe nicht übernimmt!
- Weitere offene Punkte sind die Zentrierung des Textes wegen Dezember
- Wie kann man den Rahmen gänzlich ausblenden
- Hat jemand eine Ahnung wie man den Programmeintrag in der Statusleiste ausblendet
Code: Alles auswählen
; Kalendergadget am Desktop 1366 x 768
; Rechts oben platziert
; Mit Klick auf´s Gadget kann beliebige Datei/Programm aufgerufen werden
; Code teilweise aus Forum erarbeitet!
; Was fehlt ist Zentrierung des Textes im Bild
; Farbauswahl ist nicht korrekt
Enumeration
#Kalender
#ButtonMaster
EndEnumeration
Enumeration
#MyButtonMaster
#ButtonMasterTextImage
EndEnumeration
;{-Image De/Encoder
UsePNGImageDecoder()
;}
Global MyButtonMaster=CatchImage(#MyButtonMaster,?ButtonMaster)
Global Font_DeckblattKlein = FontID(LoadFont(#PB_Any, "Arial Rounded MT Bold", 12,#PB_Font_HighQuality));#PB_Font_Bold|
Global Font_TAGNR = FontID(LoadFont(#PB_Any, "Arial Rounded MT Bold", 56,#PB_Font_HighQuality));#PB_Font_Bold|
Global Font_MonatJahr = FontID(LoadFont(#PB_Any, "Arial Rounded MT Bold", 12,#PB_Font_HighQuality));#PB_Font_Bold|
Global Font_Kalenderwoche = FontID(LoadFont(#PB_Any, "Arial Rounded MT Bold", 8,#PB_Font_HighQuality));#PB_Font_Bold|
Global AktuellTag$ = StringField("Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag", DayOfWeek(Date())+1, ",")
Global AktuelleTagesNr= Day(Date()) ; Gibt '1-31' aus.
Global AktuelleTagesNr$ = Str(AktuelleTagesNr)
Global AktuellMonat$ = StringField("Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember", Month(Date()), ",")
Global AktuellesJahr = Year(Date())
Global AktuellesJahr$ = Str(AktuellesJahr)
Procedure.b GetKW(PJahr.w, PMonat.b, PTag.b)
Protected WT4J.b, MoKW1.b, WTGD.b, MoGD.w, KW.b, Week1Q.w, WT4JNY.b, LastYDay.w
; Wochentag des 4. Januar (Mo.-So.).
WT4J.b = DayOfWeek(Date(PJahr.w, 1, 4, 0, 0, 0))
; Montag = 1 Sonntag = 7.
If WT4J.b = 0 : WT4J.b = 7 : EndIf
; MoKW1.b (Montag der KW1) ist der x'te Tag des Jahres
MoKW1.b = 4-WT4J.b
; Wochentag des gesuchten Datums.
WTGD.b = DayOfWeek(Date(PJahr.w, PMonat.b, PTag.b, 0, 0, 0))
; Montag = 1 Sonntag = 7.
If WTGD.b = 0 : WTGD.b = 7 : EndIf
; Montag in der Kalenderwoche in der das gesuchte Datum liegt,
; ist der x'te Tag des Jahres.
MoGD.w = DayOfYear(Date(PJahr.w, PMonat.b, PTag.b, 0, 0, 0))-WTGD.b
; Beide "Jahrestage" (jeweils Montag also erster KW-Tag) voneinander
; abgezogen geteilt durch 7 + 1 ergibt die KW
KW.b = Int((MoGD.w-MoKW1.b)/7)+1
; Es sei denn: Der gesuchte Tag ist einer der letzten Dezembertage.
; Denn es kann sein, das die letzten Dezembertage in KW1 liegen.
; Wenn es Dezember ist.
If PMonat.b = 12
; Der "Jahrestag" des gesuchten Datums.
Week1Q.w = DayOfYear(Date(PJahr.w, PMonat.b, PTag.b, 0, 0, 0))
; Der Wochentag des 4. Januar des Folgejahres.
WT4JNY.b = DayOfWeek(Date(PJahr.w+1, 1, 4, 0, 0, 0))
; Montag = 1 Sonntag = 7.
If WT4JNY.b = 0 : WT4JNY.b = 7 : EndIf
; Der letzte Tag des Jahres in dem der gesuchte Tag liegt (365 oder 366)
LastYDay.w = DayOfYear(Date(PJahr.w, 12, 31, 0, 0, 0))
; Wenn der Tagesabstand vom gesuchten Tag zum Jahresende kleiner des
; Abstandes des 4. Januar zum Montag der ersten Woche ist, dann liegt
; der entsprechende Tag in der KW1 des Folgejahres.
If LastYDay.w - Week1Q.w < WT4JNY.b -4
KW.b = 1
EndIf
EndIf
; Oder: Der gesuchte Tag ist der 1. bis 3. Januar, die koennen in der letzten
; KW des vorjahres liegen, wenn der 4. Januar z.B. auf einem Montag liegt.
If PMonat.b = 1 And PTag.b < 4
If WT4J.b < WTGD.b
KW.b = GetKW(PJahr.w-1, 12, 31)
EndIf
EndIf
ProcedureReturn KW.b
EndProcedure
OpenWindow(#Kalender, 1220, 13, 126, 139, "Velindos Kalender" ,#PB_Window_BorderLess)
If CreateImage(#ButtonMasterTextImage, 126, 135)
StartDrawing(ImageOutput(#ButtonMasterTextImage))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawImage(ImageID(#MyButtonMaster),0,0)
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_XOr)
DrawingFont(Font_DeckblattKlein)
DrawingFont(Font_MonatJahr)
DrawText(13,15,AktuellMonat$+" "+AktuellesJahr$,$AAB220)
DrawingFont(Font_TAGNR)
DrawText(15,20,AktuelleTagesNr$,$AAB220)
DrawingFont(Font_DeckblattKlein)
DrawText(30,95,AktuellTag$,$AAB220)
;=======================
DrawingFont(Font_Kalenderwoche)
date.l = Date()
KW=GetKW(Year(date), Month(date), Day(date))
KW$=Str(KW)
DrawText(10,115,"Kalenderwoche "+KW$,$F0FAFF,$FACE87)
StopDrawing()
EndIf
ButtonImageGadget(#ButtonMaster, 0, 0, 126, 139, ImageID(#ButtonMasterTextImage))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Gadget = EventGadget()
Select Gadget
Case #ButtonMaster
RunProgram("explorer.exe ",Chr(34)+"F:\BOOK\CodecVelindosBase.db"+Chr(34),"");#PB_Program_Wait
EndSelect
EndSelect
ForEver
;- Images
DataSection
ButtonMaster:
IncludeBinary "F:\Pure@Store\DESIGN_PROFI_STANDARD\VelindosKalender2.png" ;<==== Hier Hintergrundbild mit 126x139 Pixel
EndDataSection