Page 1 sur 1

[resolu] Récupération du Nième jour de l'année.

Publié : sam. 19/mai/2007 20:35
par Ar-S
Me revoilà avec un nouveau petit projet pour m'entrainer à gérer les date.

Mais kékiveut lui ??
Et bien c'est simple.
Je voudrais faire en sorte que mon programme qui utilise un calendrier affiche le Nieme jour de l'année dans l'editor qui se trouve au dessous.

Ex : si je clique sur 15 fevrier 2007, j'aimerai voir apparaitre dans l'editor
Le 15 fevrier 2007 sera le 47eme jour de l'année.

Voilà à quoi ressemble l'interface :

Code : Tout sélectionner

; Nieme jour de l'année par Ar-S PB 4
;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Calendar_0
  #Text_1
  #Editor_2
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 524, 210, 191, 400, "Ar-S Nieme jour", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      CalendarGadget(#Calendar_0, 0, 0, 190, 180)
      TextGadget(#Text_1, 0, 180, 190, 50, "Choisissez une date et voyez à quel nombre de jour de l'année elle correspond")
      EditorGadget(#Editor_2, 10, 255, 155, 115, #PB_Editor_ReadOnly)
    EndIf
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Calendar_0
      ElseIf EventGadget = #Text_1
      ElseIf EventGadget = #Editor_2
      EndIf
    ; //////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}
Comment récupérer la date selectionnée sur le calendargadget ?
Comment ensuite la convertir (ajout des mois puis du nombre de jours) et l'afficher dans l'editeurgadget ?

J'ai reussi à faire un prog similaire en PHP mais sans calendar, juste en déclarant nbr_jour_janvier=31, nbr_jour_fevrier=28 etc... et apres une ribambelle de IF pour traiter tout ça. ça marchait mais c'est pas propre.
J'aimerai donc pouvoir gérer ça en PB avec le calendar. 8O

Publié : sam. 19/mai/2007 21:30
par minirop
GetGadgetState(#Calendar)
renvoie le nombre de seconde depuis 1970 je crois.

donc suffit de faire ceci MOINS Date(1 janvier 2007)

Publié : sam. 19/mai/2007 22:59
par Dr. Dri
DayOfYear ?

Dri

Publié : dim. 20/mai/2007 8:45
par brossden
Comme le dit si bien Dr. Dri :

J'ai juste ajouté la procédure AfficheJour()

Code : Tout sélectionner

; Nieme jour de l'année par Ar-S PB 4
;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Calendar_0
  #Text_1
  #Editor_2
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure AfficheJour()
  date =  GetGadgetstate(#Calendar_0)
  If formatdate("%DD",date)="01"
    SJ.s = "er"
  Else
    SJ.s = "ème"
  EndIf
  SetGadgetText(#Editor_2, "Le :"+formatdate("%DD/%MM/%YYYY ",date)+chr(13)+"est le "+str(dayofyear(date))+SJ+ " jour de l'année")
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 524, 210, 191, 400, "Ar-S Nieme jour", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      CalendarGadget(#Calendar_0, 0, 0, 190, 180)
      TextGadget(#Text_1, 0, 180, 190, 50, "Choisissez une date et voyez à quel nombre de jour de l'année elle correspond")
      EditorGadget(#Editor_2, 10, 255, 155, 115, #PB_Editor_ReadOnly)
      AfficheJour()
    EndIf
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Calendar_0
        AfficheJour()
      ElseIf EventGadget = #Text_1
      ElseIf EventGadget = #Editor_2
      EndIf
      ; //////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;

Publié : dim. 20/mai/2007 11:44
par Ar-S
Rhooo mais c'est énorme :)

Y'a même la gestion des er/ème

Code : Tout sélectionner

SJ.s = "er"
  Else
SJ.s = "ème"
Merci beaucoup !
:D :D :D :D