Il s'agit d'un calendrier perpétuel qui permet d'avoir les calendrier de toutes les années a partir de 2004.
pour le lancer vous pouvez taper /calendrier dans le status a ce moment vous aurez le calendrier des année 2004 et 2005
sinon vous pouvez taper /calendrier année
a ce moment vous aurez le calendrier de l'année désirée (si celle ci est superieure a 2004)
Source / Exemple :
alias calendrier {
if (!$1) { drawcld 2004 | drawcld 2005 | echo -a pour avoir d'autre année tapez : /calendrier année }
elseif ($1 isnum ) && ( $1 >= 2004 ) { drawcld $1 }
else { echo -a erreur de spécification pour l'année, vous devez spécifier un nombre supérieur a 2003. }
}
alias drawmoi {
var %bi = $iif( $calc($1 /4) = $int($calc($1 /4)) ,$int($calc(($1 -2004)/4)),$int($calc(1+ ($1 -2004)/4)) ),%no = $calc($1 -2004 - %bi),%total = $calc(%bi *366 + %no *365),%itr = 1
if ($calc($1 /4) = $int($calc($1 /4))) { var %moi = 31,29,31,30,31,30,31,31,30,31,30,31 }
else { var %moi = 31,28,31,30,31,30,31,31,30,31,30,31 }
while ( %itr < $2 ) { %total = $calc(%total + $gettok(%moi,%itr,44)) | inc %itr }
var %itr = 1,%jour = Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche,%c = 4,%t = $calc(%total - 7* $int($calc(%total /7)))
while ( %itr <= %t ) { if ( %c = 8 ) { %c = 1 } | inc %c | inc %itr }
var %itr = 1,%fenetre = $+(@,$1,-,$2),%j = 25
window -hkp %fenetre 0 0 291 153
while ( %itr <= $gettok(%moi,$2,44) ) {
if ( %c = 8 ) { %c = 1 }
drawtext %fenetre 1 arial 9 $calc(40* (%c -1) +5) %j %itr
if ( $calc(%itr /7) = $int($calc(%itr /7)) ) { inc %j 20 }
inc %c
inc %itr
}
var %i = 1,%j = 0
while ($gettok(%jour,%i,44)) {
while ( %j <= 140 ) { drawline %fenetre 1 0 0 %j 280 %j | inc %j 20 }
drawtext %fenetre 1 arial 9 $calc((%i -1) * 40 +2) 5 $gettok(%jour,%i,44)
drawline %fenetre 1 0 $calc(%i *40) 0 $calc(%i *40) 140
inc %i
}
}
alias drawtab {
var %itr = 1
if (!$window($1)) { halt }
while ($gettok($4-,%itr,32)) {
drawtext $1 1 arial 9 $calc( (%itr -1) * $2 +4) 3 $ifmatch
drawline $1 1 0 $calc(%itr * $2) 0 $calc(%itr * $2) $3
inc %itr
}
drawline $1 1 0 0 $3 $window($1).w $3
}
alias drawcld { window -ap $+(@Calendrier-,$1) -1 -1 293 183 | drawtab $+(@Calendrier-,$1) 23.5 15 1 2 3 4 5 6 7 8 9 10 11 12 }
menu @Calendrier-* {
sclick :{
var %itr = 0,%c = 1,%p = 0,%window = $active,%date = $gettok(%window,2,45),%moi = Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Aout,Septembre,Octobre,Novembre,Décembre
while ( %itr <= $window(%window).w ) {
if ($inrect($mouse.x,$mouse.y,%itr,0,24,15)) { inc %p | goto end }
inc %itr 23.5
inc %c
}
:end
if ( %p = 0 ) { halt }
drawline %window 1 0 0 15 $window(%window).w 15
drawline %window 0 0 %itr 15 $calc(%itr +24) 15
drawrect -f %window 0 1 0 18 300 11
drawtext %window 1 arial 9 0 18 $gettok(%moi,%c,44) %date
if (!$window($+(@,%date,-,%c))) { drawmoi %date %c }
drawcopy $+(@,%date,-,%c) 0 0 291 125 %window 2 30
}
Nouvelle Année : {
:c
var %a = $$?="Entrer une année s'il vous plait"
if ( %a < 2004 ) { Echo -a [Calendrier] Année invalide | goto c }
drawcld %a
}
}
on *:close:@Calendrier-*:{ var %window = $active,%date = $gettok(%window,2,45),%itr = 1 | while ( %itr <= 12 ) { window -c $+(@,%date,-,%itr) | inc %itr } }
Conclusion :
Ce code possede une limite, il ne va pas dans le passé, aussi une fois que la fenetre c'est lancé clicker sur les numéros de 1 a 12 pour voir le calendrier proprement dit.
J'ai essayé de copier tres sommairement des tabs mais l'effet est la.
Graphiquement c'est tres simple mais c'est rapide ça ne bug et ça fonctionne pour toutes les années avec la meme vitesse.
Je n'ai pas prevu de mise a jour. Tout va dépendre de vos appréciations.
Vu la simplicité du design je ne met pas de capture vous verez de vous meme :)
c'est un code rédigé a l'occasion d'un defi sur mircstudio.tk
(site de Remi34 merci au passage :) )
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.