J'ai longuement hesité sur comment faire ça ...
notamment, la partie Calendrier ....
vu qu'un agenda , ça doit pouvoir permettre la selection d'un jour, et son changement de couleur au cas ou on ecrit un truc a ce rappeler dans ce jour
je me voyais mal barré avec le Gadget calendar ....
ensuite, il ne me restais plus qu'a soit creer un Calendrier maison, avec un Canvas .... (bof , j'aime pas le canvas )
autre solution, plus simple , utiliser les boutons ... seulement c'est pareil, les boutons en Purebasic c'est plutot pas terrible pour les colorers
j'ai ressorti une vielle procedure que j'avais fait de Creations de bouton image , qui me permet de creer des bouton de toutes les couleurs , bon ... c'est parti ...
plus qu'a recupe une ou deux procedure de calcul de date... en creer quelque unes, pis utiliser une List chainée structuré pour attribuer a chaque bouton un message, une couleur en fonction et ça roule ....
le code suivant vous montre ou j'en suis (il est pas fini )
mais l'essentiel y est !
on peut choisir une année (avec les boutons flechés), le calendrier se met a jour
on peut sélectionner un jour , puis ecrire dans l'editeur , le message sera retenu...le bouton du jour changera de couleur il passera en jaune
pour dire qu'il y a un truc a lire dedans ....
si on efface tout le text, le bouton redeviens "normal"
le jour actuel est lui en bleu ... si un message se trouve dedans , il est en Orange .... (pour signaler que c'est iminent )
Si on change d'année une sauvegarde de l'année est effectuée
donc les messages réaparaitrons, les jours seront de nouveaux en surbrillance, lors du relancement du prg ou si on ré-affiche l'année
BREF , maintenant, ça retiens tout, c'est Utilisable sans problemes ..
ajout d'un systeme d'alarme pour prevenir des Rendez vous ....
Ajout du passage en Systray ....
2 ICONES UTILE AU PRG (SYSTRAY)
a mettre dans le meme dossier que le prg
agenda.ico
agenda2.ico
COMMENT PARAMETRER UNE ALARME :
Petit retour a l'Agenda (Voir le premier Code du Topic )
j'ai adopté les procedure de chargement/Sauvegarde de Falsam (Format Json ) merci a lui
j'ai ajouté un systeme d'alerte voici comment ça marche :
comme avant on peut entrer du texte (n'oubliez pas de sélectionner le bon jour AVANT d'ecrire le texte )
ce Texte est conservé, ça peut donc servir de Journal Intime ou d'Agenda Simple , pense bete , etc .... )
pour ajouter une alerte (24 Alertes possible par jour actuellement ) voici comment procéder
dans l'editeur là ou l'on écris nos messages , il suffit de mettre une heure de déclenchement de l'Alerte entre "$"
et le message qui va avec entre "[]"
voici quelques exemples d'alerte qui marche :
pour une alerte a 22h00
$22:00$
[le message qui va s'afficher ]
mais on peut aussi bien sur le mettre sur une seule ligne comme ça
on peut aussi ecrire le message sur plusieurs lignes$22:59$ [message a afficher]
plusieurs alertes pour le meme jour$22:59$ [message a afficher
sur plusieurs
Lignes]
$23:44$ [message de 23:44 ]
on peut ecrire du text au milieu
$23:45$ [message de 23:45 ]
on peut meme faire ainsi :
$23:46$ <-- ceci indique l'heure de l'alerte
du text normal en plein miilieu d'une alerte
ce text n'aparaitra pas dans le message
[message de 23:46 ] <-- ceci est le message qui apparaitra a 23:46
simple non ??
lorsqu'on a répondu a une alerte en refermant la boite d'alerte , celle ci se désactive
meme si on edite son heure !!! , une alerte passé est donc désactivée ..
si on veux remettre a zero les Flags et prendre en compte une modification d'une ancienne Alerte désactivée
il faut simplement apres la modification cliquer sur le bouton du jour concerné ...
cela aura pour effet de remettre les flags a zero ..et de réactiver les Alertes meme anciennes ..
Code : Tout sélectionner
;***********************************************
;Titre :*Agenda_Projet
;Auteur : Zorro
;Date :20/08/2017
;Heure :12:49:56
;Version Purebasic : PureBasic 5.71 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
; infos :
; Merci a Kernadec pour ses retours de bugs et d'idée
; Merci a Falsam pour l'ecriture/lecture Json
Enumeration 400
#titre
#titre_calendar
#bouton_avant
#bouton_apres
#File
#bouton_affiche_mois
#efface
#win
#scroll_area
#Editor
#auteur
#titre_annee
#font_titre
#font_annee
#font_mois
#font_Tag
#fonte_editeur
#SysTrayIcone
#image_icone
#image_icone2
#PopUp
#bouton_av
#bouton_ar
#text_num_page
#jour_selectione
#bouton_commute_icone
#bouton_help
EndEnumeration
LoadFont(#font_mois,"Arial",12,#PB_Font_Bold)
LoadFont(#font_tag,"Arial",6)
; **************************************************
; Structure Obligatoire, c'est la dedans que ce trouve tout les details de chaque bouton Gadget
; Cela permet d'avoir les infos necessaire pour recuperer les valeurs d'un gadgets, ou modifier les valeurs du gadget
;à Â
;é è ê
;î
;ô
;û ü ù
;ÿ
;ç
; via les procedures Get et Set
; **************************************************
Structure gadgetZ
x.i
y.i
Larg.i
Haut.i
Coul_ecriture.l
coul_fond.l
txt.s
type_fonte.s
taille_fonte.i
EndStructure
Global Dim gadgetZ.gadgetZ(500) ; ici dimentionner en fonction du nombre de gadget Z_button
; ***********************************************************
;- ***** Declaration ***************
Declare init_list()
Declare charge_list(annee.s)
Declare sauvegarde_list()
Declare.s get_date(bouton)
Declare bissextile(annee)
Declare nbjanvier(ldate.s)
Declare nbr_jour_mois(date.s)
Declare.b recherche_dans_list(dte)
Declare verif_alarme_text( )
Declare verif_alarme()
Declare verif_text()
Declare.s get_jour(date.s)
Declare get_jour_num(date.s)
Declare setbutton_z_color(id,coul_ecriture, coul_fond)
Declare setgadget_z_font(id, police.s)
Declare setgadget_z_text(id,txt.s)
Declare set_z_button(id_gadget)
Declare create_z_button(id_gadget, x, y, larg, haut,coul_ecriture, coul_fond, txt.s,type_fonte.s, taille_fonte.i)
Declare calendrier (larg,haut,coul_ecriture,coul_fond,date.s)
Declare Minimize(Flag.b)
; ********************************
Global Jo.s="Lu,Ma,Me,Je,Ve,Sa,Di"
Global Mo.s="Janvier,Fevrier,Mars,Avril,Mai,Juin,Juillet,Aout,Septembre,Octobre,Novembre,Decembre"
Global _numero_jour_depart ; le numero du jour du 01/01/ de l'annee actuelle
Global Dim DaysSelected(32) ; to return multiple days selected in a calendar
Global dte ,Position_y,j,Id_calendrier.i
Global ajout_annee
Global Mem_date ,Pos_Ascenseur.i
Global Flag_sauvegarde=#False ; permet de savoir si on commence Vierge ou si on tiens compte de la liste fabrique au chargement/lancement du prg
Global Position_mois=0
Global num_page=1
Global Icone_statut=#true; couleur de l'icone systray par le bouton on off
; cette Structure contien le text , l'Id , et la Date de chaque jour , ainsi que le tableau des alarmes
Structure jour
Id.i ; numero du gadget
Date_text.s ; la date liée au gadget
Text.s [11]; le text associé a ce jour
Saint.s
Array Alarme.s(24) ; 24 Alarmes possible par jours
Array Message_alarme.s(24)
Array Action.b(24) ; active desactive une alarme
EndStructure
Declare.b recherche_dans_list(dte)
Declare verif_text()
Declare.s get_jour(date.s)
; ******************* on creer un element par defaut *********
Global Newlist jour.jour()
If Filesize(GetCurrentDirectory()+"Agenda.ini")>-1 ; File exist ?
If OpenFile(#file,GetCurrentDirectory()+"Agenda.ini")
Pos_Ascenseur.i=ReadInteger(#file)
CloseFile(#file) ;|
Else
Pos_Ascenseur.i=0
Endif
Endif
;************* Fabrication de la liste des jours ***************
init_list()
Annee.s=str(Year(Date())) ;; Recup année actuelle
Charge_list(Annee.s)
; .ico format is available only on Windows
IconeName$ = "agenda.ico" ; <-- indiquez ici un icone pour le prg dans le Systray
IconeName2$="agenda2.ico"
LoadImage(#image_icone2, IconeName2$)
LoadImage(#image_icone, IconeName$)
Global Hauteur_fenetre=600 ; Minimum 400 ;o)
LoadFont(#font_titre,"Arial",24,#PB_Font_Bold)
If OpenWindow(#win, 0, 0, 1024, Hauteur_fenetre, "Agenda_Projet", #PB_Window_ScreenCentered|#PB_Window_Tool|#PB_Window_Invisible)
StickyWindow(#win, #true)
AddSysTrayIcon(#SysTrayIcone, WindowID(#win), ImageID(#image_icone))
SysTrayIconToolTip(#SysTrayIcone, "Agenda Projet by Zorro")
CreatePopupMenu(#PopUp) ; Cree un menu Pop-Up , CreatePopUp menu
MenuItem(1,"Quitter.") ; Ajout des menus , add items
SetGadgetFont(#PB_Default, FontID(#font_titre))
TextGadget(#titre, 600, 10, 150, 45, "Agenda")
SetGadgetFont(#PB_Default, #PB_Default)
TextGadget(#auteur, 750, 30, 200, 20, "By Zorro")
;
ButtonGadget(#bouton_help,900,30,80,25,"Help")
;
;-Timer creation
AddWindowTimer(#win, 888,2000); Actualisation affichage automatique
AddWindowTimer(#win, 889,30000); verif alarme toute les 30 secondes
; **********************************************
Larg=50:Haut=40:Coul_ecriture=Rgb(0,255,0) : Coul_fond=Rgb(0,0,0)
type_fonte.s="Arial" : taille_fonte.i=10
; **********************************************
Date.s="01/01/"+str(year(date()))
Calendrier (Larg,Haut,Coul_ecriture,Coul_fond,Date.s)
Resultat = EditorGadget(#Editor ,550, 100, 450, Hauteur_fenetre-168)
If LoadFont(#fonte_editeur, "Arial", 12)
SetGadgetFont(#Editor, FontID(#fonte_editeur)) ; la police par defaut est remplacee par celle chargee (Arial 16)
EndIf
Compteur_Ligne=GadgetHeight(#Editor)+(Gadgety(#Editor))
create_Z_Button(#efface, GadgetX(#editor), Compteur_Ligne,Larg, Haut,RGB(0,0,0), RGB(0,125,0), "Efface",type_fonte.s, taille_fonte.i)
; ******************** bouton AV/AR *******************************
create_Z_Button(#bouton_av, GadgetX(#editor)+GadgetWidth(#editor)-(Larg*2), Compteur_Ligne,Larg, Haut,RGB(0,0,0), RGB(0,125,0), "->",type_fonte.s, taille_fonte.i)
create_Z_Button(#bouton_ar, GadgetX(#editor)+(LArg*2), Compteur_Ligne,Larg, Haut,RGB(0,0,0), RGB(0,125,0), "<-",type_fonte.s, taille_fonte.i)
TextGadget(#text_num_page, GadgetX(#editor)+(GadgetWidth(#editor))/2, Compteur_Ligne+10, 20, 20, str(num_page))
; ****** Color Foncees *********************
SetWindowColor(#win,rgb(125,125,125))
SetGadgetColor(#titre,#PB_Gadget_BackColor,rgb(125,125,125))
SetGadgetColor(#auteur,#PB_Gadget_BackColor,rgb(125,125,125))
SetGadgetColor(#text_num_page,#PB_Gadget_BackColor,rgb(125,125,125))
SetGadgetColor(#Editor,#PB_Gadget_BackColor ,rgb(0,0,0))
SetGadgetColor(#Editor,#PB_Gadget_FrontColor ,rgb(0,200,0))
; une partie de la coloration se trouve dans la procedure Calendrier
; *******************************************
TextGadget(#jour_selectione, GadgetX(#editor), gadgetY(#editor)-20, 500, 20, "jour selectionné")
SetGadgetFont(#jour_selectione, FontID(#font_mois))
SetGadgetColor(#jour_selectione,#PB_Gadget_BackColor,rgb(125,125,125))
SetGadgetColor(#jour_selectione,#PB_Gadget_FrontColor,rgb(125,255,125))
; ********************** Preselection de Aujourd'hui**************************************
date_du_jour.s=FormatDate("%dd/%mm/%yyyy", Date())
Nbr_jour=nbjanvier(date_du_jour.s)
;Debug Nbr_jour
SelectElement( Jour(),Nbr_jour)
Mem_date=Nbr_jour
SetGadgetText(#Editor,Jour()\Text.s[1])
SetButton_Z_Color(jour()\Id.i,$0, RGB(42,145,0))
a = Val ( StringField (date_du_jour.s,3, "/" ))
If (bissextile( a) =#true )
If Nbr_jour=60
Fete.s="Auguste"
Endif
If Nbr_jour>60
Nbr_jour=Nbr_jour-1
Restore fetes
for i=1 to Nbr_jour
read.s fete.s
Next i
Endif
If Nbr_jour<60
Nbr_jour=nbjanvier(date_du_jour.s)
Restore fetes
for i=1 to Nbr_jour
read.s fete.s
Next i
Endif
Else ; pas année bissextile
Restore fetes
for i=1 to Nbr_jour
read.s fete.s
Next i
Endif
SetGadgetText(#jour_selectione,"Jour Selectionné :" +Get_jour(date_du_jour.s) +" "+date_du_jour.s+ " ST "+fete.s)
SetGadgetFont(#jour_selectione, FontID(#font_mois))
; ************************************************************
State=#True
Minimize(State)
;-Boucle Principale
Repeat
event= WaitWindowEvent(10)
select event
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_RightClick ; Un click droit affiche le menu , Right click display menu
DisplayPopupMenu(#PopUp, windowId(#win))
Case #PB_EventType_LeftClick ; Un click
State=-State
Minimize(State)
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 1
OpenFile(#file,GetCurrentDirectory()+"Agenda.ini")
WriteInteger(#file,Pos_Ascenseur.i)
CloseFile(#file) ;<
;
Sauvegarde_list()
End
EndSelect ;<
Case #PB_Event_Timer
;-Verif couleur bouton
If EventTimer() = 888
verif_text() ; active les jours qui contiennent un text
Endif
If EventTimer() = 889
;- VERIF ALARME
date_du_jour.s=FormatDate("%dd/%mm/%yyyy", Date())
Nbr_jour=nbjanvier(date_du_jour.s)
Annee_actuelle=Val(Stringfield(date_du_jour.s,3,"/"))
SelectElement(jour(),Nbr_jour) ; commence a 1 pas a zero
For x=1 to 10 ; pour chaque page
If jour()\text.s[x]<>""
Verif_Alarme_Text( ) ; toute les 10 secondes
Verif_alarme() ; verifie si une Alarme est a declencher aujourd'hui
Endif
Next x
Endif
Case #PB_Event_Gadget
if EventGadget()<367 ; on click sur un bouton
;;SetButton_Z_Color(Mem_date, Rgb(0,255,0) ,$0)
Get_date(EventGadget()) ; renvoi la date du jour choisi
Mem_date=EventGadget()
;**********
; apparamment, le numero du gadget variable "Mem_date" EST le numero du jour de l'année , mais bon on refait :
;debug jour()\Date_text.s
date_du_jour.s=FormatDate("%dd/%mm/%yyyy", ParseDate("%dd/%mm/%yyyy",jour()\Date_text.s ))
Nbr_jour=nbjanvier(date_du_jour.s)
;debug Nbr_jour
debug Nbr_jour
a = Val ( StringField (date_du_jour.s,3, "/" ))
If (bissextile( a) =#true )
If Nbr_jour=60
Fete.s="Auguste"
Endif
If Nbr_jour>60
Nbr_jour=Nbr_jour-1
Restore fetes
for i=1 to Nbr_jour
read.s fete.s
Next i
Endif
If Nbr_jour<60
Nbr_jour=nbjanvier(date_du_jour.s)
Restore fetes
for i=1 to Nbr_jour
read.s fete.s
Next i
Endif
Else ; pas année bissextile
Restore fetes
for i=1 to Nbr_jour
read.s fete.s
Next i
Endif
;**********
SetGadgetText(#Editor,Jour()\Text.s[num_page])
SetButton_Z_Color(jour()\Id.i,$0, RGB(42,145,0))
SetGadgetText(#jour_selectione,"Jour Selectionné :" +Get_jour(jour()\Date_text.s) +" "+jour()\Date_text.s+ " ST "+fete.s)
;***************** reinit les Alarmes *************************
For i=0 to 24
;jour()\Action.b(i)=#True ; remet les alarme en services
Next i
; ************************************************************************
Endif
Select EventGadget()
Case #bouton_help
MessageRequester("Help","Pour une alerte a 22h00"+chr(10)+"$22:00$ [le message qui va s'afficher ]" + chr(10) +" On peut creer des alertes sur plusieurs lignes")
Case #bouton_av
num_page=num_page+1
If num_page>10
num_page=1
Endif
SelectElement( Jour(),Mem_date)
SetGadgetText(#text_num_page,str(num_page))
SetGadgetText(#Editor,Jour()\Text.s[num_page])
Case #bouton_ar
num_page=num_page-1
If num_page<1
num_page=10
Endif
SelectElement( Jour(),Mem_date)
SetGadgetText(#text_num_page,str(num_page))
SetGadgetText(#Editor,Jour()\Text.s[num_page])
Case #bouton_affiche_mois
sauvegarde_list()
init_list()
Date.s="01/01/"+str(year(date()))
Charge_list(str(year(date())))
Calendrier (Larg,Haut,Coul_ecriture,Coul_fond,Date.s) ; recreation du calendrier
;
SetGadgetAttribute(#scroll_area, #PB_ScrollArea_Y, Position_mois )
Case #scroll_area
Pos_Ascenseur.i=GetGadgetAttribute(#scroll_area, #PB_ScrollArea_Y )
Case #bouton_avant
ClearGadgetItems(#Editor) ; efface l'editeur
; **********************************************
Larg=50:Haut=40:Coul_ecriture=Rgb(0,255,0) : Coul_fond=Rgb(0,0,0)
type_fonte.s="Arial" : taille_fonte.i=10
; **********************************************
sauvegarde_list()
init_list()
ajout_annee=ajout_annee-1
Date.s="01/01/"+str(year(date())+ajout_annee)
Charge_list(str(year(date())+ajout_annee))
Calendrier (Larg,Haut,Coul_ecriture,Coul_fond,Date.s) ; recreation du calendrier
Case #bouton_apres
ClearGadgetItems(#Editor) ; efface l'editeur
; **********************************************
Larg=50:Haut=40:Coul_ecriture=Rgb(0,255,0) : Coul_fond=Rgb(0,0,0)
type_fonte.s="Arial" : taille_fonte.i=10
; **********************************************
sauvegarde_list()
init_list()
ajout_annee=ajout_annee+1
Date.s="01/01/"+str(year(date())+ajout_annee)
Charge_list(str(year(date())+ajout_annee))
Calendrier (Larg,Haut,Coul_ecriture,Coul_fond,Date.s) ; recreation du calendrier
Case #editor
;-Editor
Select EventType()
Case #PB_EventType_Change
SelectElement(Jour(), Mem_date)
Jour()\Text.s[num_page]=GetGadgetText(#Editor)
verif_text() ; active les jours qui contiennent un text
;***************** reinit les Alarmes *************************
For i=0 to 24
;jour()\Action.b(i)=#True ; remet les alarme en services
jour()\Alarme.s(i)="" ; eteinds l'alarme
Jour()\Message_alarme.s(i)="" ; efface le text de l'alarme
Next i
; ************************************************************************
EndSelect
Case #Efface
ClearGadgetItems(#Editor) ; efface TOUTES LES PAGES DE l'editeur
For x=1 to 10
Jour()\text.s[x]=""
Next x
;***************** reinit les Alarmes *************************
For i=0 to 24
;jour()\Action.b(i)=#True ; remet les alarme en services
jour()\Alarme.s(i)="" ; eteinds l'alarme
Jour()\Message_alarme.s(i)="" ; efface le text de l'alarme
Next i
; ************************************************************************
Case #bouton_commute_icone
Icone_statut=-Icone_statut
;******************************
;;
EndSelect
EndSelect
Until event= #PB_Event_CloseWindow
OpenFile(#file,GetCurrentDirectory()+"Agenda.ini")
WriteInteger(#file,Pos_Ascenseur.i)
CloseFile(#file) ;
;
Sauvegarde_list()
EndIf
;-Fin
End
;
;
;-Zone Procedures
Procedure init_list()
;-Fabrique Liste
ClearList(Jour())
For i=0 to 366 ; par defaut un poil plus grand pour les annees bixectile
AddElement(Jour())
Jour()\Id.i=0
Jour()\Date_text.s=""
For x=1 to 10
Jour()\Text.s[x]=""
Next x
Next i
EndProcedure
;
Procedure Charge_list(Annee.s)
Name_file.s="Agenda_"+Annee.s+".json"
If FileSize(GetCurrentDirectory()+Name_file.s)>-1
LoadJSON(0, Name_file)
ExtractJSONList(JSONValue(0), jour())
EndIf
;conversion()
;***************** reinit les Alarmes *************************
For i=0 to 24
;jour()\Action.b(i)=#True ; remet les alarme en services
jour()\Alarme.s(i)="" ; eteinds l'alarme
Jour()\Message_alarme.s(i)="" ; efface le text de l'alarme
Next i
; ************************************************************************
EndProcedure
;
Procedure Sauvegarde_list()
;***************** reinit les Alarmes *************************
For i=0 to 24
;jour()\Action.b(i)=#True ; remet les alarme en services
jour()\Alarme.s(i)="" ; eteinds l'alarme
Jour()\Message_alarme.s(i)="" ; efface le text de l'alarme
Next i
; ************************************************************************
Annee.s=GetGadgetText(#titre_annee)
Name_file.s="Agenda_"+Annee.s+".json"
If FileSize(GetCurrentDirectory()+Name_file.s)>-1
CopyFile(GetCurrentDirectory()+Name_file.s,GetCurrentDirectory()+"Back_"+Name_file.s)
Endif
If CreateJSON(0)
InsertJSONList(JSONValue(0), jour())
EndIf
SaveJSON(0, GetCurrentDirectory()+Name_file)
EndProcedure
;
Procedure.s Get_date(bouton)
;by Zorro
If recherche_dans_list(EventGadget())=#true
Procedurereturn jour()\Date_text.s ; renvoi la date du bouton choisi
Else
ProcedureReturn ""
Endif
EndProcedure
;
Procedure bissextile(annee)
; annee bissextile ou pas ?
If (annee % 4 = 0 And annee % 100 <> 0) Or annee % 400 = 0
bissextile = #true
Else
bissextile = #false
EndIf
ProcedureReturn bissextile
EndProcedure
;
Procedure nbjanvier(ldate.s)
;Calcul du nombre de jours par rapport au premier janvier de la date
nbmois.s = "0,31,59,90,120,151,181,212,243,273,304,334"
j = Val ( StringField (ldate,1, "/" ))
m = Val ( StringField (ldate,2, "/" ))
a = Val ( StringField (ldate,3, "/" ))
nbjanvier = Val ( StringField (nbmois,m, "," ) )+ j
If (bissextile( a) =#true And m > 2)
nbjanvier = nbjanvier + 1
EndIf
ProcedureReturn nbjanvier
EndProcedure
;
Procedure nbr_jour_mois(date.s)
;By Zorro
Protected annee,i
nbj_m.s="31,28,31,30,31,30,31,31,30,31,30,31"
nbj_m_bi.s="31,29,31,30,31,30,31,31,30,31,30,31"
i=val(stringfield(date.s,2,"/"))
annee=val(stringfield(date.s,3,"/"))
if bissextile(annee)=#False
ProcedureReturn Val (Stringfield(nbj_m.s,i,","))
Else
ProcedureReturn Val (Stringfield(nbj_m_bi.s,i,","))
Endif
EndProcedure
;
Procedure.b recherche_dans_list(dte)
;by Zorro
find=#false
If ListSize(jour())>0
Foreach jour() ; on regarde si ce jour est dans la liste
If dte=jour()\Id.i
find=#true
Break
Endif
Next
ProcedureReturn find
Endif
EndProcedure
;
Procedure Verif_Alarme_Text( )
; Verifie si une Alarme est presente dans le Text du jour Actuel
; La liste est deja positione sur le bon jour
ReDim jour()\Alarme.s(24)
ReDim Jour()\Message_alarme.s(24)
Protected txt.s ,o=0,dep=0,dep2=0
For x=1 to 10 ; nbr_page
For i=1 to Len(jour()\Text.s[x])
;Ligne.s=StringField( jour()\text.s,1,chr(10))
ppos=FindString(jour()\text.s[x],"$",dep)
ppos_fin=FindString(jour()\text.s[x],"$",ppos)
ppos_m=FindString(jour()\text.s[x],"[",dep2)+1
ppos_m_fin=FindString(jour()\text.s[x],"]",ppos_m)
If ppos>0
jour()\Alarme.s(o)=mid(jour()\text.s[x],ppos,7)
dep=ppos+7
jour()\Alarme.s(o)=Trim(removeString( jour()\Alarme.s(o),"$",#PB_String_NoCase,1,2))
If ppos_m>0
If ppos_m_fin> ppos_m
Jour()\Message_alarme.s(o)=mid(jour()\Text.s[x],ppos_m,(ppos_m_fin-ppos_m))
Jour()\Message_alarme.s(o)=Trim(removeString(Jour()\Message_alarme.s(o),"[",#PB_String_NoCase))
Jour()\Message_alarme.s(o)=Trim(removeString(Jour()\Message_alarme.s(o),"]",#PB_String_NoCase))
dep2=ppos_m_fin
Endif
Endif
If o>23 ; Pas plus de 24 alarmes par jours
MessageRequester("Erreur","Trop d'alarmes, pour plus d'alarmes augmenter la dimension du tableau...")
o=24
Endif
o=o+1
Endif
Next i
Next x
EndProcedure
Procedure Verif_alarme()
; By Zorro
; Declenche l'alarme
Time.s=FormatDate("%hh:%ii", Date())
For i=0 to 24; our les 24 alarmes possibles
if ParseDate("%hh:%ii",jour()\Alarme.s(i))<= ParseDate("%hh:%ii",Time.s) and jour()\Alarme.s(i)<>""; ha... une alarme se presente
;calldebugger
MessageRequester("Alerte !" ,"Aujourd'hui a :"+jour()\Alarme.s(i)+chr(10)+ Jour()\Message_alarme.s(i))
For u=0 to 10 ; pour chaque page
If Jour()\Text.s[u]<>""
Jour()\Text.s[u]=ReplaceString( Jour()\Text.s[u],"$ ","$")
Jour()\Text.s[u]=ReplaceString( Jour()\Text.s[u]," $","$")
Jour()\Text.s[u]=ReplaceString( Jour()\Text.s[u],"$"+jour()\Alarme.s(i)+"$","-"+jour()\Alarme.s(i)+"-") ; remplace $10:00 par seulement 10:00 ce ne sera plus vu comme une alarme !
;
Jour()\Text.s[u]=ReplaceString( Jour()\Text.s[u],"[ ","[")
Jour()\Text.s[u]=ReplaceString( Jour()\Text.s[u]," [ ","[")
Jour()\Text.s[u]=ReplaceString( Jour()\Text.s[u],"["+Jour()\Message_alarme.s(i)+"]","("+Jour()\Message_alarme.s(i)+")")
SetGadgetText(#Editor,Jour()\Text.s[u])
Dim jour()\Alarme.s(24)
Dim Jour()\Message_alarme.s(24)
Verif_Alarme_Text( )
Endif
Next u
Endif
Next i
EndProcedure
Procedure verif_text()
;By Zorro
Protected date_du_jour.i ,Nbr_jour,date_observe.i
Protected Date_j.s
Date_j.s=FormatDate("%dd/%mm/%yyyy", Date())
date_du_jour.i=ParseDate("%dd/%mm/%yyyy",Date_j.s)
SelectElement(jour(),1) ; commence a 1 pas a zero
While NextElement(jour())
date_observe.i=ParseDate("%dd/%mm/%yyyy",jour()\Date_text.s)
Nbr_jour=jour()\id
For x=1 to 10
If jour()\text.s[x]<>""
Flag_ok=#true
Endif
Next x
If Flag_ok=#true
If date_observe.i<date_du_jour.i
SetButton_Z_Color(jour()\Id.i,RGB(0,255,0), RGB(143,0,131) ); jour Actif (Rayant un text) mais plus ancien que la date du jour ! on dessine en violet
ElseIf date_observe.i>date_du_jour.i ; on dessine en Jaune
SetButton_Z_Color(jour()\Id.i,$0, RGB(254,255,141)) ; jour Actif (ayant un text)
ElseIf date_observe.i=date_du_jour.i ; jour Actif (ayant un text) mais etant aujourd'hui (orange )
coul_ecriture=RGB(0,0,0)
coul_fond=RGB(255,132,58)
SetButton_Z_Color(Nbr_jour,coul_ecriture, coul_fond)
if Icone_statut=#true
ChangeSysTrayIcon(#SysTrayIcone, imageid(#image_icone2)) ;; change l'icone systray
Else
ChangeSysTrayIcon(#SysTrayIcone, imageid(#image_icone)) ;; change l'icone systray
Endif
Endif
ElseIf Flag_ok=#False And date_observe.i=date_du_jour.i ; Jour etant Aujourd'hui sans Text (Bleu)
Annee.s=GetGadgetText(#titre_annee)
_Annee.i=Year(Date());
If Val(Annee.s)=_Annee.i
coul_ecriture=RGB(0,0,0)
coul_fond=RGB(0,108,233)
SetButton_Z_Color(Nbr_jour,coul_ecriture, coul_fond)
ChangeSysTrayIcon(#SysTrayIcone, imageid(#image_icone)) ; change l'icone systray
Endif
Else
If jour()\id.i<>Mem_date
SetButton_Z_Color(jour()\Id.i,Rgb(0,255,0), $0) ; jour selectionné
Endif
Endif
;Next
Flag_ok=#False
Wend
EndProcedure
;
Procedure.s Get_jour(Date.s)
;Zorro
;Renvoi le jour de la date
Protected J.s
J.s="Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche"
num_date.i=ParseDate("%dd/%mm/%yyyy", date.s)
nnn=DayOfWeek(num_date.i)
If nnn=0:nnn=7:Endif
jour.s=StringField(J.s,nnn,",")
ProcedureReturn jour.s
EndProcedure
;
Procedure Get_jour_num(Date.s)
; Zorro
;Renvoi le numero du jour de la date
Protected J.s
J.s="Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche"
num_date.i=ParseDate("%dd/%mm/%yyyy", date.s)
jour=DayOfWeek(num_date.i)
If jour=0:jour=7:Endif
ProcedureReturn jour
EndProcedure
;
Procedure SetButton_Z_Color(id,coul_ecriture, coul_fond)
;by Zorro
gadgetZ(id)\Coul_ecriture= coul_ecriture
gadgetZ(id)\coul_fond=coul_fond
Set_Z_button(Id)
EndProcedure
;
Procedure SetGadget_Z_Font(Id, police.s)
;by Zorro
gadgetZ(id)\type_fonte.s=police.s
Set_Z_button(Id)
EndProcedure
;
Procedure SetGadget_Z_text(Id,txt.s)
;by Zorro
gadgetZ(id)\txt.s =txt.s
Set_Z_button(Id)
EndProcedure
;
Procedure Set_Z_button(Id_gadget)
; By Zorro
; permet d'activer les changements apporte dans la structure d'un Z_button
Shared Id
Id=Id_gadget
Protected x,y,larg,haut,txt.s,type_fonte.s,coul_ecriture,coul_fond
x=gadgetz(Id)\x
y=gadgetz(Id)\y
larg=gadgetz(Id)\Larg
Haut=gadgetz(Id)\Haut
coul_ecriture=gadgetz(Id)\coul_ecriture
coul_fond=gadgetz(Id)\coul_fond
txt.s=gadgetz(Id)\txt.s
type_fonte.s=gadgetz(Id)\type_fonte.s
taille_fonte.i=gadgetz(Id)\taille_fonte.i
If Larg<=0:Larg=8:EndIf
If Haut<=0:Haut=8:EndIf
If Isimage
FreeImage(Id)
EndIf
If IsFont
FreeFont(Id)
EndIf
If type_fonte.s="" : type_fonte.s="Arial":EndIf
If taille_fonte.i=0: taille_fonte.i=8:EndIf
If LoadFont(Id, type_fonte.s, taille_fonte.i)
If CreateImage(Id, larg, haut)
StartDrawing(ImageOutput(Id))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0,larg, haut, coul_fond)
DrawingFont(FontID(Id))
FrontColor(coul_ecriture)
DrawText((Larg-TextWidth(txt))/2,(Haut-TextHeight(txt))/2,Txt.s)
StopDrawing()
EndIf
EndIf
If IsGadget(Id)
SetGadgetAttribute(Id, #PB_Button_Image, ImageID( Id))
EndIf
EndProcedure
;
Procedure create_Z_Button(Id_gadget, x, y, Larg, Haut,coul_ecriture, coul_fond, txt.s,type_fonte.s, taille_fonte.i)
; by Zorro
; cree un bouton image avec couleur fond+ couleur ecriture +texte
; Id servira a donner le numero du gadget, le numero de l'image, et le numero de la fonte !!
; si le bouton existe deja, il est efface , puis recree !
If Larg<=0:Larg=8:EndIf
If Haut<=0:Haut=8:EndIf
gadgetz(Id_gadget)\x=x
gadgetz(Id_gadget)\y=y
gadgetz(Id_gadget)\Larg=larg
gadgetz(Id_gadget)\Haut=Haut
gadgetz(Id_gadget)\coul_ecriture=coul_ecriture
gadgetz(Id_gadget)\coul_fond=coul_fond
gadgetz(Id_gadget)\txt.s=txt.s
gadgetz(Id_gadget)\type_fonte.s=type_fonte.s
gadgetz(Id_gadget)\taille_fonte.i=taille_fonte.i
Shared Id
Id=Id_gadget
If IsFont(Id)
FreeFont(Id)
EndIf
If IsImage(Id)
FreeImage(Id)
EndIf
If IsGadget(Id)
FreeGadget(Id)
EndIf
If type_fonte.s="" : type_fonte.s="Arial":EndIf
If taille_fonte.i=0: taille_fonte.i=8:EndIf
If LoadFont(Id, type_fonte.s, taille_fonte.i)
If CreateImage(Id, larg, haut)
StartDrawing(ImageOutput(Id))
DrawingMode(#PB_2DDrawing_Transparent)
Box(0, 0,larg, haut, coul_fond)
DrawingFont(FontID(Id))
FrontColor(coul_ecriture)
DrawText((Larg-TextWidth(txt))/2,(Haut-TextHeight(txt))/2,Txt.s)
StopDrawing()
EndIf
EndIf
ButtonImageGadget(Id,x,y,larg,Haut,ImageID( Id))
ProcedureReturn #True
EndProcedure
;
Procedure Calendrier (Larg,Haut,Coul_ecriture,Coul_fond,Date.s)
;By Zorro
;-Calendrier
;;;;ClearList(Jour())
;
ScrollAreaGadget(#scroll_area, 10, 100, 450,Hauteur_fenetre-168, 400, 3800, 30)
;
SetGadgetFont(#scroll_area, FontID(#font_tag))
TextGadget(#titre_calendar, 1, 1, 130, 35, "Calendrier by Dobro")
SetGadgetFont(#PB_Default, #PB_Default)
SetGadgetColor(#scroll_area,#PB_Gadget_BackColor,rgb(125,125,125))
; Titre Annee
Annee.s=stringfield(date.s,3,"/")
X_titre_annee=4*Larg-(Larg/2)
; ********************************************************
;Larg=50:Haut=40:Coul_ecriture=Rgb(0,255,0) : Coul_fond=Rgb(0,0,0)
;type_fonte.s="Arial" : taille_fonte.i=10
; **********************************************
;Date.s="01/01/"+year(date())
_numero_jour_depart=Get_jour_num(Date.s)
; **********************************************
Compteur_Ligne=Compteur_ligne+5
Compteur_colonne=_numero_jour_depart-1
For M=1 to 12 ; pour les 12 Mois
Nbr_jours_mois=nbr_jour_mois("01/"+RSet(str(M),2,"0")+"/"+Annee.s)
y_mois=(Compteur_Ligne*Haut)-Haut
Y_jour=y_mois+(Haut/2)
SetGadgetFont(#PB_Default, FontID(#font_mois))
nn=TextGadget( #pb_any,X_titre_annee,y_mois,150,30,stringfield(Mo.s,M,","))
SetGadgetColor(nn,#PB_Gadget_BackColor,rgb(125,125,125))
If M= Month(Date()) ; le mois Actuel est en cours de fabrication
Position_mois= GadgetY(nn,#PB_Gadget_ContainerCoordinate) ; on recup le y du gadget ayant le nom du mois actuel
Endif
SetGadgetFont( #PB_Default, #PB_Default)
For jj=1 to 7 ; sur 7 colonnes
nn=TextGadget( #pb_any,jj*Larg,y_jour,150,30,stringfield(Jo.s,jj,","))
SetGadgetColor(nn,#PB_Gadget_BackColor,rgb(125,125,125))
Next jj
For J=1 to Nbr_jours_mois ; ici on creer les jours en fonction du mois (30 ou 31 jours )
Compteur_jour=Compteur_jour+1
Compteur_colonne=Compteur_colonne+1
IF Compteur_colonne<=7
Else
Compteur_colonne=1
Compteur_Ligne=Compteur_ligne+1
Endif
Txt.s=str(J)
create_Z_Button(Compteur_jour, Compteur_colonne*Larg-(Larg/2), Compteur_Ligne*Haut, Larg, Haut,coul_ecriture, coul_fond, txt.s,type_fonte.s, taille_fonte.i)
;AddElement(jour())
SelectElement(Jour(),Compteur_jour)
If Jour()\text.s[x]=""
jour()\Date_text.s =Rset(Txt.s,2,"0")+"/"+Rset(Str(M),2,"0")+"/"+Annee.s
jour()\Id.i=Compteur_jour
Endif
Next J
Compteur_Ligne=Compteur_ligne+3
Next M
; ********************* Date du jour **************************
_Annee.i=Year(Date()); Annee de depart
_Mois.i=Month(Date()); mois de depart
_jour.i=Day(Date()); jour de depart
date_du_jour.s=FormatDate("%dd/%mm/%yyyy", Date())
coul_ecriture=RGB(0,0,0)
coul_fond=RGB(0,108,233)
Nbr_jour=nbjanvier(date_du_jour.s)
If Val(Annee.s)=_Annee.i
SetButton_Z_Color(Nbr_jour,coul_ecriture, coul_fond)
Endif
Coul_ecriture=Rgb(0,255,0)
Coul_fond=Rgb(0,0,0)
; ***********************************************************
Compteur_Ligne=0
Compteur_colonne=0
Compteur_jour=0
CloseGadgetList()
; ********** boutons changement Annee ***********************************************************
Compteur_Ligne=GadgetY(#scroll_area)-(Haut+10)
create_Z_Button(#bouton_avant, 1*Larg-(Larg/2), Compteur_Ligne,Larg, Haut,coul_ecriture, coul_fond, "<-",type_fonte.s, taille_fonte.i)
create_Z_Button(#bouton_apres, 7*Larg-(Larg/2), Compteur_Ligne , Larg, Haut,coul_ecriture, coul_fond, "->",type_fonte.s, taille_fonte.i)
;
If LoadFont(#font_annee,"Arial",24,#PB_Font_Bold)
TextGadget( #titre_annee,X_titre_annee,Compteur_Ligne,150,45,Annee.s)
SetGadgetFont(#titre_annee, FontID(#font_Annee))
Endif
SetGadgetColor(#titre_annee,#PB_Gadget_BackColor,rgb(125,125,125))
SetGadgetFont( #PB_Default, #PB_Default)
; *******************************************************************************************
SetGadgetAttribute(#scroll_area, #PB_ScrollArea_Y , 3800) ; pour mettre a jour l'affichage
SetGadgetAttribute(#scroll_area, #PB_ScrollArea_Y , 0)
SetGadgetAttribute(#scroll_area, #PB_ScrollArea_Y, Pos_Ascenseur.i )
; *********************** bouton affiche Mois ************************************
Compteur_Ligne=GadgetHeight(#scroll_area)+(Gadgety(#scroll_area))
create_Z_Button(#bouton_affiche_mois, 1*Larg-(Larg/2), Compteur_Ligne,Larg, Haut,RGB(0,0,0), RGB(0,125,0), "RePos",type_fonte.s, taille_fonte.i)
; ************************************************************************
create_Z_Button(#bouton_commute_icone, 4*Larg-(Larg/2), Compteur_Ligne,Larg+4, Haut,RGB(0,0,0), RGB(0,125,0), "ico_on_off",type_fonte.s, taille_fonte.i)
EndProcedure
Procedure Minimize(Flag.b) ; pour le systray
If Flag = #True
HideWindow(#Win, 1) ; Reduit la fenetre , Minimize window
OpenFile(#file,GetCurrentDirectory()+"Agenda.ini")
WriteInteger(#file,Pos_Ascenseur.i)
CloseFile(#file) ;<
Sauvegarde_list()
Else
HideWindow(#Win, 0) ; Affiche la fenetre , Display the window
EndIf
EndProcedure
Datasection
fetes:
data.s "Jour de l'an","Basile","Geneviéve","Odilon","Edouard","Ephiphanie","Raymond","Lucien","Alix","Guillaume","Paulin","Tatiana","Yvette","Nina"
data.s "rémi","Marcel","Roseline","Prisca","Marius","Sébastien","Agnès","Vincent","Barnard","Fr_de_salle","Conv_St_Paul","Paule","Angèle","Th d'aquin"
data.s "Gildas","Martine","Marcelle","Ela","Chandeleur","Blaise","Véronique","Agathe","Gaston","Eugénie","Jacqueline","Apolline","Arnaud","N-D-Lourdes"
data.s "Félix","Béatrice","Valentin","Claude","Julienne","Alexis","Bernadette","Gabin","Aimé","Damien","Isabelle","Lazard","Modeste","Romeo","Cendre"
data.s "Honorine","Romain","Albin","Charles le bon","Guénolé","Casimir","Olive","Colette","Félicité","Jean de Dieu","Françoise","Vivien"
data.s "Rosine","Justine","Rodrigue","Mathilde","Louise","Bénédiste","Patrick","Cyrille","Joseph","Printemps","Clémence","Léa","Victorien","Cath.de suede"
data.s "Annonciation","Lara","Alberte","Gontran","Gwladys","Amédée","Benjamin","Hugues","Sandrine","Richard","Isidore","Irène","Marcellin","Baptiste"
data.s "Julie","Gautier","Fulbert","Stanislas","Jules","Ida","Maxime","Paterne","Bernadette","Anicet","Parfait","Emma","Odette","Anselme","Alexandre","Georges"
data.s "Fidele","Marc","Espérance","Siméon","Valérie","Catherine de sienne","Robert","fetes du travail","Boris","Phillipe","Sylvain","Judith","Prudence"
data.s "Giséle","Victoire 45","Pacôme","Solange","Estelle","Achille","Rolande","Mathias","Denise","Honoré","Pascal","Eric","Yves","Bernardin","Constantin","Emile"
data.s "Didier","Donatien","Sophie","Bérenger","Augustin","Germain","Géraldine","Ferninand","Périne","Justin","Blandine","Kévin","Clotilde","Igor","Norbert","Gilbert"
data.s "Médard","Diane","Landry","Barnabé","Guy","Antoine","Valérie","Germaine","Régis","Hervé","Armand","Romuald","Sylvére","Eté","Alban","Audrey","Jean","Prosper"
data.s "Anthelme","Fernand","Irenée","Pierre/Paul","Martial","Thierry","Martinien","Thomas","Florent","Antoine","Mariette","Raoul/Tristan","Thibault","Amandine","Ulrich","Benoit"
data.s "Olivier","Henri/Joël","Fête Nationale","Donald","Carmen/Camelia","Charlotte","Frédéric","Arsène","Marina","Victor","Madeleine","Brigitte","Christine","Jacques"
data.s "Anne","Nathalie","Samson","Marthe","Juliette","Ignace","Alphonse","Julien","Lydie","Jean-Marie","Abel","Sauveur","Gaetan","Dominique","Amour","Laurent","Claire"
data.s "Clarisse","Hippolyte","Evrard","Marie","Armel","Hyacinthe","Hélène","Heudes","Bernard","Christophe","Fabrice","Rose","Barthélémy","Louis","Nathacha","Monique"
data.s "Augustin","Sabine","Fiacre","Aristide","Gilles","Ingrid","Grégoire","Rosalie","Bertin","Bertrand","Reine","Adrien","Alain","Inès","Patient","Apollinaire","Aimé","Cyprien"
data.s "Roland","Edith","Renaud","Nadège","Emilie","Eustache","Mathieu","Maurice","Automne","Anatole","Solenn/Aurélie","Damien","Adolphe","Lucas","Michel","Jérome"
data.s "thérese","Léger","Gérard","Aurore/roxanne","Fleur","Bruno","Serge","Murielle","Denis","Ghislain","Firmin","Félix","Géraud","Juste","Théodore","Edwige","Baudoin/Solenn"
data.s "Luc","René","Adeline","Céline","Elodie","Elfi/Ode","Florentin","Crépin","Dimitri","Emeline","Simon","Narcisse","Bienvenue","Quentin/Halloween","Toussaint","Défunts"
data.s "Hubert","Charles","Sylvie","Léonard","Carine","Geoffroy","Théodore","Léon","Armistice 14-18","Christian/Tristan","Brice","Sidoine","Albert/Malo","Marguerite","Elisabeth","Aude","Tanguy"
data.s "Edmond","Maur","Cécile","Clément","Flora","Catherine","Delphine","Maxime","Eode","Saturnin","André","Florence","Vivianne","Xavier","Barbe","Gérald","Nicolas"
data.s "Ambroise","Im Conception","Léocardie","Romaric","Daniel","Corentin","Lucie","Odille","Ninon,","Alice","Gaël","Gatien","Urbain","Théophile","Hiver","Françoise/Xaviere"
data.s "Armand","Adèle","Noël","Etienne","Ivan/Yannick","Innocents","David","Roger","Sylvestre" ,"-"
EndDataSection
; Epb