DrawText übernimmt nicht die Farbauswahl

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

DrawText übernimmt nicht die Farbauswahl

Beitrag von Velindos »

DrawText übernimmt nicht die Farbauswahl

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
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: DrawText übernimmt nicht die Farbauswahl

Beitrag von STARGÅTE »

Auf den ersten Blick würde ich sagen, dass liegt daran, dass du #PB_2DDrawing_XOr als DrawingMode nutzt.
Das heißt, er invertiert einfach da wo der Text steht, die aktuelle Farbe.
Der Color-Parameter wird in dem Modus also ignoriert.
Velindos hat geschrieben:Weitere offene Punkte sind die Zentrierung des Textes wegen Dezember
Da kannst du X einfach um -TextWidth(Text)/2 verschiben
Velindos hat geschrieben:Wie kann man den Rahmen gänzlich ausblenden
Welcher Rahmen?
Velindos hat geschrieben:Hat jemand eine Ahnung wie man den Programmeintrag in der Statusleiste ausblendet
Du erstellst ein ElternFenster welches unsichtbar (invisible) ist und bindest daran, dein echtes Fenster mit dem Eltern-Fenster als ParentWindow.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: DrawText übernimmt nicht die Farbauswahl

Beitrag von Velindos »

Hallo Stargate,
besten Dank für deine Vorschläge, habe sie bereits eingarbeitet.
- DrawText funktioniert
- Zentrierung funktioniert
- Rahmenausblenden - noch nicht ganz
- Ausblenden in Taskleiste - noch nicht

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!
; Rahemen lässt sich nicht ganz ausblenden

Enumeration 
  #KalenderMan = 0
  #Kalender = 1
  #ButtonMaster
EndEnumeration

Enumeration
  #MyButtonMaster
  #ButtonMasterTextImage
EndEnumeration

;{-Image De/Encoder
UsePNGImageDecoder()
;}
Global MyButtonMaster=CatchImage(#MyButtonMaster,?ButtonMaster)

Global Font_TAG = FontID(LoadFont(#PB_Any, "Calibri", 12,#PB_Font_Bold|#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, "Times New Roman ", 12,#PB_Font_Bold|#PB_Font_HighQuality));#PB_Font_Bold|
Global Font_Kalenderwoche = FontID(LoadFont(#PB_Any, "Arial Rounded MT Bold", 8,#PB_Font_Bold|#PB_Font_HighQuality));

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)

Global AktuellMonatJahr$
Global KalenderPosition
Global KalenderTag
Global KalenderTagPosition
Global Kalenderwocheposition

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(#KalenderMan, 1220, 13, 126, 139, "Parent", #PB_Window_Invisible)
OpenWindow(#Kalender,1220, 13, 126, 139, "Child", #PB_Window_BorderLess,WindowID(#KalenderMan))
If CreateImage(#ButtonMasterTextImage, 126, 135)
  StartDrawing(ImageOutput(#ButtonMasterTextImage))
  DrawingMode(#PB_2DDrawing_AllChannels)
  DrawImage(ImageID(#MyButtonMaster),0,0)
  DrawingMode(#PB_2DDrawing_Transparent)
  ;=======================
  DrawingFont(Font_MonatJahr)
  AktuellMonatJahr$=AktuellMonat$+" "+AktuellesJahr$
  KalenderPosition= 63 - TextWidth(AktuellMonatJahr$)/2
  DrawText(KalenderPosition,17,AktuellMonatJahr$,$AAB220)
  ;=======================
  DrawingFont(Font_TAGNR)
  KalenderTag = 63 - TextWidth(AktuelleTagesNr$)/2
  DrawText(KalenderTag,20,AktuelleTagesNr$,$AAB220)
  ;=======================
  DrawingFont(Font_TAG)
  KalenderTagPosition= 63 - TextWidth(AktuellTag$)/2
  DrawText(KalenderTagPosition,95,AktuellTag$,$AAB220)
  ;=======================
  DrawingFont(Font_Kalenderwoche)
  date.l = Date()
  KW=GetKW(Year(date), Month(date), Day(date))
  KW$=" KW "+Str(KW)
  Kalenderwocheposition= 63 - TextWidth(KW$)/2
  DrawText(Kalenderwocheposition,115,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\VelindosKalender7.png"      ;<==== Hier Hintergrundbild mit 126x139 Pixel
EndDataSection
Nochmals Danke für deine prompte Unterstützung!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: DrawText übernimmt nicht die Farbauswahl

Beitrag von STARGÅTE »

"Ausblenden in Taskleiste" funktioniert doch, ich sehr zumindest unter Windows 7 keine Tab mehr.

Zu dem Rahmen. Du kannst natürlich statt des ButtonGadget einfach ein CanvasGadget nutzen.
Da sit das Image gleich mit drin, und ob es gedrückt wurde, kannst du mit EVentType() abfragen.

Code: Alles auswählen

OpenWindow(#KalenderMan, 1220, 13, 126, 139, "Parent", #PB_Window_Invisible)
OpenWindow(#Kalender,1220, 13, 126, 139, "Child", #PB_Window_BorderLess,WindowID(#KalenderMan))
CanvasGadget(#ButtonMaster, 0, 0, 126, 139)
If StartDrawing(CanvasOutput(#ButtonMaster))
  DrawingMode(#PB_2DDrawing_AllChannels)
  DrawImage(ImageID(#MyButtonMaster),0,0)
  DrawingMode(#PB_2DDrawing_Transparent)

Code: Alles auswählen

      Select Gadget
        Case #ButtonMaster
          If EventType() = #PB_EventType_LeftClick
            RunProgram("explorer.exe ",Chr(34)+"F:\BOOK\CodecVelindosBase.db"+Chr(34),"");#PB_Program_Wait
          EndIf
      EndSelect
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: DrawText übernimmt nicht die Farbauswahl

Beitrag von Velindos »

Danke Stargate!
- Ausblenden in Taskleiste = Funktioniert
* Habe natürlich die Sache übersehen weil ich Verknüpfung hatte!!!

- Zum Rahmen, habe deine Sache eingearbeitet und funktioniert

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!
; Rahemen lässt sich nicht ganz ausblenden

Enumeration 
  #KalenderMan = 0
  #Kalender = 1
  #ButtonMaster
EndEnumeration

Enumeration
  #MyButtonMaster
  #ButtonMasterTextImage
EndEnumeration

;{-Image De/Encoder
UsePNGImageDecoder()
;}
Global MyButtonMaster=CatchImage(#MyButtonMaster,?ButtonMaster)

Global Font_TAG = FontID(LoadFont(#PB_Any, "Calibri", 12,#PB_Font_Bold|#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, "Times New Roman ", 12,#PB_Font_Bold|#PB_Font_HighQuality));#PB_Font_Bold|
Global Font_Kalenderwoche = FontID(LoadFont(#PB_Any, "Arial Rounded MT Bold", 8,#PB_Font_Bold|#PB_Font_HighQuality));

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)

Global AktuellMonatJahr$
Global KalenderPosition
Global KalenderTag
Global KalenderTagPosition
Global Kalenderwocheposition

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(#KalenderMan, 1220, 13, 126, 139, "Parent", #PB_Window_Invisible)
OpenWindow(#Kalender,1220, 13, 126, 139, "Child", #PB_Window_BorderLess,WindowID(#KalenderMan))
CanvasGadget(#ButtonMaster, 0, 0, 126, 139)

If StartDrawing(CanvasOutput(#ButtonMaster))
  DrawingMode(#PB_2DDrawing_AllChannels)
  DrawImage(ImageID(#MyButtonMaster),0,0)
  DrawingMode(#PB_2DDrawing_Transparent)
  ;=======================
  DrawingFont(Font_MonatJahr)
  AktuellMonatJahr$=AktuellMonat$+" "+AktuellesJahr$
  KalenderPosition= 63 - TextWidth(AktuellMonatJahr$)/2
  DrawText(KalenderPosition,17,AktuellMonatJahr$,$AAB220)
  ;=======================
  DrawingFont(Font_TAGNR)
  KalenderTag = 63 - TextWidth(AktuelleTagesNr$)/2
  DrawText(KalenderTag,20,AktuelleTagesNr$,$AAB220)
  ;=======================
  DrawingFont(Font_TAG)
  KalenderTagPosition= 63 - TextWidth(AktuellTag$)/2
  DrawText(KalenderTagPosition,95,AktuellTag$,$AAB220)
  ;=======================
  DrawingFont(Font_Kalenderwoche)
  date.l = Date()
  KW=GetKW(Year(date), Month(date), Day(date))
  KW$=" KW "+Str(KW)
  Kalenderwocheposition= 63 - TextWidth(KW$)/2
  DrawText(Kalenderwocheposition,115,KW$,$F0FAFF,$FACE87)
  StopDrawing() 
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Gadget = EventGadget()
      Select Gadget
        Case #ButtonMaster
          If EventType() = #PB_EventType_LeftClick
            RunProgram("explorer.exe ",Chr(34)+"F:\BOOK\CodecVelindosBase.db"+Chr(34),"");#PB_Program_Wait
          EndIf
      EndSelect
  EndSelect
ForEver 
;- Images
DataSection
  ButtonMaster:
  IncludeBinary "F:\Pure@Store\DESIGN_PROFI_STANDARD\VelindosKalender7.png"      ;<==== Hier Hintergrundbild mit 126x139 Pixel
EndDataSection
Habe im Forum noch einen für ein Rahmenloses Windows gefunden. Aber komme mit der Einarbeitung nicht richtig zu recht! Hilfe!!! Verschwindet komplett wenn ich es in den Code einarbeite!

Code: Alles auswählen

#KalenderMan = 0
#Kalender = 1
#ButtonMaster =2
#ButtonImage=3

CreateImage(#ButtonImage, 126, 139)

OpenWindow(#KalenderMan, 1220, 13, 126, 139, "Parent",#PB_Window_BorderLess);#PB_Window_Invisible
OpenWindow(#Kalender, #PB_Ignore, #PB_Ignore, 126, 139, "Child", #PB_Window_BorderLess,WindowID(#KalenderMan) )
ButtonGadget(#ButtonMaster, 0, 0, 126, 139,"")

style1 = GetWindowLong_(WindowID(#Kalender), #GWL_EXSTYLE)
style2 = GetWindowLong_(WindowID(#Kalender), #GWL_EXSTYLE)
SetWindowLong_(WindowID(#Kalender), #GWL_EXSTYLE, style2 | #WS_CLIPCHILDREN | #WS_CHILD)
SetParent_(WindowID(#Kalender), WindowID(#KalenderMan))


Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten