Aktuelle Zeit: 23.05.2019 14:40

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Kalender auf CanvasGadget Basis
BeitragVerfasst: 27.06.2018 14:29 
Offline

Registriert: 18.08.2017 09:35
Hallöchen :)

Ich will nen Kalender erstellen aber ich habe festgestellt dass das CalendarGadget nicht so flexibel ist wie ich dachte. Ich kann nicht mal sagen dass ein bestimmtes Datum eine Farbe haben soll. Auch Google sagt es sei nicht so möglich.

Deshalb frage ich euch ob jemand Lust hat mir einen einfachen Kalender auf CanvasGadget Basis erstellen könnte? Ich habe leider keine Ahnung davon. Die Kalender Ansicht soll ganz primitiv sein und dass ich die Möglichkeit habe die Schriftfarbe und Hintergrundfarbe eines bestimmten Datums zu ändern. Mehr soll der Canvas-Kalender nicht können. Es wäre echt cool wenn jemand für mich bauen könnte. :)

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 27.06.2018 20:51 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Willst du es nicht mal selber versuchen?
Du willst doch programmieren lernen oder nicht?
Wo liegen die Probleme, die dich an der Umsetzung hindern?

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 09:23 
Offline

Registriert: 18.08.2017 09:35
Ich bin schlecht in Mathe und weis nicht wie ich die Tage aller Monate in die richtige Ansicht bringen kann. Es soll nicht immer mit 1 anfangen sondern wie in einer normalen Kalender Ansicht z.B. mit 28 vom letzten Monat anfangen. :roll:

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 11:42 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Dresden
Ein Monat kann sich über maximal sechs verschiedene Wochen (Mo-So) erstrecken,
das heißt, du musst ein maximales Raster von 6 x 7 vorhalten. Den Wochentag
des ersten jedes Monats kannst du mit DayOfWeek() bestimmen.

Danach füllst du dein Raster mit der Anzahl der Tage des aktuellen Monats auf
(Funktionen zur Schaltjahrbestimmung etc. gibts im Forum zu finden). Wenn du
den aktuellen Monat fertig hast, füllst du die Lücken in der ersten und letzten
Woche mit den letzten bzw. ersten Tagen des Vor-/Folgemonats auf.

_________________
Win10 x64 | PB 5.70 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 11:47 
Online
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Mir war grad danach und deswegen hab ich dir den Matheteil abgenommen. Jetzt darfst du das Canvas bauen. :-)
Code:
EnableExplicit

; Hiermit stellt man den ersten Tag der Woche ein. Ich mag Montag, deswegen eine 1
#firstDayOfTheWeek = 1

Procedure showCalendarMonth(date.q)
   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
   Debug ms + " - " + y
   ; 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, ",") + ~"\t"
   Next
   Debug line
   
   ; Laufe über alle Tage des Kalenderblatts und schreibe sie raus.
   Protected day.q = firstDayOfCalendarMonth
   While day <= lastDayOfCalendarMonth
      If DayOfWeek(day) = #firstDayOfTheWeek
         If day <> firstDayOfCalendarMonth
            Debug line
         EndIf
         line = ""
      Else
         line + ~"\t"
      EndIf

      If day < firstDay Or day > lastDay
         line + "(" + Day(day) + ")"
      Else
         line + Day(day)
      EndIf
         
      day = AddDate(day, #PB_Date_Day, 1)
   Wend
   Debug line
EndProcedure

Define i.i
For i = 1 To 12
   showCalendarMonth(Date(2018, i, 4, 0, 0, 0))
   Debug ""
Next

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 12:00 
Offline

Registriert: 18.08.2017 09:35
Danke Nick ich liebe dich. Du bist der beste dass du für mich das programmiert hast. Da waren schon einige Schritte notwendig um das zu ermöglichen. Und Danke für die Zwischenkommentare damit ich das besser verstehen kann. Sehr hilfreich! :allright: :)

Dann kann ich das mit dem Canvas probieren.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 12:08 
Online
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Du alter Schleimer, du. Viel Spaß damit :allright:

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 13:27 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
- CanvasGadget
+ WebGadget

;-)

Bild

Code:
EnableExplicit

; Hiermit stellt man den ersten Tag der Woche ein. Ich mag Montag, deswegen eine 1
#firstDayOfTheWeek = 1

Procedure.s GetCalendarCss()
 
  Protected ReturnValue.s
 
  ReturnValue = "<style>" + #CRLF$
  ReturnValue + "html { height: 100%; }" + #CRLF$
  ReturnValue + "body { min-height: 100%; overflow: hidden; font-family: Arial }" + #CRLF$
  ReturnValue + "table { width: 100%; height: 100%; table-layout: fixed; }" + #CRLF$
  ReturnValue + "table, th, td { border: 1px solid black; }" + #CRLF$
  ReturnValue + "td { text-align: center; }" + #CRLF$
  ReturnValue + ".inactive { color: silver; }" + #CRLF$
  ReturnValue + ".today { background-color: lightgreen; font-weight: bold}" + #CRLF$
  ReturnValue + "</style>" + #CRLF$
 
  ProcedureReturn ReturnValue
 
EndProcedure

Procedure.s showCalendarMonth(Date.q)
 
  Protected ReturnValue.s
 
  ReturnValue + "<html>" + #CRLF$
  ReturnValue + "<head>" + #CRLF$
  ReturnValue + GetCalendarCss()
  ReturnValue + "</head>" + #CRLF$
  ReturnValue + "<body>" + #CRLF$
  ReturnValue + "<table>" + #CRLF$
 
  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
  ReturnValue + "<tr><th colspan='7'>" + ms + " - " + y + "</th></tr>" + #CRLF$
  ; Zeige Liste der Wochentage als erste Zeile an
  Protected i.i, line.s = ""
  For i = 0 To 6
    line + "<th>" + StringField(dList, (#firstDayOfTheWeek + i) % 7 + 1, ",") + "</th>"
  Next
  ReturnValue + "<tr>" + line + "</tr>" + #CRLF$
 
  ; Laufe über alle Tage des Kalenderblatts und schreibe sie raus.
  Protected day.q = firstDayOfCalendarMonth
  While day <= lastDayOfCalendarMonth
    If DayOfWeek(day) = #firstDayOfTheWeek
      If day <> firstDayOfCalendarMonth
        ReturnValue + "<tr>" + line + "</tr>" + #CRLF$
      EndIf
      line = ""
    Else
      line + ""
    EndIf
   
    If day < firstDay Or day > lastDay
      line + "<td class='inactive'>(" + Day(day) + ")</td>"
    Else
     
      If Day(day) = Day(Date()) And Month(day) = Month(Date()) And Year(day) = Year(Date())
        line + "<td class='today'>" + Day(day) + "</td>"
      Else
        line + "<td>" + Day(day) + "</td>"
      EndIf
     
    EndIf
   
    day = AddDate(day, #PB_Date_Day, 1)
   
  Wend
 
  ReturnValue + "<tr>" + line + "</tr>" + #CRLF$
  ReturnValue + "</table>" + #CRLF$
  ReturnValue + "</body>" + #CRLF$
  ReturnValue + "</html>"
 
  ProcedureReturn ReturnValue
 
EndProcedure

Enumeration
  #Window
  #WebGadget
EndEnumeration

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 300, "Calendar")
WebGadget(#WebGadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window), "")
SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, showCalendarMonth(Date(2018, 6, 1, 0, 0, 0)))

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow

_________________
"A user interface is like a joke. If you have to explain it, it’s not that good." (Martin Leblanc)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 13:44 
Offline

Registriert: 18.08.2017 09:35
Danke Kiffi aber jetzt habe ich schon mit Canvas angefangen und sieht erstmal so aus :
Code:
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

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kalender auf CanvasGadget Basis
BeitragVerfasst: 28.06.2018 13:50 
Offline

Registriert: 18.08.2017 09:35
Lieber NicTheQuick, kannst du mir nochmal helfen? Dein Code als Vorlage ist super aber leider krieg ich es nicht hin dass ich für jede Datum-Zahl ein DrawText machen kann. Ich habe mit meiner Variable DrawTextX versucht aber irgendwie siehts nicht so aus wie ich es haben will.

Mein Ziel ist es, dass ich für jedes einzelne Datum eine andere Farbe wählen kann.

Kannst du mir nochmal helfen?

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye