Programmateur simple et prêt à l'emploi

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Programmateur simple et prêt à l'emploi

Message par Jacobus »

Hello, voici un petit log qui vous permettra d'agrémenter vos créations en incluant la possibilité de créer une tâche planifiée par votre programme. Ca peut être utile pour vérifier une mise à jour, gérer des sauvegardes automatiques, créer des alertes, etc....

le programme est complet et fonctionnel, PB 4.10 et montre l'utilisation de quelques fonctions très utiles. Ajoutez vos icônes et ça roule. C'est cadeau :)
Icônes obligatoires pour ajout dans le systray

Code : Tout sélectionner

; Codé par Jacobus 01/02/2008
; code PB 4.10 comportant des API, donc PB demo proscrit, désolé.
;-Constantes
Enumeration
#WIN

#ContainerImage
 #Img_TimerAction
 #TextSelectDate
 
#FrameSelect
#TextDate
#ComboDate
#TextHeure
#ComboHeure
#ComboMinute
#ComboSeconde
#TextDemarre
#TextTache
#BtnTimer
#BtnStop
#BtnClose
#StatusPlan
#TimerSysTrayIcon
EndEnumeration
;-Images (sélectionnez les vôtres)
Global Image0,Image1,Image2
Image0 = CatchImage(0, ?Image0) ; 128x128
Image1 = CatchImage(1, ?Image1) ; 16x16
Image2 = CatchImage(2, ?Image2) ; 16x16
DataSection 
Image0 : IncludeBinary "ICONES\Icones_128\TimerAction.ico"
Image1 : IncludeBinary "ICONES\ICONES16\Executer.ico"
Image2 : IncludeBinary "ICONES\ICONES16\TimerSystray.ico"
EndDataSection
Global Font0 
Font0 = LoadFont(0, "Arial", 8,#PB_Font_Bold|#PB_Font_HighQuality)

Procedure Planification(Jour$,Heure.l,Minutes.l,Secondes.l)
 
 If Jour$ = "Jours"
  Day$ = "Jours"
  Else 
	 Jour = DayOfWeek(Date())
	  If Jour = 0 : Day$ = "Dimanche"
	  ElseIf Jour = 1 : Day$ = "Lundi"
	  ElseIf Jour = 2 : Day$ = "Mardi"
	  ElseIf Jour = 3 : Day$ = "Mercredi"
	  ElseIf Jour = 4 : Day$ = "Jeudi"
	  ElseIf Jour = 5 : Day$ = "Vendredi"
	  ElseIf Jour = 6 : Day$ = "Samedi"
	  EndIf 
 EndIf  
 Hour   = Hour(Date())
 Minute = Minute(Date())
 Second = Second(Date())
 
 If Day$ = Jour$ And Heure = Hour And Minutes = Minute And Secondes = Second 
  ProcedureReturn 1
 Else 
  ProcedureReturn 0
 EndIf 
 
EndProcedure

Global Task.l
Task = 0
Procedure BackupPlanification()
 
 Jour$    = GetGadgetText(#ComboDate)
 Heure    = Val(GetGadgetText(#ComboHeure))
 Minutes  = Val(GetGadgetText(#ComboMinute))
 Secondes = Val(GetGadgetText(#ComboSeconde))
 If Planification(Jour$,Heure,Minutes,Secondes) = 1
 ; c'est ici qu'il faut prévoir la tâche à effectuer, il peut s'agir d'un RunProgram() avec ses paramètres,
 ; ou simplement une alerte en déclenchant un son (sirène d'alarme, cri d'orang-outang en rut, Dobro jouant de la guitare un soir de beuverie avec ses potes, etc...)
 ; Vous pouvez aussi afficher un postit avec la liste des courses, une photo de Fred en pied et en caleçon.... 
 ; Un simple requester pour le test. dans mon cas c'est une sauvegarde auto.
  MessageRequester("Timer backUp","Il est temps de sauvegarder",#MB_ICONINFORMATION)
   Task = Task+1
    SetGadgetText(#TextTache,"Tâche effectuée : "+Str(Task)+" fois")
    
 EndIf 
 
EndProcedure
;-Fenêtre
If OpenWindow(#WIN,0,0,500,300,"Planification" ,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar|#PB_Window_Invisible)=0 Or CreateGadgetList(WindowID(#WIN))=0
End
EndIf

ContainerGadget(#ContainerImage,5,5,150,265)
SetGadgetColor(#ContainerImage,#PB_Gadget_BackColor,RGB(59, 127, 118))

 ImageGadget(#Img_TimerAction, 10,10,128,128,Image0)
 TextGadget(#TextSelectDate, 10,160,130,90,"Sélectionnez le moment précis pour déclencher la sauvegarde"+Chr(13)+"Cliquez sur [Activer] pour enclencher le minuteur")
 SetGadgetColor(#TextSelectDate,#PB_Gadget_BackColor,RGB(59, 127, 118))
 SetGadgetColor(#TextSelectDate,#PB_Gadget_FrontColor,RGB(255, 255, 255))
 ;SetGadgetFont(#TextSelectDate,Font0)
CloseGadgetList()

Frame3DGadget(#FrameSelect, 170,10,320,260,"Planifier")

TextGadget(#TextDate, 190,47,50,15,"Tous les",#PB_Text_Center)
ComboBoxGadget(#ComboDate,245,45,160,60,#PB_ComboBox_Editable)
 AddGadgetItem(#ComboDate, -1, "Jours")
 AddGadgetItem(#ComboDate, -1, "Dimanche")
 AddGadgetItem(#ComboDate, -1, "Lundi")
 AddGadgetItem(#ComboDate, -1, "Mardi")
 AddGadgetItem(#ComboDate, -1, "Mercredi")
 AddGadgetItem(#ComboDate, -1, "Jeudi")
 AddGadgetItem(#ComboDate, -1, "Vendredi")
 AddGadgetItem(#ComboDate, -1, "Samedi")

TextGadget(#TextHeure, 190,72,50,15,"à",#PB_Text_Center)
ComboBoxGadget(#ComboHeure, 245,70,50,20,#PB_ComboBox_Editable):GadgetToolTip(#ComboHeure,"Heure.")
 For h = 0 To 23 : AddGadgetItem(#ComboHeure, -1,Str(h)) : Next h
ComboBoxGadget(#ComboMinute, 300,70,50,20,#PB_ComboBox_Editable):GadgetToolTip(#ComboMinute,"Minutes.")
 For m = 0 To 59 : AddGadgetItem(#ComboMinute, -1,Str(m)) : Next m
ComboBoxGadget(#ComboSeconde, 355,70,50,20,#PB_ComboBox_Editable):GadgetToolTip(#ComboSeconde,"Secondes.")
 For s = 0 To 59 : AddGadgetItem(#ComboSeconde, -1,Str(s)) : Next s

TextGadget(#TextDemarre, 190,142,250,15,"Timer démarré le :")
 SetGadgetFont(#TextDemarre,Font0)
TextGadget(#TextTache, 190,172,250,15,"Tâche effectuée :")
 SetGadgetFont(#TextTache,Font0)

ButtonGadget(#BtnTimer,190,230,80,25,"Activer",#PB_Button_Toggle):GadgetToolTip(#BtnTimer,"La tâche sera exécutée au moment programmé.")
ButtonGadget(#BtnStop,280,230,80,25,"Arrêter"):GadgetToolTip(#BtnStop,"Arrêter le timer.")
ButtonGadget(#BtnClose,400,230,80,25,"Annuler"):GadgetToolTip(#BtnClose,"Annuler et quitter")

DisableGadget(#BtnStop,1)

If CreateStatusBar(#StatusPlan, WindowID(#WIN))
  AddStatusBarField(500)
  StatusBarText(#StatusPlan,0,"Exécuter une tâche régulièrement",#PB_StatusBar_Raised)
  StatusBarIcon(#StatusPlan,0,Image1) ;commenter si vous n'avez pas d'icône
EndIf
HideWindow(#WIN, 0)
;-Events
Repeat
 Event = WaitWindowEvent()
 
;***** Décommentez cette partie si vous voulez 'icôniser' en cliquant sur la croix en haut à droite *****
 If Event = #PB_Event_CloseWindow ;And Minimise=#False
;     AddSysTrayIcon(#TimerSysTrayIcon, WindowID(#WIN), Image2)
;     SysTrayIconToolTip(#TimerSysTrayIcon, "Programmation en attente")
;     ShowWindow_(WindowID(#WIN),#SW_MINIMIZE)
;     ShowWindow_(WindowID(#WIN),#SW_HIDE)
;     Minimise=#True  : quit=#False
  quit=#True ; à commenter si décommenté au-dessus
 EndIf
;****** 

 Select Event      
 Case #PB_Event_SysTray
  If EventType() = #PB_EventType_LeftClick
    RemoveSysTrayIcon(#TimerSysTrayIcon)
    ShowWindow_(WindowID(#WIN),#SW_RESTORE)
   Minimise=#False
  EndIf
 EndSelect
     
 If Event = #PB_Event_Gadget
   Select EventGadget()           
       
    Case #BtnTimer 
				 Jour$      = GetGadgetText(#ComboDate)
				 Heure.s    = GetGadgetText(#ComboHeure)
				 Minutes.s  = GetGadgetText(#ComboMinute)
				 Secondes.s = GetGadgetText(#ComboSeconde)
				 If Jour$<>"" And Heure<>"" And Minutes<>"" And Secondes<>""
	        If SetTimer_(WindowID(#WIN),1,1000,@BackupPlanification())
	         SetGadgetText(#TextDemarre,"Timer démarré le : "+FormatDate("%dd/%mm/%yyyy à %hh:%ii:%ss", Date()))
	         DisableGadget(#BtnTimer,1)
	         DisableGadget(#BtnStop,0) 
	          AddSysTrayIcon(#TimerSysTrayIcon, WindowID(#WIN), Image2)
	          If Jour$ = "Jours"
	            Dprevu$ = "Tous les jours " 
	           Else 
	            Dprevu$ = Jour$
	          EndIf 
				    SysTrayIconToolTip(#TimerSysTrayIcon, "La tâche sera exécutée : "+Dprevu$+"à "+Heure+"h"+Minutes+":"+Secondes)
				    ShowWindow_(WindowID(#WIN),#SW_MINIMIZE)
				    ShowWindow_(WindowID(#WIN),#SW_HIDE)
				    Minimise=#True : quit=#False
	        EndIf 
	       Else 
	        MessageRequester("Timer backUp","Programmation incomplète!",#MB_ICONEXCLAMATION)
	        SetGadgetState(#BtnTimer, 0)
	        DisableGadget(#BtnStop,1)
	        SetGadgetText(#TextDemarre,"Timer démarré le : ")
	       EndIf 
       
    Case #BtnStop 
       If KillTimer_(WindowID(#WIN),1)
        DisableGadget(#BtnStop,1)
        DisableGadget(#BtnTimer,0)
        SetGadgetState(#BtnTimer, 0)
       EndIf 
        SetGadgetText(#TextDemarre,"Timer démarré le : ")
       
    Case #BtnClose : quit=#True
             
   EndSelect 
 EndIf
;-End        
Until quit=#True
 If GetGadgetState(#BtnTimer) = 1
  KillTimer_(WindowID(#WIN),1)
 EndIf 
End 
@+
:wink:
Dernière modification par Jacobus le ven. 01/févr./2008 21:57, modifié 2 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

C'est Noël 11 mois avant :D

Merci, je vais tester
A+
Denis
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Il est facilement modifiable pour le rendre utilisable à l'heure ou la minute en fonction de ce que l'on veut faire. Ou encore ajouter le choix du programme à exécuter.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu crois qu'on les lis pas tes commentaires ?? :twisted: :twisted: :lol:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

MDR les commentaires j'ai bien aimé aussi

T'aurais quand même pu nous donner les icones, j'ai la flemme de les faire.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

tu crois qu'on les lis pas tes commentaires ??
Euh si si, mais je l'ai fais exprès :mrgreen: (bon, j'édite parce-que c'est toi :lol: )
T'aurais quand même pu nous donner les icônes, j'ai la flemme de les faire.
me dis pas que tu n'as pas 3 icônes qui traînent sur ton pc :?: 2 en 16x16 et celle en 128 tu mets ce que tu veux, même un bmp le cas échéant.
Dernière modification par Jacobus le sam. 02/févr./2008 0:20, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Jacobus a écrit : (bon, j'édite parceque c'est toi :lol: )
AAARG ! :lol: :lol:
Répondre