Page 1 sur 1

Calendrier

Publié : mer. 28/janv./2004 21:28
par Le Soldat Inconnu
un "petit" code pour faire un calendrier (320 lignes quoi, c petit pour moi)

cela donne ceci :
Image

Code : Tout sélectionner

Global Date.s, heure.s, Texte.s, Fichier.s, PosFenX.l, PosFenY.l, Creation.l

Enumeration
  ; Windows
  #Postit
  #Edition
  
  ; Image
  #Calendrier
  #Image_Heure
  #Image_Min
  #Image_Texte
  
  ; Gadget
  #Texte
  #Heure
  #Min
  
  #Valider
  #Annuler
  
  #DateJour
  
  ; PopupMenu
  #Menu_Option
  #Menu_Option_Edition
  #Menu_Option_Jeter
  
  ; Police d'écriture
  
EndEnumeration

#TailleX = 150
#TailleY = 108
#Angle = 20
#Bordure = 5
#Espace_bouton = 40
#LigneMax = 5




Procedure.s Jour(n.l)
  Select n
    Case 0 : Jour.s = "Dim"
    Case 1 : Jour.s = "Lun"
    Case 2 : Jour.s = "Mar"
    Case 3 : Jour.s = "Mer"
    Case 4 : Jour.s = "Jeu"
    Case 5 : Jour.s = "Ven"
    Case 6 : Jour.s = "Sam"
  EndSelect
  ProcedureReturn Jour
EndProcedure

Procedure.s Mois(n.l)
  Select n
    Case 1 : Mois.s = "Jan."
    Case 2 : Mois.s = "Fev."
    Case 3 : Mois.s = "Mars"
    Case 4 : Mois.s = "Avr."
    Case 5 : Mois.s = "Mai"
    Case 6 : Mois.s = "Juin"
    Case 7 : Mois.s = "Juil."
    Case 8 : Mois.s = "Août"
    Case 9 : Mois.s = "Sep."
    Case 10 : Mois.s = "Oct."
    Case 11 : Mois.s = "Nov."
    Case 12 : Mois.s = "Déc."
  EndSelect
  ProcedureReturn Mois
EndProcedure

Procedure.l NumeroMois(n.s)
  Select n
    Case "Jan." : Mois = 1
    Case "Fev." : Mois = 2
    Case "Mars" : Mois = 3
    Case "Avr." : Mois = 4
    Case "Mai" : Mois = 5
    Case "Juin" : Mois = 6
    Case "Juil." : Mois = 7
    Case "Août" : Mois = 8
    Case "Sep." : Mois = 9
    Case "Oct." : Mois = 10
    Case "Nov." : Mois = 11
    Case "Déc." : Mois = 12
  EndSelect
  ProcedureReturn Mois
EndProcedure

Procedure Image_Calendrier(x.l, y.l)
  
  #LargeurCalendrier = 211
  #HauteurCalendrier = 127
  
  UseImage(#Calendrier)
  StartDrawing(ImageOutput())
    
    ; Dessin des rectangles
    Box(1, 1, #LargeurCalendrier - 2, 13, $FFFFFF)
    
    For n = 0 To 6
      For nn = 0 To 5
        Box(1 + n * 30, 15 + nn * 16, 29, 15)
      Next
    Next
    
    Box(1, 111, 15, 15)
    Box(17, 111, 177, 15)
    Box(195, 111, 15, 15)
    
    ; Chargement de la police
    FontID = LoadFont(0, "arial", 8, #PB_Font_HighQuality)
    DrawingFont(FontID)
    DrawingMode(1 | 4)
    FrontColor(0, 0, 0)
    
    ; Affichage des jours de la semaine
    For n = 0 To 6
      Locate(1 + n * 30 + (30 - TextLength(Jour(n))) / 2, 1)
      DrawText(Jour(n))
    Next
    
    ; Calcul de la date
    
    If Left(Date, 1) = "?"
      Calendrier = Date()
      Annee = Year(Calendrier)
      Mois = Month(Calendrier)
      Jour = Day(Calendrier)
      Date = Jour(DayOfWeek(Calendrier)) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
    Else
      Annee = Val(StringField(Date, 4, " "))
      Mois = NumeroMois(StringField(Date, 3, " "))
      Jour = Val(StringField(Date, 2, " "))
    EndIf
    
    If x > 1 And x < 16 And y > 111 And y < 126
      Mois - 1
      If Mois < 1
        Annee - 1
        Mois = 12
      EndIf
      Jour = 1
      Date = Jour(DayOfWeek(Date(Annee, Mois, 1, 0, 0, 0))) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
    EndIf
    If x > 195 And x < 210 And y > 111 And y < 126
      Mois + 1
      If Mois > 12
        Annee + 1
        Mois = 1
      EndIf
      Jour = 1
      Date = Jour(DayOfWeek(Date(Annee, Mois, 1, 0, 0, 0))) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
    EndIf
    
    ; Affichage des jours
    
    Calendrier = Date(Annee, Mois, 1, 0, 0, 0)
    Ligne = 0
    Repeat
      JourSemaine = DayOfWeek(Calendrier)
      Jour2 = Day(Calendrier)
      Locate(1 + JourSemaine * 30 + (30 - TextLength(Str(Jour2))) / 2, 16 + Ligne * 16)
      DrawText(Str(Jour2))
      If x > 1 + JourSemaine * 30 And x < 30 + JourSemaine * 30 And y > 15 + Ligne * 16 And y < 30 + Ligne * 16
        Date = Jour(JourSemaine) + " " + Str(Jour2) + " " + Mois(Mois) + " " + Str(Annee)
        Jour = Day(Calendrier)
      EndIf
      Calendrier = AddDate(Calendrier, #PB_Date_Day, 1)
      If JourSemaine = 6 : Ligne + 1 : EndIf
    Until Month(Calendrier) <> Mois
    
    ; Affichage du mois
    Locate(17 + (177 - TextLength(Date)) / 2, 112)
    DrawText(Date)
    
    ; Affichage des flèches
    CloseFont(0)
    FontID = LoadFont(0, "arial", 10, #PB_Font_HighQuality)
    DrawingFont(FontID)
    Locate(4, 110)
    DrawText("<")
    Locate(199, 110)
    DrawText(">")
    
    ; Affichage du jour choisi
    
    Calendrier = Date(Annee, Mois, 1, 0, 0, 0)
    Ligne = 0
    Repeat
      JourSemaine = DayOfWeek(Calendrier)
      If Day(Calendrier) = Jour
        Box(1 + JourSemaine * 30, 15 + Ligne * 16, 29, 15, $FF)
      EndIf
      Calendrier = AddDate(Calendrier, #PB_Date_Day, 1)
      If JourSemaine = 6 : Ligne + 1 : EndIf
    Until Month(Calendrier) <> Mois
    
    CloseFont(0)
    
  StopDrawing()
  
  SetGadgetState(#Calendrier, UseImage(#Calendrier))
  
EndProcedure

Procedure Image()
  FontID = LoadFont(0, "arial", 10, #PB_Font_HighQuality)
  
  CreateImage(#Image_Heure, 119, 15)
  StartDrawing(ImageOutput())
    Box(1, 1, 58, 14, $FFFFFF)
    Box(60, 1, 58, 14, $FFFFFF)
    DrawingFont(FontID)
    DrawingMode(1)
    FrontColor(0, 0, 0)
    Locate(1 + (58 - TextLength("Heure")) / 2, 0)
    DrawText("Heure")
    Locate(60 + (58 - TextLength("Minute")) / 2, 0)
    DrawText("Minute")
  StopDrawing()
  
  CloseFont(0)
EndProcedure







;- debut du prog

; on charge la date et l'heure
Heure = "??h??"
Date = "??? ?? ??? ????"

If OpenWindow(#Edition, 0, 0, #LargeurCalendrier + 6, 200, #PB_Window_WindowCentered, "Edition")
  If CreateGadgetList(WindowID())
    
    GetWindowRect_(WindowID(), @Taille_Fenetre.rect)
    Largeur_Fenetre = Taille_Fenetre\Right - Taille_Fenetre\Left
    Hauteur_Fenetre = Taille_Fenetre\Bottom - Taille_Fenetre\top
    Largeur_Bordure = (Largeur_Fenetre - WindowWidth()) / 2
    Hauteur_Titre = Hauteur_Fenetre - WindowHeight() - Largeur_Bordure
    
    CreateImage(#Calendrier, #LargeurCalendrier, #HauteurCalendrier)
    ImageGadget(#Calendrier, 3, 3, #LargeurCalendrier, #HauteurCalendrier, UseImage(#Calendrier))
    Image_Calendrier(0, 0)
    
    Image()
    
    ImageGadget(#Image_Heure, 3, 6 + #HauteurCalendrier, 119, 15, UseImage(#Image_Heure))
    
    ComboBoxGadget(#Heure, 3, 6 + #HauteurCalendrier + 15, 60, 200)
    For n = 0 To 23
      AddGadgetItem(#Heure, -1, Str(n))
    Next
    ComboBoxGadget(#Min, 63, 6 + #HauteurCalendrier + 15, 60, 200)
    For n = 0 To 11
      AddGadgetItem(#Min, -1, Str(n * 5))
    Next

    If Left(Heure, 1) = "?"
      SetGadgetState(#Heure, Hour(Date()))
      SetGadgetState(#Min, Minute(Date()) / 5)
      Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
    Else
      SetGadgetState(#Heure, Val(StringField(Heure, 1, "h")))
      SetGadgetState(#Min, Val(StringField(Heure, 2, "h")) / 5)
    EndIf
    
    ButtonGadget(#Valider, 3, #HauteurCalendrier + 50, #LargeurCalendrier, 22, "Valider")
    
    ButtonGadget(#DateJour, 126, 6 + #HauteurCalendrier, #LargeurCalendrier - 123, 35, "Date et heure actuelles", #PB_Button_MultiLine)
    
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #WM_LButtonDown
        x = WindowMouseX() - Largeur_Bordure - 3
        y = WindowMouseY() - Hauteur_Titre - 3
        If x > 0 And x < #LargeurCalendrier And y > 0 And y < #HauteurCalendrier
          Image_Calendrier(x, y)
        EndIf
      EndIf
      
      If Event = #PB_EventGadget
        Select EventGadgetID() ; boutons, zone de texte, ...
          Case #Valider
            Event = #WM_CLOSE
            
          Case #Heure
            Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
            
          Case #Min
            Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
            
          Case #DateJour
            Calendrier = Date()
            Annee = Year(Calendrier)
            Mois = Month(Calendrier)
            Jour = Day(Calendrier)
            Date = Jour(DayOfWeek(Calendrier)) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
            Image_Calendrier(0, 0)
            
            SetGadgetState(#Heure, Hour(Calendrier))
            SetGadgetState(#Min, Minute(Calendrier) / 5)
            Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
            
        EndSelect
      EndIf
      
    Until Event = #WM_CLOSE
    
  EndIf
  CloseWindow(#Edition)
EndIf

Debug Date
Debug Heure

Publié : mer. 28/janv./2004 21:29
par Le Soldat Inconnu
y'a aussi ceci

Code : Tout sélectionner

; English forum:
; Author: Franco
; Date:


;Orignal gepostet von Franco
;Win-API Kalendar
;Konstanten Definition:

#MCM_GETCURSEL = $1001
#Auswahl=1
#Abbruch = 2

;-InitCommonControlsEx Struktur
Structure InitCommon
dwSize.l
dwICC.l
EndStructure

my.InitCommon
my\dwSize = 8
my\dwICC = $100
;-Initialisieren

InitCommonControlsEx_(@my)

hWnd=OpenWindow(0,0,0,200,200.0,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"API-Kalender")
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf

hCal=CreateWindowEx_(0,"SysDateTimePick32","Datum",#WS_CHILD|#WS_VISIBLE,20,20,100,25,hWnd,0,GetModuleHandle_(0),0)
ButtonGadget(#Auswahl,130,170,50,20,"Datum")
ButtonGadget(#Abbruch,20,170,50,20,"Abbruch")

Repeat
     EventID.l = WaitWindowEvent()
    
     If EventID = #PB_EventGadget
        Select EventGadgetID()
          Case #Auswahl
               SendMessage_(hCal,#MCM_GETCURSEL,0,@time.SYSTEMTIME )
               year=time\wYear
               month=time\wMonth
               day=time\wDay
               info.s = Str(day)+"."+Str(month)+"."+Str(year)
               MessageRequester("",info,0)
          Case #Abbruch
               End
        EndSelect
     EndIf
Until EventID = #PB_EventCloseWindow

End