Page 2 sur 2

Re: Un autre agenda..

Publié : jeu. 31/août/2017 16:10
par MLD
Bonjour a tous

Voici une nouvelle version de mon agenda. :lol:
Le code a été un peu remanié. :roll:
Plus besoin de compiler un pbi a part. :lol:
la suggestion de Zorro a été pris en compte. Maintenant les jours ou il y a des écritures apparaissent en gras et italique dans les calendriers. :lol:
Il ne vous reste plus qu'a trouver 4 icones pour mettre a la place des miennes. :oops:
Bon rendez-vous. :wink:

Code : Tout sélectionner

;============== MLD =================
;== 20/1/2014- modif le 31/08/2017 ==
;=========== PB 5.60 ================
;==============
;***constantes***
; calendrier  journalier
#fenagd = 1:#btajd = 4:
#text1 = 5:#text2 = 6:#text3 = 7:#text4 = 8
#txtj1 = 10:#txtj2 = 11:#txtj3 = 12:#txtj4 = 13:#txtj5 = 14:#txtj6 = 15:#txtj7 = 16:#txtj8 = 17:#txtj9 = 18:#txtj10 = 19
#txtj11 = 20:#txtj12 = 21:#txtj13 = 22:#txtj14 = 23:#txtj15 = 24:#txtj16 = 25:#txtj17 = 26:#txtj18 = 27:#txtj19 = 28:#txtj20 = 29
#txtj21 = 30:#txtj22 = 31:#txtj23 = 32:#txtj24 = 33:#txtj25 = 34:#txtj26 = 35:#txtj27 = 36:#txtj28 = 37:#txtj29 = 38:#txtj30 = 39
#txtj31 = 40:#txtj32 = 41:#txtj33 = 42:#txtj34 = 43:#txtj35 = 44:#txtj36 = 45:#txtj37 = 46:#txtj38 = 47:#txtj39 = 48:#txtj40 = 49
#txtj41 = 50:#txtj42 = 51
#txtj43 = 60:#txtj44 = 61:#txtj45 = 62:#txtj46 = 63:#txtj47 = 64:#txtj48 = 65:#txtj49 = 66:#txtj50 = 67:#txtj51 = 68:#txtj52 = 69
#txtj53 = 70:#txtj54 = 71:#txtj55 = 72:#txtj56 = 73:#txtj57 = 74:#txtj58 = 75:#txtj59 = 76:#txtj60 = 77:#txtj61 = 78:#txtj62 = 79
#txtj63 = 80:#txtj64 = 81:#txtj65 = 82:#txtj66 = 83:#txtj67 = 84:#txtj68 = 85:#txtj69 = 86:#txtj70 = 87:#txtj71 = 88:#txtj72 = 89
#txtj73 = 90:#txtj74 = 91:#txtj75 = 92:#txtj76 = 93:#txtj77 = 94:#txtj78 = 88:#txtj79 = 89:#txtj80 = 90:#txtj81 = 91:#txtj82 = 92
#txtj83 = 93:#txtj84 = 94:#txtj85 = 95:#txtj86 = 96:#txtj87 = 97:#txtj88 = 98:#txtj89 = 99:#txtj90 = 100:#txtj91 = 101:#txtm = 102
;jours de la semaine + mois
#txtjs1 = 111:#txtjs2 = 112:#txtjs3 = 113:#txtjs4 = 114:#txtjs5 = 115:#txtjs6 = 116:#txtjs7 = 117:#txtjs8 = 118:#txt2js1 = 120:#txt2js2 = 121
#txt2js3 = 122:#txt2js4 = 123:#txt2js5 = 124:#txt2js6 = 125:#txt2js7 = 126:#txt2m = 128
;boutons des mois
#btmp1 = 130:#btmm1 = 131
;commades générales
#btstop = 140:#bteffrv = 141:#bteffan = 142:#textefan = 143:#stringefan = 144:#btokefan = 145:#btimp = 146
;pour les autres boutons et gadgets
#texttrai1 = 150:#texttrai2 = 151:#texth8 = 152:#texth830 = 153:#texth9 = 154:#texth930 = 155:#texth10 = 156:#texth1030 = 157:#texth11 = 158
#texth1130 = 159:#texth12 = 160:#texth1230 = 161:#texth13 = 162:#texth1330 = 163:#texth14 = 164:#texth1430 = 165:#texth15 = 166:#texth1530 = 167
#texth16 = 168:#texth1630 = 169:#texth17 = 170:#texth1730 = 171:#texth18 = 172:#texth1830 = 173:#texth19 = 174:#texth1930 = 175:#texth20 = 176
#stringh1 = 177:#stringh2 = 178:#stringh3 = 179:#stringh4 = 180:#stringh5 = 181:#stringh6 = 182:#stringh7 = 183:#stringh8 = 184:#stringh9 = 185
#stringh10 = 186:#stringh11 = 187:#stringh12 = 188:#stringh13 = 189:#stringh14 = 190:#stringh15 = 191:#stringh16 = 192:#stringh17 = 193
#stringh18 = 194:#stringh19 = 195:#stringh20 = 196:#stringh21 = 197:#stringh22 = 198:#stringh23 = 199:#stringh24 = 200:#stringh25 = 201
#texttrai3 = 202:#texttrai4 = 203:#texttrai5 = 204:#agimg = 205:#textinfo = 206
;fichier
#Fag = 500
;images
#Image0 = 900:#Image1 = 901:#Image2 = 902:#Image3 = 903:#Image4 = 904
;ecran
#Ldef = 1280 :#Hdef = 800
;***fin constantes***

CatchImage(#Image0, ?Image0)
CatchImage(#Image1, ?Image1)
CatchImage(#Image2, ?Image2)
CatchImage(#Image3, ?Image3)
CatchImage(#Image4, ?Image4)

DataSection
Image0: :IncludeBinary "47.ico";icone pour le bouton arrêt du logiciel
Image1: :IncludeBinary "283.ico";icone pour le bouton efface la ligne en cours
Image2: :IncludeBinary "315.ico";icone pour le bouton imprime
Image3: :IncludeBinary "378.ico";icone pour le bouton supprime une année
Image4: :IncludeBinary "380.ico";icone montre ou réveil matin pour faire joli 
EndDataSection

If DefaultPrinter() <> 0
 printer_DC.l = StartDrawing(PrinterOutput())
 If printer_DC.l
  DPIHZ.l = GetDeviceCaps_(printer_DC,#LOGPIXELSX)
 EndIf
 StopDrawing()
EndIf
Select DPIHZ.l
 Case 600
  Global FontID6 = LoadFont(6,"MS san serif",60 ,#PB_Font_HighQuality);pour imprimante
 Default 
  Global FontID6 = LoadFont(6,"MS san serif",30 ,#PB_Font_HighQuality);pour imprimante
EndSelect

Global tdate$
Global indstrok.B = 0
Global av$
Declare affcal(tdate$)
Declare moischif(nommois$)
Declare compare(av$,ap$)
Declare detectext()

Global FontID1 = LoadFont(1,"MS san serif",12 ,#PB_Font_HighQuality)
Global FontID2 = LoadFont(2,"MS san serif",18 ,#PB_Font_HighQuality)  
Global FontID3 = LoadFont(3,"MS san serif",14 ,#PB_Font_HighQuality) 
Global FontID4 = LoadFont(4,"MS san serif",36 ,#PB_Font_HighQuality) 
Global FontID5 = LoadFont(5,"MS san serif",28 ,#PB_Font_HighQuality)
Global FontID7 = LoadFont(7,"MS san serif",12 ,#PB_Font_Bold|#PB_Font_Italic|#PB_Font_HighQuality)
Global EPframeH.d,EPframeL.d 

Macro coulfond(gad)
  SetGadgetColor(gad,#PB_Gadget_BackColor,$CCCCCC)
EndMacro

Procedure resizefontecran(gad,num.b)
definecrlt.d = GetSystemMetrics_(#SM_CXSCREEN)
Select num
  Case 1
    If definecrlt.d > 1441
      SetGadgetFont(gad, FontID(1))
    EndIf  
  Case 2
    If definecrlt.d > 1400
      SetGadgetFont(gad, FontID(2))
    Else
      SetGadgetFont(gad, FontID(3)) 
    EndIf
   Case 3
     If definecrlt.d > 1400
      SetGadgetFont(gad, FontID(3))
    Else
      SetGadgetFont(gad, FontID(1)) 
    EndIf
   Case 4
     If definecrlt.d > 1400
      SetGadgetFont(gad, FontID(4))
    Else
      SetGadgetFont(gad, FontID(5)) 
    EndIf 
  EndSelect      
EndProcedure

Procedure GestionCaret(Gadget) ; Gestion du caret dans stringGadget
      SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)    
      y = Debut_Position
      Texte.s = GetGadgetText(Gadget)
      x =Len(Texte)
      Texte2.s = Left(Texte,y ) + Right(Texte,x-y)
      SendMessage_(GadgetID(Gadget), #EM_SETSEL, x, x) 
EndProcedure
;>>>>>>>>>>>>>>>>>>>>>>>>> Fen auto >>>>>>>>>>>>>>>>>>>>>
Procedure Ywp(hp.d,optwp.i)
definecrht.d = GetSystemMetrics_(#SM_CYSCREEN)
Select optwp.i
  Case 1
   ProcedureReturn 0 ;en haut de l'écran
 Case 2
  If definecrht.d = #Hdef
   ProcedureReturn hp * 1
  Else
   ProcedureReturn hp * (definecrht /#Hdef)
  EndIf 
EndSelect   
EndProcedure

Procedure Hw(Dh.d)
definecrht.d = GetSystemMetrics_(#SM_CYSCREEN)
Define tepSVEData.RECT:Define tpeAPPData.APPBARDATA
SHAppBarMessage_(5,tpeAPPData)
tepSVEData\top = tpeAPPData\rc\Top
tepSVEData\bottom = tpeAPPData\rc\Bottom
htTaskbarwin = tepSVEData\bottom - tepSVEData\top
OpenWindow(2000,0,0,200,200,"",#PB_Window_SystemMenu|#PB_Window_Invisible)
GetTitleBarInfo_(WindowID(2000),pti)
If OSVersion() = #PB_OS_Windows_XP
 EPframeH.d = WindowX(2000, #PB_Window_InnerCoordinate)
 EPframeL.d = WindowX(2000, #PB_Window_InnerCoordinate)
Else
 EPframeH = (WindowX(2000, #PB_Window_InnerCoordinate)*3)
 EPframeL = WindowX(2000, #PB_Window_InnerCoordinate)  
EndIf  
Httitre.i = WindowY(2000, #PB_Window_InnerCoordinate)
CloseWindow(2000)
If definecrht <> #Hdef
 hwq.d =  Dh * (definecrht /#Hdef)
 ProcedureReturn Hwq.d
Else
 Hwq.d =  Dh
 ProcedureReturn Hwq.d 
EndIf  
EndProcedure

Procedure XWp(lp.d,optwp.i)
definecrlt.d = GetSystemMetrics_(#SM_CXSCREEN)
Select optwp.i
 Case 1
  ProcedureReturn 2 ;a gauche
 Case 2
  If definecrlt <> #Ldef
   ProcedureReturn lp.d * (definecrlt /#Ldef)
  Else
   ProcedureReturn lp.d
  EndIf 
EndSelect 
EndProcedure

Procedure Lw(Dl.d,optw.i)
definecrlarg = GetSystemMetrics_(#SM_CXSCREEN)
Select optw.i
 Case 1 ;largeur max avec bordure
  Lbw.d = definecrlarg - ((EPframeL*2)+4)
  ProcedureReturn Lbw.d
 Case 2 ;largeur max sans bordure
  Lbw.d = definecrlarg
   ProcedureReturn Lbw.d
 Case 3 ;largeur quelconque
  If definecrlarg <> #Ldef
    hwq.d = Dl* (definecrlarg /#Ldef)
    ProcedureReturn hwq.d
  Else 
    Lbw.d = Dl
    ProcedureReturn Lbw.d
  EndIf
EndSelect  
EndProcedure

Procedure kh(Gh.d)
definecrht.d = GetSystemMetrics_(#SM_CYSCREEN)
If definecrht = #Hdef
 ProcedureReturn Gh 
Else 
 ProcedureReturn Gh * (definecrht/#Hdef)
EndIf 
EndProcedure

Procedure kl(Gl.d)
definecrlarg.d = GetSystemMetrics_(#SM_CXSCREEN) 
If definecrlarg = #Ldef
 ProcedureReturn Gl
Else
 ProcedureReturn Gl *(definecrlarg /#Ldef)
EndIf
EndProcedure 

Procedure Forme(win)
 Region = CreateRoundRectRgn_(0, 0, WindowWidth(win), WindowHeight(win), 20, 20) ; Création de la région pour faire une fenêtre avec les angles arrondis
 SetWindowRgn_(WindowID(win), Region, #True) ; On applique la région
 DeleteObject_(Region) ; On supprime la région
EndProcedure

Procedure ToolTipMic(WindowNumber.l,GadgetNumber.l,Text.s,couleurf)
  Protected Balloon.TOOLINFO
  Tooltip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID(WindowNumber),0,GetModuleHandle_(0),0)
  SendMessage_(Tooltip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(Tooltip,#TTM_SETTIPBKCOLOR,couleurf,0)
  SendMessage_(Tooltip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  If IsGadget(GadgetNumber)
    Balloon\hwnd=GadgetID(GadgetNumber)
    Balloon\uId=GadgetID(GadgetNumber)
  Else
    Balloon\hwnd=GadgetNumber
    Balloon\uId=GadgetNumber
  EndIf
  Balloon\lpszText=@Text
  SendMessage_(Tooltip,#TTM_ADDTOOL,0,@Balloon)
  ProcedureReturn Tooltip
EndProcedure
;=========== fichier =================
Global numenrfag.w
Procedure.l nbenrfag(fichier$)
ReadFile(#Fag,fichier$)
lectlig$ = ReadString(#Fag)
nbenrligne.l = Lof(#Fag)/(Len(lectlig$)+2)
CloseFile(#Fag)
ProcedureReturn nbenrligne.l
EndProcedure

Procedure.l enrfag(Numenrfich.w)
a$ = Str(Numenrfich.w) + Space(5 - Len(Str(Numenrfich.w)))+Chr(191)
b$ = Right(tdate$,4) 
c$ = Mid(tdate$,3,2)
If Left(c$,1) = "0" :c$ = Mid(c$,2,1):EndIf 
d$ = Left(tdate$,2)
e$ = (b$ + c$ + d$) + Space(8 - (Len(b$)+Len(c$)+Len(d$)))+Chr(191)
ligjour$ = a$ + e$
For zz = 177 To 201 
ligjour$ = ligjour$ + GetGadgetText(zz)+ Space(60 - Len(GetGadgetText(zz)))+Chr(191)
Next
OpenFile(#Fag,"Agd.mld")
Nbenrfich.w = (Lof(#Fag)/(Len(ligjour$)+2))
If Numenrfich.w > Nbenrfich.w
 FileSeek(#Fag,Lof(#Fag));positionne a la fin du fichier
Else
 FileSeek(#Fag,(Numenrfich.w * 1542)-1542);positionne sur le début de la bonne ligne 
EndIf 
WriteStringN(#Fag,ligjour$);enregistre
CloseFile(#Fag)
EndProcedure 

Procedure controllect(tdate$)
For xz = 177 To 201 ;raz des strings
 SetGadgetText(xz,"")
Next 
Global av$ = ""
b$ = Right(tdate$,4) 
c$ = Mid(tdate$,3,2)
If Left(c$,1) = "0" :c$ = Mid(c$,2,1):EndIf 
d$ = Left(tdate$,2)
e$ = b$ + c$ + d$
Okenr.b = 0
If ReadFile(#Fag, "Agd.mld")
    While Eof(#Fag) = 0   
      ligjour$ = ReadString(#Fag)
      If e$ = Trim(StringField(ligjour$,2,Chr(191)))
       okenr = 1
       Break
      EndIf 
    Wend
    CloseFile(#Fag)
EndIf
If okenr = 1 ;des enregistrement a cette date existe    
   indstring.w = 2 ;remplis les strings
   For zz = 177 To 201 
    indstring = indstring +1 
    SetGadgetText(zz,Trim(StringField(ligjour$,indstring ,Chr(191))))
    GestionCaret(zz) 
   Next
   Global numenrfag.w = Val(StringField(ligjour$,1,Chr(191))) ; indique le numéro de ligne enregistrée
   For zx = 177 To 201 
     av$ = av$ + Trim(GetGadgetText(zx)); remplis une variable avec les strings pour comparaison avant enr
   Next 
Else
   For zx = 177 To 201 
     av$ = av$ + Trim(GetGadgetText(zx)); remplis une variable avec les strings pour comparaison avant enr
   Next 
   numenrfag.w = 0  
EndIf
SetActiveGadget(177) 
EndProcedure

Procedure controlenr()
OpenFile(#Fag,"Agd.mld") ;pour la première utilisation du logiciel
If nbenrfag("Agd.mld")= 0
EndIf
For zx = 177 To 201 ;remplis une variable avec les strings pour comparaison avant enr (pour <> avec la var lecture)
   ap$ = ap$ + Trim(GetGadgetText(zx))
Next
If numenrfag.w = 0  ; c'est un nouvel enr
  If compare(av$,ap$) = 1
   numenrfag.w = nbenrfag("Agd.mld") +1
   enrfag(numenrfag.w)
  EndIf
Else
  If compare(av$,ap$) = 1 ;c'est une modif des RV
   enrfag(numenrfag.w)
  EndIf
EndIf
ap$ = ""   
EndProcedure
;======================================
Procedure bissextile(annee) 
    If (annee % 4 = 0 And annee % 100 <> 0) Or annee % 400 = 0
        bissextile= #True
    Else
        bissextile = #False
    EndIf
    ProcedureReturn bissextile
EndProcedure 

Procedure Ffix(j,m)
Dt$ = Str(j) + "/" + Str(m)
Select Dt$
 Case "1/1" ;1er janvier
  indf.B = 1 
 Case "1/5" ;1er mai
  indf.B = 1
 Case "8/5" ;8 mai
  indf.B = 1
 Case "14/7" ;14 juillet
  indf.B = 1 
 Case "15/8" ;15 aout
  indf.B = 1 
 Case "1/11" ;1 Novembre
  indf.B = 1
 Case "11/11" ;11 novembre
  indf.B = 1 
 Case "25/12" ;25 décembre
  indf.B = 1
 Default
  indf.B = 0
EndSelect
ProcedureReturn indf.B         
EndProcedure

Procedure calulftrelig(jr,mr,y)
datref$ = FormatDate("%dd%mm%yyyy",Date(y,mr,jr,0,0,0)) 
;dimanche de paque
c.w = y / 100 
n.w =  (y % 19) 
k.w = (c - 17) / 25 
b.w = c /4 
e.w = (c - k) / 3 
f.w = c - b - e + (19 * n) + 15 
h.w =  (f % 30) 
p.w = h / 28 
q.w = 29 / (h + 1)
r.w = (21 - n) / 11 
i.w = h - (p * (1 - (p * q * r)))
s.w = y / 4 
t.w = c / 4 
u.w = y + s + i + 2 - c + t 
j.w =  (u % 7) 
w.w = (i - j + 40) / 44  
m.w = 3 + w  
x.w = m / 4 
d.w = i - j + 28 - (31 * x)
 Dimanchepaque$ = FormatDate("%dd%mm%yyyy",Date(y,m,d,0,0,0))  
 lundipaque$ = FormatDate("%dd%mm%yyyy",AddDate(Date(y,m,d,0,0,0),#PB_Date_Day,1))
 jeudiasc$ = FormatDate("%dd%mm%yyyy",AddDate(Date(y,m,d,0,0,0),#PB_Date_Day,39))
 dimanchepent$ =  FormatDate("%dd%mm%yyyy",AddDate(Date(y,m,d,0,0,0),#PB_Date_Day,49))
 lundipent$ = FormatDate("%dd%mm%yyyy",AddDate(Date(y,m,d,0,0,0),#PB_Date_Day,50)) 
 indftm.b = 0
 If datref$ = Dimanchepaque$
  indftm.b = 1
 EndIf 
 If datref$ = lundipaque$
  indftm.b = 1
 EndIf 
 If datref$ = jeudiasc$
  indftm.b = 1
 EndIf
 If datref$ = dimanchepent$
  indftm.b = 1
 EndIf  
 If datref$ = lundipent$
  indftm.b = 1
 EndIf
ProcedureReturn indftm.b
EndProcedure
Procedure.i DF(date.i);dimanche europe
  d.i = DayOfWeek(date)
  If d = 0 :d = 7 :EndIf ;dimanche, retourne 7 au lieu de 0
  ProcedureReturn d
EndProcedure

Procedure.s calculnumjour(an,mois,jour,z1,z2,z3);calcul le nombre de jour écoulé a la date indiqué et ce qui reste
;======= calcul jour ==========
 If bissextile(an) = 1
  totalj.w = 366
 Else
  totalj.w = 365
 EndIf
nbjt.w = DayOfYear(Date(an, mois, jour, 0, 0, 0))
diffjour.w = totalj - nbjt.w  
;======= calcul num semaine =====
Date = Date(an,mois,jour,z1,z2,z3)
jda.i = DayOfYear(date): an.i = Year(date)
  DjanP.i = 4 - DF(Date(an, 1, 4, 0,0,0));dernier jour année précédente
  Djan.i = 4 - DF(Date(an,12,28, 0,0,0)) + DayOfYear(Date(an,12,31, 0,0,0));dernier jour de l'année
  If jda.i <= Djan.i
    If jda.i <= DjanP.i
     jda.i + DayOfYear(Date(an-1,12,31, 0,0,0));le 1er est dans la dernière semaine de l'année précédente.
     DjanP.i = 4 - DF(Date(an-1,1,4, 0,0,0))
    EndIf
    Weeknum = Round((jda-DjanP)/7, #PB_Round_Up)
  Else ;si non c'est dans la 1ere semaine
    Weeknum = 1
  EndIf
ProcedureReturn "Semaine: " + Str(Weeknum) + "    " + "Jour: " + Str(nbjt.w) + "/" + Str(totalj) + "-" +  Str(diffjour)
EndProcedure

Procedure calculnbjm(an,mois,jour,z1,z2,z3)
Select mois  
 Case 1,3,5,7,8,10,12 ; calcul le nombre de jours par mois
  nbjpm.w = 31
 Case 2
  If bissextile(an) = 1 ; tien compte des années bissextiles
   nbjpm.w = 29
  Else
   nbjpm.w = 28
  EndIf  
 Case 4,6,9,11
  nbjpm.w = 30
EndSelect
ProcedureReturn  nbjpm.w
EndProcedure

Procedure cal()
; ============ cal gauche================
posh = 20
poshl = 21
posv = 50
posvh = 16
posjs = 34
posD.w = 0
For x = 10 To 51
 posD = posD +1
 Select x
  Case 11 To 16 ,18 To 23 ,25 To 30,32 To 37, 39 To 44,46 To 51
   posh = posh + poshl 
 EndSelect
 If x = 17 Or x = 24 Or x = 31 Or x = 38 Or x = 45
  posv = posv + posvh
  posh = 20
 EndIf  
 TextGadget(x,kl(posh),kh(posv),kl(20),kh(15),"",#PB_Text_Center|#SS_NOTIFY)
 resizefontecran(x,1)
 coulfond(x);coulfond gad
Next
posh = 20
For y= 1 To 7
 numsem$ = StringField("Lu,Ma,Me,Je,Ve,Sa,Di",y,",")
 TextGadget(y +110,kl(posh),kh(posjs),kl(20),kh(15),numsem$,#PB_Text_Center)
 resizefontecran(y,1)
 coulfond(y+110);coulfond gad
 posh = posh + poshl              
Next
TextGadget(102,kl(20),kh(posjs-16),kl(140),kh(15),"",#PB_Text_Center)
resizefontecran(102,1)
; ================ cal droit =====================
posh = 340
poshl = 21
posv = 50
posvh = 16
posjs = 34
posD = 0
For x = 60 To 101
 posD = posD +1
 Select x
  Case 61 To 66 ,68 To 73 ,75 To 80,82 To 87, 89 To 94, 96 To 101;place les textgad
   posh = posh + poshl 
 EndSelect
 If x = 67 Or x = 74 Or x = 81 Or x = 88 Or x = 95;1er textgad de la ligne
  posv = posv + posvh
  posh = 340
 EndIf  
 TextGadget(x,kl(posh),kh(posv),kl(20),kh(15),"",#PB_Text_Center|#SS_NOTIFY)
 resizefontecran(x,1)
 coulfond(x);coulfond gad
Next
posh = 340
For y= 1 To 7
 numsem$ = StringField("Lu,Ma,Me,Je,Ve,Sa,Di",y,",");inscrit les jours
 TextGadget(y +120,kl(posh),kh(posjs),kl(20),kh(15),numsem$,#PB_Text_Center)
 coulfond(y+120);coulfond gad 
 resizefontecran(y,1)
 posh = posh + poshl              
Next
TextGadget(128,kl(340),kh(posjs-16),kl(140),kh(15),"",#PB_Text_Center);mois
resizefontecran(128,1)
TextGadget(8,kl(167),kh(130),kl(163),kh(17),"",#PB_Text_Center)
resizefontecran(8,1)
SetGadgetColor(8,#PB_Gadget_FrontColor,$858585)
coulfond(8);coulfond gad
EndProcedure

Procedure affcal(tdate$)
jour.w = Val(Left(tdate$,2));transforme la date en chiffres
mois.w = Val(Mid(tdate$,3,2))
an.w = Val(Right(tdate$,4))
Moisl$ = "JANVIER,FEVRIER,MARS,AVRIL,MAI,JUIN,JUILLET,AOUT,SEPTEMBRE,OCTOBRE,NOVEMBRE,DECEMBRE" 
Jourl$ = "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi" 
For x = 10 To 51
 SetGadgetText(x,"");raz des textgad,couleurs,font
 SetGadgetColor(x,#PB_Gadget_FrontColor,$0):resizefontecran(x,1)
Next
For xa = 16 To 51 Step 7
 SetGadgetColor(xa,#PB_Gadget_FrontColor,$0000FF):resizefontecran(xa,1)
Next
For xx = 60 To 101
  SetGadgetText(xx,"")
  SetGadgetColor(xx,#PB_Gadget_FrontColor,$707070):resizefontecran(xx,1) 
Next
For xb = 66 To 101 Step 7
  SetGadgetColor(xb,#PB_Gadget_FrontColor,$0000FF):resizefontecran(xb,1)
Next
;=========== affiche cal gauche ===========
premjour.w = DayOfWeek(Date(an,mois,1,0,0,0));Calcul le 1er jour du mois
If premjour.w = 0 :premjour.w  = 7 :EndIf ; pour le placement donne le num 7 au dimanche au lieu de 0
nbjpm.w = calculnbjm(an,mois,jour,0,0,0)
jm = 0
For j = 10 + (premjour.w -1)  To (10 + nbjpm.w + (premjour.w-1))-1; remplis les textgads en tenant compte du 
 jm = jm +1                ; premier jour du mois
 SetGadgetText(j,Str(jm))
 If Ffix(jm,mois) = 1 Or calulftrelig(jm,mois,an)
  SetGadgetColor(J,#PB_Gadget_FrontColor,$0000FF)
 EndIf  
Next
numois.w = Month(Date(an,mois,jour,0,0,0))
SetGadgetText(102,StringField(Moisl$,numois.w,",")+ " " + Str(an))
coulfond(102);coulfond gad
;=== affichage du centre cal ========
TextGadget(5,kl(167),kh(15),kl(163),kh(30),StringField(Jourl$,DayOfWeek(Date(an,mois,jour,0,0,0))+1,","),#PB_Text_Center)
coulfond(5);coulfond gad
resizefontecran(5,2)
TextGadget(6,kl(167),kh(45),kl(163),kh(40),Str(jour),#PB_Text_Center)
coulfond(6);coulfond gad
resizefontecran(6,4)
SetGadgetColor(6, #PB_Gadget_FrontColor,$0045FF)  
TextGadget(7,kl(167),kh(100),kl(163),kh(25),StringField(Moisl$,numois.w,","),#PB_Text_Center)
coulfond(7);coulfond gad
resizefontecran(7,2)
;========================================== 
;===== calcul num semaine et nb jour ====== 
 SetGadgetText(8,calculnumjour(an,mois,jour,0,0,0))
;===========================================
;===== calcul la position du jour (aujourd'hui) ======
 If mois = Val(FormatDate("%mm",Date()))
  posjourj.w = (10 + premjour.w + Val(FormatDate("%dd",Date())) ) -2
  SetGadgetColor(posjourj.w,#PB_Gadget_FrontColor,$FAFAFF) ;et color
 EndIf 
;============================================
;============ affiche cal droit ===============
; ;attention si cal gauche est a 12 mois rectifier la date
 If mois.w = 12
  jour.w = Val(Left(tdate$,2))
  mois.w = 0 
  an.w = an.w + 1 
 EndIf
  premjour2.w = DayOfWeek(Date(an,mois+1,1,0,0,0))
 If premjour2.w = 0 :premjour2.w = 7 :EndIf 
 mois = mois +1
 nbjpm2.w = calculnbjm(an,mois,jour,0,0,0)
 jmd = 0
 For jd = 60 + (premjour2.w-1) To (60 + nbjpm2.w + (premjour2.w-1))-1
  jmd = jmd +1 
  SetGadgetText(jd,Str(jmd)) 
  If Ffix(jmd,mois) = 1 Or calulftrelig(jmd,mois,an)
   SetGadgetColor(Jd,#PB_Gadget_FrontColor,$0000FF)
  EndIf 
 Next
 numois2.w = Month(Date(an,mois,1,0,0,0))
 SetGadgetText(128,StringField(Moisl$,numois2.w,",")+ " " + Str(an))
 coulfond(128);coulfond gad
If indstrok.B = 1;permet d'afficher dans les strings
 controllect(tdate$)
EndIf
detectext();*************
EndProcedure

Procedure clickcal(tdate$,gad,gd.s)
jour.w = Val(Left(tdate$,2));transforme la date en chiffres
mois.w = Val(Mid(tdate$,3,2))
an.w = Val(Right(tdate$,4))
Moisl$ = "JANVIER,FEVRIER,MARS,AVRIL,MAI,JUIN,JUILLET,AOUT,SEPTEMBRE,OCTOBRE,NOVEMBRE,DECEMBRE" 
Jourl$ = "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi" 
;=== affichage du centre cal ========
numois.w = Month(Date(an,mois,1,0,0,0))
If DayOfWeek(Date(an,mois,jour,0,0,0)) = 0
 cj.w = 1
Else
 cj.w = DayOfWeek(Date(an,mois,jour,0,0,0)) +1 
EndIf 
SetGadgetText(5,StringField(Jourl$,cj,","))
SetGadgetText(6,Str(jour))
SetGadgetText(7,StringField(Moisl$,numois.w,","))
;===== calcul num semaine et nb jour ====== 
SetGadgetText(8,calculnumjour(an,mois,jour,0,0,0))
;===========================================
Static posclik.w
Static colorbase
If posclik.w <> 0
 SetGadgetColor(posclik.w,#PB_Gadget_FrontColor,colorbase)
EndIf
posclik.w = gad
colorbase = GetGadgetColor(posclik.w,#PB_Gadget_FrontColor)
SetGadgetColor(posclik.w,#PB_Gadget_FrontColor,$00FFFF) 
If indstrok.B = 1;permet d'afficher dans les strings
 controllect(tdate$)
EndIf
EndProcedure

Procedure moischif(nommois$)
Select nommois$
 Case "JANVIER"
  numero.w = 1
 Case "FEVRIER"
  numero.w = 2
 Case "MARS"
  numero.w = 3
 Case "AVRIL"
  numero.w = 4
 Case "MAI"
  numero.w = 5
 Case "JUIN"
  numero.w = 6
 Case "JUILLET"
  numero.w = 7
 Case "AOUT"
  numero.w = 8
 Case "SEPTEMBRE"
  numero.w = 9
 Case "OCTOBRE"
  numero.w = 10
 Case "NOVEMBRE"
  numero.w = 11
 Case "DECEMBRE"
  numero.w = 12 
EndSelect  
ProcedureReturn numero.w 
 EndProcedure

Procedure compare(av$,ap$)
indenr.B = 0
If Len(av$) <> Len(ap$)
 indenr = 1
Else
 For zz.w = 1 To Len(av$)
  If Mid(av$,zz,1) <> Mid(ap$,zz,1) 
    indenr = 1
    Break
  EndIf
 Next
EndIf
ProcedureReturn indenr       
EndProcedure

Procedure infos(*valeur)
Select *valeur
   Case 1 
    SetGadgetColor(206,#PB_Gadget_FrontColor,$0000FF)
    SetGadgetText(206, "Il manque une date ?")
    Sleep_(3500)
    SetGadgetText(206, "") 
   Case 2
    SetGadgetColor(206,#PB_Gadget_FrontColor,$006400)
    SetGadgetText(206, "Année supprimée")
    Sleep_(2500)
    HideGadget(143,1)
    SetGadgetText(144,"")
    HideGadget(144,1)
    HideGadget(145,1)
    SetActiveGadget(177)
    SetGadgetState(142,0)
    SetGadgetText(206, "")
  Case 3
    SetGadgetColor(206,#PB_Gadget_FrontColor,$0000FF)
    SetGadgetText(206, "Impréssion impossible")
    Sleep_(3500)
    SetGadgetText(206, "") 
EndSelect
EndProcedure

Procedure supan(an$)
If an$ <> ""
 indgr.w = 0
 Dim Tabrv.s(0) 
 If ReadFile(#Fag, "Agd.mld")
    While Eof(#Fag) = 0   
      ligjour$ = ReadString(#Fag)
      If an$ <> Trim(Left(Trim(StringField(ligjour$,2,Chr(191))),4))
       indgr = indgr + 1 
       ReDim Tabrv(indgr)
       Tabrv.s(indgr) = ligjour$
     EndIf 
    Wend
 EndIf    
 CloseFile(#Fag)
 CreateFile(#Fag, "Agd.mld")
 For zy.w = 1 To ArraySize(Tabrv())
  WriteStringN(#Fag,Tabrv(zy))
 Next 
 FreeArray(Tabrv.s())
 CreateThread(@infos(),2)     
Else
 CreateThread(@infos(),1) 
EndIf
EndProcedure

Procedure impjour()
If  DPIHZ = 600;prend en compte  le DPI imprimante 300 ou 600
 kdpi.l = 1
Else 
 kdpi.l = 2
EndIf 
If StartPrinting("agenda")
 htpagemm =  PrinterPageHeight() 
 margg = 229/kdpi.l
 margd = 229/kdpi.l
 margbas = htpagemm - (1145/kdpi.l)
 intlig = 68/kdpi.l
 deplig = 687/kdpi.l
 If StartDrawing(PrinterOutput())
  DrawingMode(#PB_2DDrawing_Transparent)
  FrontColor($0)
  DrawingFont(FontID(6))
  a$ = GetGadgetText(5) + " " + GetGadgetText(6) + " " + GetGadgetText(7)+ " " + Right(tdate$,4)
  DrawText(280/kdpi.l,229/kdpi.l,a$)
  lig = lig + (intlig*6)
  DrawText(margg ,lig ,"") 
  For z = 152 To 176
   lig = lig + (intlig*3)
   ip$ = GetGadgetText(z) + "   " + GetGadgetText(z + 25)
   DrawText(margg + (40/kdpi.l),lig ,ip$) 
  Next
 EndIf
  StopDrawing()
  StopPrinting() 
EndIf
EndProcedure

Procedure detectext()
 anencours.w = Val(Right(tdate$,4))
 moisencours.w = Val(Mid(tdate$,3,2))
 anmoisencours$ = Right(tdate$,4) + Str(moisencours.w)
 anmoisencoursp1$ = Right(tdate$,4) + Str(moisencours.w+1)
 If ReadFile(#Fag, "Agd.mld")
    While Eof(#Fag) = 0   
      ligjour$ = ReadString(#Fag)
      Lectdat$ = Trim(StringField(ligjour$,2,Chr(191)))
      anmois$ = Left(Lectdat$,Len(Lectdat$)-2)
      If anmoisencours$ = anmois$
        jourenr$ = Right(Lectdat$,2)
        For x =10 To 51
         If Len(GetGadgetText(x))< 2 :ad$ = "0" + GetGadgetText(x):Else:ad$ = GetGadgetText(x):EndIf
         If ad$ = jourenr$
          SetGadgetFont(x, FontID(7))
          Break
         EndIf  
        Next  
      EndIf
      If anmoisencoursp1$ = anmois$
       jourenr$ = Right(Lectdat$,2)
       For xx =60 To 101
         If Len(GetGadgetText(xx))< 2 :ad2$ = "0" + GetGadgetText(xx):Else:ad2$ = GetGadgetText(xx):EndIf
         If ad2$ = jourenr$
          SetGadgetFont(xx, FontID(7))
          Break
         EndIf  
        Next  
      EndIf 
    Wend
    CloseFile(#Fag)
EndIf
EndProcedure  

OpenWindow(1,Xwp(0,1),ywp(0,1),Lw(500,3),Hw(750), "Agenda",#PB_Window_BorderLess|#PB_Window_ScreenCentered  )
Forme(1)
StickyWindow(1, 1)
SetWindowColor(1,$CCCCCC)
cal()
tdate$ = FormatDate("%dd%mm%yyyy",Date())
affcal(tdate$)
TextGadget(150,kl(30),kh(157),kl(18),kh(1),"")
SetGadgetColor(150,#PB_Gadget_BackColor,$FF0000)
TextGadget(202,kl(132),kh(157),kl(76),kh(1),"")
SetGadgetColor(202,#PB_Gadget_BackColor,$FF0000)
TextGadget(203,kl(292),kh(157),kl(76),kh(1),"")
SetGadgetColor(203,#PB_Gadget_BackColor,$FF0000)
TextGadget(204,kl(452),kh(157),kl(18),kh(1),"")
SetGadgetColor(204,#PB_Gadget_BackColor,$FF0000)
TextGadget(151,kl(30),kh(702),kl(440),kh(1),"")
SetGadgetColor(151,#PB_Gadget_BackColor,$FF0000)
ImageGadget(205,kl(50),kh(180),kl(40),kh(40),ImageID(#Image4)) 
ButtonGadget(4,kl(210),kh(150),kl(80),kh(15),Chr(60)+ Chr(62))
ButtonGadget(130,kl(370),kh(150),kl(80),kh(15),Chr(62)+ Chr(62))
ButtonGadget(131,kl(50),kh(150),kl(80),kh(15),Chr(60)+ Chr(60))
ButtonImageGadget(140,kl(420),kh(707),kl(40),kh(40),ImageID(#Image0))
ToolTipMic(1,140, "Arrêt Agenda",$C9FBFD)
ButtonImageGadget(141,kl(380),kh(707),kl(40),kh(40),ImageID(#Image1))
ToolTipMic(1,141, "Efface la ligne en cours",$C9FBFD)
ButtonImageGadget(146,kl(340),kh(707),kl(40),kh(40),ImageID(#Image2))
ToolTipMic(1,146, "Imprime la journée",$C9FBFD)
ButtonImageGadget(142,kl(300),kh(707),kl(40),kh(40),ImageID(#Image3),#PB_Button_Toggle)
ToolTipMic(1,142,"Supprime une année",$C9FBFD)
TextGadget(143,kl(145),kh(712),kl(80),kh(15),"Supprime année")
resizefontecran(143,1)
HideGadget(143,1)
coulfond(143);coulfond gad
StringGadget(144,kl(145),kh(728),kl(80),kh(16),"",#PB_String_Numeric|#ES_CENTER|#PB_String_BorderLess)
resizefontecran(144,1)
HideGadget(144,1)
SendMessage_(GadgetID(144), #EM_LIMITTEXT,4, 0) 
SetGadgetColor(144,#PB_Gadget_BackColor,$2C2CEE)
ButtonGadget(145,kl(230),kh(718),kl(20),kh(20),"Ok")
HideGadget(145,1)
TextGadget(206,kl(10),kh(716),kl(100),kh(15),"",#PB_Text_Center)
resizefontecran(206,1)
coulfond(206);coulfond gad
hth.w = 155 : Hr.w = 7: d.B = 0
For z = 152 To 176
 hth.w = hth.w + 20 
  If d.b = 0
   d.B = 1
   Hr.w = Hr +1 
   afh$ = Str(Hr.w)+ "h"
   hth.w = hth.w + 2
   colorh.f = $CD0000
  Else
   d.B = 0
   afh$ = "30"
   colorh.f = $5E798B
  EndIf 
 TextGadget(z,kl(90),kh(hth.w),kl(20),kh(18),afh$,#PB_Text_Center)
 coulfond(z);coulfond gad
 SetGadgetColor(z, #PB_Gadget_FrontColor,colorh.f)
 StringGadget(z+25,kl(115),kh(hth.w-1),kl(300),kh(14),"",#PB_String_BorderLess)
 SendMessage_(GadgetID(z+25), #EM_LIMITTEXT, 60, 0) 
 SetGadgetColor(z+25, #PB_Gadget_BackColor,$D0D0D0)
 resizefontecran(z,1)
 resizefontecran(z+25,1)
Next
SetActiveGadget(177)
indstrok.B = 1 ;indique que les strings peuvent recevoir du texte
controllect(tdate$)
Repeat
   Event = WaitWindowEvent()
     Select Event
      Case #WM_KEYDOWN ; déplacement dans les strings avec flèches haute et basse
       id_touche = EventwParam()
       If id_touche = 40  And GetActiveGadget() => 177 And GetActiveGadget() < 201 ;descend
        SetActiveGadget(GetActiveGadget()+1)
        GestionCaret(GetActiveGadget()) 
       EndIf 
       If id_touche = 38  And  GetActiveGadget() > 177 And GetActiveGadget() <= 201 ;monte
        SetActiveGadget(GetActiveGadget()-1)
        GestionCaret(GetActiveGadget()) 
       EndIf 
      Case #WM_LBUTTONDOWN
       SendMessage_(WindowID(1), #WM_NCLBUTTONDOWN, #HTCAPTION, 0);pour bouger la fenetre
      Case #PB_Event_Gadget
       If EventGadget() => 177 And EventGadget()<= 201 ;scrute et indique qu'elle ligne de RV est active
         lignerv.w = EventGadget()
         Select EventType()
         Case #PB_EventType_Change;met la 1er lettre des strings en majuscule 
          If Len(GetGadgetText(lignerv.w)) = 1
           SetGadgetText(lignerv.w,UCase(GetGadgetText(lignerv.w)))
           GestionCaret(GetActiveGadget()) 
          EndIf
        EndSelect 
       EndIf
       Select EventGadget() ; Gadgets
        Case 10 To 51 ;Gère les clics sur cal gauche
         If GetGadgetText(EventGadget()) <> "" ; pas de clik sur case vide  
          controlenr();enr s'il a lieu avant changement de date
          jour.w = Val(GetGadgetText(EventGadget()))
          mois.w = moischif(Mid(GetGadgetText(102),1,Len(GetGadgetText(102))-5))
          an.w = Val(Right(GetGadgetText(102),4))
          tdate$ = FormatDate("%dd%mm%yyyy",Date(an,mois,jour,0,0,0)) 
          clickcal(tdate$,EventGadget(),"g")
         EndIf 
        Case 60 To 101;Gère les clics sur cal droit
         If GetGadgetText(EventGadget()) <> "" ; pas de clik sur case vide  
          controlenr();enr s'il a lieu avant changement de date
          jour.w = Val(GetGadgetText(EventGadget()))
          mois.w = moischif(Mid(GetGadgetText(128),1,Len(GetGadgetText(128))-5))
          an.w = Val(Right(GetGadgetText(128),4))
          tdate$ = FormatDate("%dd%mm%yyyy",Date(an,mois,jour,0,0,0)) 
          clickcal(tdate$,EventGadget(),"d")
         EndIf 
        Case 4;remet a la date du jour
         controlenr();enr s'il a lieu avant changement de date
         tdate$ = FormatDate("%dd%mm%yyyy",Date()) 
         affcal(tdate$)
        Case 130
         controlenr();enr s'il a lieu avant changement de date
         jour.w = Val(Left(tdate$,2));transforme la date en chiffres
         mois.w = Val(Mid(tdate$,3,2))
         an.w = Val(Right(tdate$,4))
         jour = 1 : mois = mois + 1 
         If mois > 12 : mois = 1:an = an +1: jour = 1:EndIf
         dateact$ = FormatDate("%dd%mm%yyyy",Date())
         anact.w = Val(Right(dateact$,4))
         moiact.w = Val(Mid(dateact$,3,2))
         If anact = an And moiact = mois
          tdate$ = FormatDate("%dd%mm%yyyy",Date()) 
         Else 
          tdate$ = FormatDate("%dd%mm%yyyy",Date(an,mois,jour,0,0,0)) 
         EndIf 
         affcal(tdate$) 
        Case 131 
         controlenr();enr s'il a lieu avant changement de date
         jour.w = Val(Left(tdate$,2));transforme la date en chiffres
         mois.w = Val(Mid(tdate$,3,2))
         an.w = Val(Right(tdate$,4))
         mois = mois - 1 : jour = calculnbjm(an,mois,1,0,0,0)
         If mois = 0 
          mois = 12
          an = an -1 
          jour = calculnbjm(an,mois,1,0,0,0)
         EndIf
         dateact$ = FormatDate("%dd%mm%yyyy",Date())
         anact.w = Val(Right(dateact$,4))
         moiact.w = Val(Mid(dateact$,3,2))
         If anact = an And moiact = mois
          tdate$ = FormatDate("%dd%mm%yyyy",Date()) 
         Else 
          tdate$ = FormatDate("%dd%mm%yyyy",Date(an,mois,jour,0,0,0)) 
         EndIf 
         affcal(tdate$)
        Case 141 ;efface un R-V
         SetGadgetText(lignerv.w,"")
         SetActiveGadget(lignerv.w)
        Case 142 ;efface une année(prépare)
         If GetGadgetState(142) = 1
          HideGadget(143,0)
          HideGadget(144,0)
          HideGadget(145,0)
          SetActiveGadget(144)
         Else
          HideGadget(143,1)
          HideGadget(144,1)
          HideGadget(145,1)
          SetActiveGadget(177)
         EndIf 
       Case 146 ;imprime
        If DefaultPrinter()
         impjour()
        Else
         CreateThread(@infos(),3) 
        EndIf
        Case 145 ;efface une année
         supan(GetGadgetText(144)) 
        Case 140;bt stop 
         controlenr();enr s'il a lieu avant arrêt 
         CloseWindow(1)
         DestroyWindow_(Tooltip.l)
         Break  
       EndSelect
   EndSelect
Until Event = #PB_Event_CloseWindow


Re: Un autre agenda..

Publié : ven. 01/sept./2017 7:30
par Micoute
Très bon travail, pour les icônes je ne me suis même pas embêté puisque je l'avais déjà fait pour la version précédente, merci encore pour le partage.

Re: Un autre agenda..

Publié : ven. 01/sept./2017 20:06
par Kwai chang caine
Toujours aussi joli, merci :wink:

Re: Un autre agenda..

Publié : lun. 30/oct./2017 22:55
par Mouillard
Bonjour MLD,

J'avais pas essayé... G essayé....Je l'adopte..../// :D

Il a quand même de la gueule..... :roll:

Merci beaucoup :lol: