DateGadget avec gestion des secondes

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

DateGadget avec gestion des secondes

Message par Thyphoon »

Bonjour,

Enfin des vacances, et enfin un peu de temps pour avancer mes projets purebasics :mrgreen: .
J'ai besoin d'un gadget facile et rapide pour sélectionner une date et une heure (précis a la secondes).
Helas le gadget intégré a Purebasic s'arrête a la minute. Dans la notice il est marqué : "Note importante: Le gadget ne supporte pas l'affichage des secondes, donc si vous spécifiez "%ss" dans le paramètre 'Masque$, il sera tout simplement ignoré" 8O
Je pensais ne pas être le seul a avoir été gêné par cette limitation mais malgré mes recherches sur les forums, je j'ai rien trouvé a ce propos.

Même si Je comprends pas très bien pourquoi le DateGadget ne supporte pas les secondes, est ce que quelqu'un a une solution toute faite pour sélectionner des dates ?

Dans tout les cas je vous souhaites a tous de passer de bonnes fêtes de fin d'année. :P
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: DateGadget avec gestion des secondes

Message par Zorro »

comme ça peut etre :

Code : Tout sélectionner


Declare.s dategadgetex(num,x, y, wit, height, parametre.s)

Enumeration
		#Win 
		#gadget_date
EndEnumeration



If OpenWindow(#win, 0, 0, 250, 250,"DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
		DateGadget(#gadget_date, 10, 10, 230, 25, "Date : %dd/%mm/%yyyy ")
		Repeat
				
				Select WaitWindowEvent()
				Case #PB_Event_Gadget
						Select EventGadget()
						Case #gadget_date
								date.s=DateGadgetEx(#gadget_date, 10, 10, 190, 25, "Date : %dd/%mm/%yyyy ")
								
						EndSelect
				Case #PB_Event_CloseWindow
				End
				EndSelect
		Forever
EndIf


Procedure.s DateGadgetEx(num,x, y, wit, height, parametre.s)		
		D=GetGadgetState(num)
		jour.s=str(Day(D))
		Mois.s=str(Month(D))
		Annee.s=str(Year(D))
		heure.s =str(Hour(D))
		Min.s=str(Minute(Date()))
		Seconde.s=str(Second(Date()))
		Total.s="Date :"+jour.s+"/"+Mois.s+"/"+Annee.s+" "+heure.s+":"+Min.s+":"+Seconde.s
		;debug Total.s
		SetGadgetText(num, Total.s)
		ProcedureReturn Total.s
		
EndProcedure


Dernière modification par Zorro le ven. 23/déc./2016 19:56, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: DateGadget avec gestion des secondes

Message par Thyphoon »

Zorro a écrit :comme ça peut etre :
Merci Zorro ^_^ ! L'idée est intéressante mais on ne peut pas éditer l'heure facilement. Ni changer les secondes.
Mais je vais ton idée est a creuser
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: DateGadget avec gestion des secondes

Message par Zorro »

une petite variante

Code : Tout sélectionner


Declare.s dategadgetex(num,x, y, wit, height, parametre.s)

Enumeration
		#Win 
		#gadget_date
		#heure
EndEnumeration



If OpenWindow(#win, 0, 0, 500, 250,"DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
		DateGadget(#gadget_date, 10, 10, 230, 25, "Date : %dd/%mm/%yyyy ")
	StringGadget(#heure,240,10,60,25,"10:20:20")
		Repeat
				
				Select WaitWindowEvent()
				Case #PB_Event_Gadget
						Select EventGadget()
						Case #gadget_date
								date.s=DateGadgetEx(#gadget_date, 10, 10, 190, 25, "Date : %dd/%mm/%yyyy ")
								Case #heure
								date.s=DateGadgetEx(#gadget_date,x, y, wit, height, parametre.s)		
						EndSelect
				Case #PB_Event_CloseWindow
				End
				EndSelect
		Forever
EndIf


Procedure.s DateGadgetEx(num,x, y, wit, height, parametre.s)		
		D=GetGadgetState(num)
		jour.s=str(Day(D))
		Mois.s=str(Month(D))
		Annee.s=str(Year(D))
		; 
; 		heure.s =str(Hour(D))
; 		Min.s=str(Minute(Date()))
; 		Seconde.s=str(Second(Date()))
h.s=GetGadgetText(#heure)  ;10:20:20"
heure.s=StringField(h.s,1,":")
Min.s=StringField(h.s,2,":")
Seconde.s=StringField(h.s,3,":")

		Total.s="Date :"+jour.s+"/"+Mois.s+"/"+Annee.s+" Heure:"+heure.s+":"+Min.s+":"+Seconde.s
		;debug Total.s
		SetGadgetText(num, Total.s)
		ProcedureReturn Total.s
		
EndProcedure



[reedit] petite correction de derniere secondes :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: DateGadget avec gestion des secondes

Message par Thyphoon »

Oui l'idée est bien je pense que je vais l'adopter !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: DateGadget avec gestion des secondes

Message par Micoute »

C'est vrai, je n'avais jamais remarqué, on n'utilise rarement les secondes pour prendre un rendez-vous, une recette de cuisine, ou un anniversaire, etc...
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: DateGadget avec gestion des secondes

Message par Thyphoon »

Micoute a écrit :C'est vrai, je n'avais jamais remarqué, on n'utilise rarement les secondes pour prendre un rendez-vous, une recette de cuisine, ou un anniversaire, etc...
Il s'agit pour moi d'afficher et de pouvoir éditer la date d'une photo. et les secondes sont précieuses :mrgreen:
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: DateGadget avec gestion des secondes

Message par Ar-S »

Comme pour mon minuteur j'utiliserai 3 combobox H M S pour régler l'heure., comme ça pas besoin d'éditer les chiffres au clavier et pas d'erreurs possible d'oublie des 2 points ou autre séparateur.
A chaque modification, l'heure complète se met à jour.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: DateGadget avec gestion des secondes

Message par Micoute »

J'aurais agit pareillement.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: DateGadget avec gestion des secondes

Message par Thyphoon »

Voici au final la solution que je vais utiliser.
Merci Zorro et Ar-s pour les idées.
C'est loin d'être parfait ... mais au moins ça fonctionne

Code : Tout sélectionner


Procedure DateGadgetEx(Gadget.i,X.l,Y.l,Width.l,Height.l)
  Protected D.i,GdtTmp.i
  GdtTmp=Gadget
  FrameGadget(GdtTmp,X,Y,Width,Height,"",#PB_Frame_Double)
  SetGadgetColor(GdtTmp, #PB_Gadget_BackColor , RGB(255,255,255))
  X=X+2:Y=Y+2:Height-4
  GdtTmp=GdtTmp+1:DateGadget(GdtTmp,X,Y,15,Height," "):D.i=GetGadgetState(GdtTmp)
  ;Year
  GdtTmp=GdtTmp+1:StringGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,25,Height,FormatDate("%yyyy",D),#PB_String_Numeric|#PB_String_BorderLess):GadgetToolTip(GdtTmp,"Year YYYY"): SetGadgetAttribute(GdtTmp,#PB_String_MaximumLength,4)
  ;/
  GdtTmp=GdtTmp+1:TextGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,8,Height,"/"):SetGadgetColor(GdtTmp, #PB_Gadget_BackColor , RGB(255,255,255))
  ;Month
  GdtTmp=GdtTmp+1:StringGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,15,Height,FormatDate("%mm",D),#PB_String_Numeric|#PB_String_BorderLess):GadgetToolTip(GdtTmp,"Month MM (1 to 12)"): SetGadgetAttribute(GdtTmp,#PB_String_MaximumLength,2)
  ;/
  GdtTmp=GdtTmp+1:TextGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,8,Height,"/"):SetGadgetColor(GdtTmp, #PB_Gadget_BackColor , RGB(255,255,255))
  ;Day
  GdtTmp=GdtTmp+1:StringGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,15,Height,FormatDate("%dd",D),#PB_String_Numeric|#PB_String_BorderLess):GadgetToolTip(GdtTmp,"Day DD (01 to 31)"): SetGadgetAttribute(GdtTmp,#PB_String_MaximumLength,2)
  
  ;Hour
  GdtTmp=GdtTmp+1:StringGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1)+15,Y,15,Height,FormatDate("%hh",D),#PB_String_Numeric|#PB_String_BorderLess):GadgetToolTip(GdtTmp,"Hour HH (00 to 23)"): SetGadgetAttribute(GdtTmp,#PB_String_MaximumLength,2)
  ;:
  GdtTmp=GdtTmp+1:TextGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,8,Height,":"):SetGadgetColor(GdtTmp, #PB_Gadget_BackColor , RGB(255,255,255))
  ;Minute
  GdtTmp=GdtTmp+1:StringGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,15,Height,FormatDate("%ii",D),#PB_String_Numeric|#PB_String_BorderLess):GadgetToolTip(GdtTmp,"Minute II (00 to 59)"): SetGadgetAttribute(GdtTmp,#PB_String_MaximumLength,2)
  ;:
  GdtTmp=GdtTmp+1:TextGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,8,Height,":"):SetGadgetColor(GdtTmp, #PB_Gadget_BackColor , RGB(255,255,255))
  ;Seconds
  GdtTmp=GdtTmp+1:StringGadget(GdtTmp,GadgetX(GdtTmp-1)+GadgetWidth(GdtTmp-1),Y,15,Height,FormatDate("%ss",D),#PB_String_Numeric|#PB_String_BorderLess):GadgetToolTip(GdtTmp,"Second SS (00 to 59)"): SetGadgetAttribute(GdtTmp,#PB_String_MaximumLength,2)
  
  ResizeGadget(Gadget,#PB_Ignore,#PB_Ignore,GadgetX(GdtTmp)+GadgetWidth(GdtTmp)-GadgetX(Gadget)+2,#PB_Ignore)
  ; Gmt
  GdtTmp=GdtTmp+1:ComboBoxGadget(GdtTmp,GadgetX(Gadget)+GadgetWidth(Gadget)+15,GadgetY(Gadget),150,GadgetHeight(Gadget))
  
EndProcedure


Procedure DateGadgetExEvent(Event.i,Gadget.i)
  Protected D.i, DTxt.s
  If Event=#PB_Event_Gadget
     If  EventGadget()>=Gadget And #PB_EventType_Change
       Select EventGadget()
         Case Gadget+1
           D=GetGadgetState(Gadget+1)
           SetGadgetText(Gadget+2,FormatDate("%yyyy",D)) ; Year
           SetGadgetText(Gadget+4,FormatDate("%mm",D)) ; Month
           SetGadgetText(Gadget+6,FormatDate("%dd",D)) ; Day
           SetGadgetText(Gadget+7,FormatDate("%hh",D)) ; Hour
           SetGadgetText(Gadget+9,FormatDate("%ii",D)) ; Minute
           SetGadgetText(Gadget+11,FormatDate("%ss",D)) ; Second
       Case Gadget+2,Gadget+4,Gadget+6,Gadget+7,Gadget+9,Gadget+11;Year
         DTxt=GetGadgetText(Gadget+2)+":"+GetGadgetText(Gadget+4)+":"+GetGadgetText(Gadget+6)+" "+GetGadgetText(Gadget+7)+":"+GetGadgetText(Gadget+9)+":"+GetGadgetText(Gadget+11)
         D=ParseDate("%yyyy:%mm:%dd %hh:%ii:%ss",DTxt)
         SetGadgetState(Gadget+1,D) 
     EndSelect
   EndIf
  EndIf 
EndProcedure

Procedure AddTimeZone(Gadget.i,selected.l,Full.b=#True)
  Protected Zone.s,p.l
  If IsGadget(Gadget)
    If GadgetType(Gadget)<>#PB_GadgetType_ComboBox
      Gadget=Gadget+12
    EndIf 
    If IsGadget(Gadget) And GadgetType(Gadget)=#PB_GadgetType_ComboBox
      Restore TimeZone
      Repeat
        Read.s Zone
        If Zone<>"END"
          If Full=#False
            p.l=FindString(Zone," ",0)
            Zone=Left(Zone,p)
          EndIf 
          Debug Zone
          AddGadgetItem(Gadget,-1,Zone)
        EndIf 
      Until Zone="END"
    EndIf
  EndIf  
EndProcedure

DataSection
  TimeZone:
  Data.s "GMT+0:00 Greenwich Mean Time"
  Data.s "GMT+1:00 European Central Time"
  Data.s "GMT+2:00 Eastern European Time"
  Data.s "GMT+2:00 (Arabic) Egypt Standard Time"
  Data.s "GMT+3:00 Eastern African Time "
  Data.s "GMT+3:30 Middle East Time"
  Data.s "GMT+4:00 Near East Time"
  Data.s "GMT+5:00 Pakistan Lahore Time"
  Data.s "GMT+5:30 India Standard Time"
  Data.s "GMT+6:00 Bangladesh Standard Time"
  Data.s "GMT+7:00 Vietnam Standard Time"
  Data.s "GMT+8:00 China Taiwan Time "
  Data.s "GMT+9:00 Japan Standard Time "
  Data.s "GMT+9:30 Australia Central Time"
  Data.s "GMT+10:00 Australia Eastern Time"
  Data.s "GMT+11:00 Solomon Standard Time"
  Data.s "GMT+12:00 New Zealand Standard Time"
  Data.s "GMT-11:00 Midway Islands Time"
  Data.s "GMT-10:00 Hawaii Standard Time"
  Data.s "GMT-9:00 Alaska Standard Time"
  Data.s "GMT-8:00 Pacific Standard Time"
  Data.s "GMT-7:00 Phoenix Standard Time"
  Data.s "GMT-7:00 Mountain Standard Time"
  Data.s "GMT-6:00 Central Standard Time"
  Data.s "GMT-5:00 Eastern Standard Time"
  Data.s "GMT-5:00 Indiana Eastern Standard Time"
  Data.s "GMT-4:00 Puerto Rico And US Virgin Islands Time"
  Data.s "GMT-3:30 Canada Newfoundland Time"
  Data.s "GMT-3:00 Argentina Standard Time"
  Data.s "GMT-3:00 Brazil Eastern Time"
  Data.s "GMT-1:00 Central African Time"
  Data.s "END"
EndDataSection



CompilerIf #PB_Compiler_IsMainFile 
Enumeration
      #Win 
      #gadget_date
      #gadget_autre = #gadget_date+13
EndEnumeration

If OpenWindow(#win, 0, 0, 500, 250,"DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  DateGadgetEx(#gadget_date,5,5,250,20)
  AddTimeZone(#gadget_date,0,#True)
      Repeat
            
        Event=WaitWindowEvent()
        DateGadgetExEvent(Event,#gadget_date)
        Select Event
            Case #PB_Event_Gadget
              
            Case #PB_Event_CloseWindow
            End
            EndSelect
      ForEver
EndIf
CompilerEndIf
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: DateGadget avec gestion des secondes

Message par Micoute »

Ce n'est pas mal du tout avec la date au format japonais.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: DateGadget avec gestion des secondes

Message par Thyphoon »

Micoute a écrit :Ce n'est pas mal du tout avec la date au format japonais.
Merci ! ça pourrait être améliorer mais pour l'instant ça me suffit !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: DateGadget avec gestion des secondes

Message par Micoute »

ça me donne une idée pour faire une procédure nommée SetFormatDate()
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre