Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: calendrier clicable Ven 3 Déc 2021 - 15:41
Bonjour à tous, j'ai sur mon bureau un calendrier perpétuel dont je me sert de plus en plus souvent Vous le trouverez ICI Je me permet de vous lancer un challenge pour me servir au quotidien. Je souhaite avoir un calendrier perpétuel du même genre où je pourrais cliquer dans n'importe quelle cellule (jour) pour noter mes rendez-vous chez le kiné et autres... Je reviendrais demain pour préciser ma demande, en attendant essayez le code de JJN4 car c'est le même genre de calendrier que je souhaite.
voici le code que j'ai commencé pour faire moi-même cet "agenda"
Code:
' PanoAlerte.bas ' objectif: ' controler à chaque alumage de l'ordinateur ' 1) nouvel an ' 2) nouveau trimestre ' 3) nouveau mois ' 4) nouvelle semaine ' Donc Situation$="Nouvelan" ou "NouveauTrimestre" ou.... ' ' chercher dans le fichier "rdv.txt" ceux qui corresponde à Situation$n à chaque alumage ' vérifiezr les dates ' pour les afficher avec leur détail propre (ex: apporter carte vitale) ' pour créer une alerte la veille et le jour du rdv ' OU rappeler les dates de RDV en début de période (mois, semaine trimestre, semestre) ' il faut un formulaire de visualisation ' il faut un formulaire de saisie des rdv ' il faut un fichier "rdv.txt" ' contenant les dates et nom des rdv ex rdv_17/05/2021 (DateJour$|Nom$|Texte$) ' si c'est la date du jour alors on affiche suivant Situation$ ' ============================================================================== DIM DIM Situation$ DIM DateJourActuel$,NomJoursemaineActuel$,Texte$ DIM DateJourRDV$,NomJoursemaineRDV$,TexteRDV$ DIM a$,f$,fi$ ' ============================================================================= LABEL
' ========++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++====== END_PROG END ' ================================================================================Sous-prog SUB InitSituation() ' renseigne Situation$ suivant date du jour en vérifiant période (mois, semaine trimestre, semestre)
NomJoursemaineActuel$= NomJoursemaineActuel$(date_day,date_month,date_year) ' cas 1 début de semaine if NomJoursemaineActuel$="Lundi" then Situation$="DébutSemaine"
END_SUB rem ============================================================================
FNC NomJoursemaineActuel$(jour,mois,annee) ' calcul dujour de la semaine dim_local wd if mois < 3 wd = int(23*mois/9) +jour+4+annee+int((annee-1)/4)-int((annee-1)/100)+int((annee-1)/400) else wd = int(23*mois/9)+jour+2+annee+int(annee/4)-int(annee/100)+int(annee/400) end_if select mod(wd,7) case 0 : result "Dimanche" case 1 : result "Lundi" case 2 : result "Mardi" case 3 : result "Mercredi" case 4 : result "Jeudi" case 5 : result "Venderdi" case 6 : result "Samedi" end_select END_FNC
ce n'est qu'une ébauche non terminé, mai les commentaires des première lignes décrivent ce que je voulais faire. Voici également une capture d'écran du calendrier perpétuel de JJN4que j'utilise actuellement.
A plus...
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: calendrier clicable Sam 4 Déc 2021 - 12:25
Salut mon ami Jean Claude,
Pour ce que ça vaut, un calendrier que j'ai dans mes tiroirs:
BORDER_SMALL 0 COLOR 0,128,255,255: FONT_SIZE 0,10: CAPTION 0," - CALENDRIER -" PICTURE 1: 2D_TARGET_IS 1: FONT_NAME 1,"Arial": FONT_SIZE 1,12: PRINT_TARGET_IS 1 TOP 1,32: WIDTH 1,wf: HEIGHT 1,hf: ON_CLICK 1,Clk ALPHA 2: TOP 2,5: COLOR 2,255,255,0: CAPTION 2," Année: " SPIN 3: TOP 3,TOP(2)-3: LEFT 3,50: WIDTH 3,55: POSITION 3,DATE_YEAR: ' Année CONTAINER_OPTION 8: TOP 8,0: LEFT 8,LEFT(3)+WIDTH(3)+5: WIDTH 8,120 HEIGHT 8,30: COLOR 8,255,255,220: ' Nombre de mois OPTION 9: PARENT 9,8: TOP 9,0: LEFT 9,5: CAPTION 9,"3 mois" OPTION 10: PARENT 10,8: TOP 10,TOP(9)+14: LEFT 10,LEFT(9): CAPTION 10,"6 mois" MARK_ON 10 OPTION 11: PARENT 11,8: TOP 11,TOP(9): LEFT 11,70: CAPTION 11,"1 an"
CONTAINER_OPTION 14: TOP 14,0: LEFT 14,LEFT(8)+WIDTH(8)+5: WIDTH 14,140 HEIGHT 14,HEIGHT(8): COLOR 14,255,255,220: ' Mois de début OPTION 15: PARENT 15,14: TOP 15,0: LEFT 15,5: CAPTION 15,"Janvier": MARK_ON 15 OPTION 16: PARENT 16,14: TOP 16,TOP(15)+14: LEFT 16,LEFT(15): CAPTION 16,"Avril" OPTION 17: PARENT 17,14: TOP 17,TOP(15): LEFT 17,70: CAPTION 17,"Juillet" OPTION 18: PARENT 18,14: TOP 18,TOP(16): LEFT 18,LEFT(17): CAPTION 18,"Octobre"
CONTAINER_OPTION 20: TOP 20,0: LEFT 20,LEFT(14)+WIDTH(14)+5: WIDTH 20,100 HEIGHT 20,HEIGHT(8): COLOR 20,255,255,220: ' Orientation OPTION 21: PARENT 21,20: TOP 21,0: LEFT 21,5: CAPTION 21,"A4 Portrait" OPTION 22: PARENT 22,20: TOP 22,TOP(21)+14: LEFT 22,LEFT(21): CAPTION 22,"A4 Paysage" MARK_ON 22 BUTTON 27: TOP 27,4: LEFT 27,LEFT(20)+WIDTH(20)+5: WIDTH 27,30 CAPTION 27,"OK": ON_CLICK 27,Genere BUTTON 30: TOP 30,TOP(27): LEFT 30,LEFT(27)+WIDTH(27)+10 CAPTION 30,"Imprimer": ON_CLICK 30,Convp DLIST 34 EDIT 35: TOP 35,TOP(30): LEFT 35,LEFT(30)+WIDTH(30)+5: WIDTH 35,470 COLOR 35,255,240,255: HIDE 35 BUTTON 36: TOP 36,TOP(35): LEFT 36,WIDTH(0)-70: WIDTH 36,50: CAPTION 36,"Edit Evt" ON_CLICK 36,Edevt GOSUB Format END ' ============================================================================= Format: ' Dessin de la grille de fond CLS or% = 0: IF CHECKED(22) = 1 THEN or% = 1 IF or% = 0 wf = 778: hf = 1100: ' A4 portrait ELSE wf = 1100: hf = 778: ' A4 paysage END_IF mg = 15: ' pixels, marges périphériques non imprimables (~3 mm) wt = wf-2*mg: ht = hf-2*mg: ' dimensions utiles (imprimables) WIDTH 0,wf+20: HEIGHT 0,hf+70: LEFT 36,wf-50 WIDTH 1,wf: HEIGHT 1,hf: ' image feuille A4 nm = 3: ' nb de mois par feuille IF CHECKED(10) = 1 THEN nm = 6 IF CHECKED(11) = 1 THEN nm = 12 wm = wt/nm: ' largeur d'un mois (pixels) wj = 40: IF nm = 12 THEN wj = 30: ' largeur de la partie jour à gauche hm = 25: hj = (ht-hm)/31: ' hauteurs rangée nom mois et rangées jours x0 = mg: y0 = mg 2D_PEN_WIDTH 2: 2D_RECTANGLE x0,y0,x0+wt,y0+ht: ' encadrement total 2D_LINE x0,y0+hm,x0+wt,y0+hm: 2D_PEN_WIDTH 1 FOR i = 1 TO 31 y = y0+hm+i*hj 2D_LINE x0,y,x0+wt,y NEXT i FOR i = 0 TO nm-1 x = x0+wm*i: 2D_PEN_WIDTH 2: 2D_LINE x,y0,x,y0+ht x = x+wj: 2D_PEN_WIDTH 1: 2D_LINE x,y0+hm,x,y0+ht NEXT i RETURN ' ============================================================================= Genere: GOSUB Format ' garnissage des cases aa = POSITION(3): ' année lm(2) = 28: Bisex(aa): IF bsx% = 1 THEN lm(2) = 29 QPaques(aa): ' -> qpa, qas, qpe Qjm(aa,qpa): a$ = RIGHT$("0"+STR$(mois%),2)+RIGHT$("0"+STR$(jour%),2) fe$(7) = a$+",PÂQUES" Qjm(aa,qas): a$ = RIGHT$("0"+STR$(mois%),2)+RIGHT$("0"+STR$(jour%),2) fe$(8) = a$+",Ascension" Qjm(aa,qpe): a$ = RIGHT$("0"+STR$(mois%),2)+RIGHT$("0"+STR$(jour%),2) fe$(9) = a$+",Pentecôte" nfe = 9 m1 = 1 IF CHECKED(16) = 1 THEN m1 = 4 IF CHECKED(17) = 1 THEN m1 = 7 IF CHECKED(18) = 1 THEN m1 = 10 CLEAR 34: f$ = revt$+"Evnt"+STR$(aa)+".txt" IF FILE_EXISTS(f$) = 1 FILE_LOAD 34,f$: ' événements de l'année ELSE FILE_OPEN_WRITE 1,f$ FILE_WRITELN 1,"* Fichier des événements "+STR$(aa)+", articles de la forme:" FILE_WRITELN 1,"* MMJJ[espace]texte de l'événement" FILE_WRITELN 1,"* (plusieurs articles possibles pour une date donnée)." FILE_CLOSE 1 END_IF ap = 0 FOR k = 0 TO nm-1 mm = m1+k: IF mm > 12 THEN EXIT_FOR: ' pas de chevauchepment d'années FONT_SIZE 1,12: if nm = 12 THEN FONT_SIZE 1,10 FONT_COLOR 1,0,0,0: FONT_BOLD 1 a$ = m$(mm)+" "+STR$(aa): IF nm = 12 AND mm<>5 THEN a$ = m$(mm) i = TEXT_WIDTH(a$,1): j = (wm-i)/2: ' centrage PRINT_LOCATE x0+k*wm+j,y0+5: PRINT a$ FONT_BOLD_OFF 1 sz = 10: if nm = 12 THEN sz = 7 FONT_SIZE 1,sz FOR j = 1 TO lm(mm) x = x0+k*wm: y = y0+hm+(j-1)*hj Joursem(aa,mm,j) a$ = js$(rs_js%)+" "+STR$(j) FONT_COLOR 1,0,0,0: FONT_BOLD_OFF 1 IF rs_js%=0 FONT_COLOR 1,164,0,0: font_bold 1: 2D_FLOOD x+wj+10,y+5,255,220,220 END_IF 2D_FILL_COLOR 255,255,255: PRINT_LOCATE x+3,y+3: PRINT a$ IF COUNT(34) > 3: ' événements (en-tête = 3 lignes) b$ = RIGHT$("0"+STR$(mm),2)+RIGHT$("0"+STR$(j),2) FOR i = 4 TO COUNT(34) c$ = ITEM_READ$(34,i) IF LEFT$(c$,4) = b$ c$ = RIGHT_POS$(c$,6) FONT_SIZE 1,10: FONT_COLOR 1,0,0,255 WHILE TEXT_WIDTH(c$,1) > (wm-wj) c$ = LEFT$(c$,LEN(c$)-2) END_WHILE ' PRINT_LOCATE x+33,y+1: PRINT "X" PRINT_LOCATE x+wj+3,y+1: PRINT c$ FONT_SIZE 1,sz: FONT_COLOR 1,0,0,0: FONT_BOLD_OFF 1 END_IF NEXT i END_IF NEXT j IF ap = 0 AND lm(mm)<31 y = y0+ht-20: x = x0+(k)*wm+10 FONT_COLOR 1,0,0,255: FONT_ITALIC 1 PRINT_LOCATE x+5,y: FONT_SIZE 1,12: PRINT "cal6.bas" FONT_SIZE 1,sz: FONT_COLOR 1,0,0,0: FONT_ITALIC_OFF 1: ap = 1 END_IF NEXT k FOR i = 1 TO nfe 2d_fill_off a$ = fe$(i): mm = VAL(LEFT$(a$,2)): j = VAL(MID$(a$,3,2)) a$ = RIGHT_POS$(a$,6) IF mm>=m1 AND mm<=(m1+nm-1) GOSUB Cell: PRINT_LOCATE x,y: PRINT a$ END_IF NEXT i RETURN ' ============================================================================= Clk: ' Clic sur une case d'un jour x = MOUSE_X_LEFT_DOWN(1): y = MOUSE_Y_LEFT_DOWN(1) IF x < x0 THEN RETURN IF x > (x0+wt) THEN RETURN IF y < (y0+hm) THEN RETURN IF y > (y0+ht) THEN RETURN x = 1+INT((x-x0)/wm): ' mois y = 1+INT((y-y0-hm)/hj): ' jour a$ = "" IF COUNT(34) > 0 b$ = RIGHT$("0"+STR$(x),2)+RIGHT$("0"+STR$(y),2): ' mois/jour cliqué FOR i = 1 TO COUNT(34) c$ = ITEM_READ$(34,i) IF LEFT$(c$,4) = b$ THEN a$ = a$+RIGHT_POS$(c$,6)+" - " NEXT i END_IF Joursem(aa,x,y) TEXT 35," "+jt$(rs_js%)+" "+STR$(y)+" "+m$(x)+" : "+a$ SHOW 35 RETURN ' ============================================================================= Edevt: f$ = revt$+"Evnt"+STR$(aa)+".txt": ' mise à jour événements EXECUTE_WAIT "Notepad.exe|"+f$ CLEAR 34: FILE_LOAD 34,f$ RETURN ' ============================================================================= Convp: ' Module d'impression WinTextPrint de Klaus ' Impression d'une image de page A4, orientation or%= 0 Portrait, =1 Paysage ' Surface imprimée = 204 x 290 mm, centrée sur 210x29 ft$ = rtmp$+"Cal.bmp": FILE_SAVE 1,ft$: ' image à imprimer fb$ = rtmp$+"Balises.txt": ' fichier temporaire de manoeuvre IF or% = 0 wp$ = "210": hp$ = "297": a$ = "<#orientation=Portrait#>" ELSE wp$ = "297": hp$ = "210": a$ = "<#orientation=Paysage#>" END_IF FILE_OPEN_WRITE 1,fb$ FILE_WRITELN 1,a$+" <#image="+ft$+","+STR$(-3)+","+STR$(-3)+","+wp$+","+hp$+"#>" FILE_CLOSE 1 EXECUTE_WAIT wtp$+"|/file="+fb$ FILE_DELETE fb$ RETURN ' ============================================================================= Cell: ' coordonnées cellule du jour j du mois mm x = x0+wm*(mm-m1)+wj y = y0+hm+(j-1)*hj x = x+4: y = y+1 RETURN ' ============================================================================= SUB Bisex(An) IF VARIABLE("bsx%") = 0 THEN DIM bsx%: ' = 1 si bissextile bsx% = 0: IF FRAC(An/4) = 0 AND FRAC(An/100) <> 0 THEN bsx% = 1 IF FRAC(An/400) = 0 THEN bsx% = 1 END_SUB ' ============================================================================= SUB Joursem(Annee,Mois,Jour) ' Jour de la semaine d'une date donnée (0= Dimanche à 6= Samedi) -> rs_js% DIM_LOCAL js_d IF VARIABLE("rs_js%") = 0 THEN DIM rs_js% js_d = Annee IF Mois<3 THEN js_d = js_d-1 js_d=INT(23*Mois/9)+Jour+4+Annee+INT(js_d/4)-INT(js_d/100)+INT(js_d/400) IF Mois>=3 THEN js_d = js_d-2 rs_js% = js_d-7*INT(js_d/7) END_SUB ' ============================================================================= SUB QPaques(Annee) ' Quantièmes de Pâques, Ascension, Pentecôte en fonction de Annee ' Résultats dans qpa, qas, qpe DIM_LOCAL a,b,c,d,e,f,g,h,i,k,l,m,bi,ci,cj,ex$ IF VARIABLE("qpa") = 0 THEN DIM qpa IF VARIABLE("qas") = 0 THEN DIM qas IF VARIABLE("qpe") = 0 THEN DIM qpe bi = 0: IF FRAC(Annee/4) = 0 AND FRAC(Annee/100) <> 0 THEN bi = 1 IF FRAC(Annee/400) = 0 THEN bi = 1 a = 19*FRAC(Annee/19): b = INT(Annee/100): c = 100*FRAC(Annee/100) d = INT(b/4) e = 4*FRAC(b/4) f = INT((b + 8) / 25) g = INT((b - f + 1) / 3) h = 30*FRAC((19 * a + b - d - g + 15)/30) i = INT(c/4) k = 4*FRAC(c/4) l = 7*FRAC((32 + 2 * e + 2 * i - h - k)/7) m = INT((a + 11 * h + 22 * l) / 451) qpa = h + l - 7 * m + 81 + bi: qpa = INT(qpa + .1) ex$ = "2004,2008,2020,2024,2036,2040": ' exceptions IF INSTR(ex$,STR$(Annee)) > 0 THEN qpa = qpa-1 qas = qpa + 39: qpe = qpa + 49 END_SUB ' ============================================================================= SUB Qjm(Annee,Q) ' Mois et jour en fonction du quantième -> mois%, jour% (définis dans l'appelant) DIM_LOCAL qt%,lm%,bi bi = 0: IF FRAC(Annee/4) = 0 AND FRAC(Annee/100) <> 0 THEN bi = 1 IF FRAC(Annee/400) = 0 THEN bi = 1 mois% = 1: qt% = 31 IF Q<32 j% = Q ELSE WHILE Q > qt% mois% = mois% + 1 IF INSTR("4,6,9,11",STR$(mois%)) > 0 lm% = 30 ELSE IF mois% = 2 lm% = 28 + bi ELSE lm% = 31 END_IF END_IF qt% = qt% + lm% END_WHILE jour% = Q - qt% + lm% END_IF END_SUB ' =============================================================================
Remarques: - Il faut adapter à ton goût les chemins en tête du programme, répertoire de panoeuvre, répertoire des fichiers événement, et répertoire de WinTextPrint de l'ami klaus (fonction impression). - On peut afficher un calendrier sur 3 mois, 6 mois ou 1 an - Les événements sont contenus dans des fichiers, 1 par an, 1 ligne par événeent. On peut éditer le fichier de l'année courante à la demande (bouton 'Edit Evt'). Si un événement est dans la liste il s'affiche dans sa case. on peut cliquer sur un jour quelconque, l'événement ééventuel s'affiche en haut, on peut en ajouter tant qu'on veut en éditant le fichier. (bouton 'Edit Evt'). - On peut imprimer l'ensemble de la feuille affichée. Perso tous les ans j'imprime 4 feiilles, 3 mois par feuille, et dans le courant de l'année je note les choses importantes à retenir au fur et à mesure.
Edit 05/12 21h30: quelques petites modifs
Dernière édition par JL35 le Dim 5 Déc 2021 - 21:11, édité 2 fois
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Sam 4 Déc 2021 - 15:53
Merci JL35,
Tu es un vrai ami,...
Je suis déjà trop fatigué pour aujourd'hui. Je vais tester demain. Je vois à l'image, et à tes commentaires, que cela correspond à ma demande.
Super, à demain
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: calendrier clicable Sam 4 Déc 2021 - 16:34
Eh oui, ça fait un bout de temps qu'on se connait ! Le programme est loin d'être parfait, mais tu dois pouvoir l'adapter facilement à tes besoins. Bon courage à toi Jean Claude !
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: calendrier clicable Sam 4 Déc 2021 - 16:55
Pour ma part, en utilisant KGF.dll, je peux proposer un calendrier pleine page mais dont l'espace graphique dépasse la zone visible à l'écran. Des ascenseurs gèrent cela automatiquement via mon objet ScrollPanel de KGF.dll. LE code ci-après montre ce que ça donne. On affiche par défaut l'année 2021 (puisqu'on y est...), mais un SPIN en haut de l'écran permet de choisir l'année qu'on peut. L'affichage s'adapte automatiquement, y compris la gestion des années bissextiles et des jours de semaines, les dimanches étant affichés sur fond rose.
Un clic dans une case quelconque affiche la date correspondante - c'st juste pour montrer que la date du champ cliquée est bien identifiée.
A partir de la,je pourrais ouvrir une fenêtre montrant la liste des évènements prévus pour cette date, dans un tableau chronologique, permettre de modifier, ajouter ou supprimer des évènements et de mémoriser tout cela dans une seule et unique base de données SQLite3 (dont un export en format CSV est parfaitement listble par Excel ou n'importe quel tableur ou même éditeur de texte.
Voici le code:
Code:
' Calendrier_avec_SQLite3.bas
' Ce programme montre un calendrier pleine page dans un ScrollPanel. ' Le calendrier est dessiné dans in PICTURE placé dans le ScrollPanel. ' Les mois sont arrangés par colonnes, avec 1 case par jour. ' Un clic dans une case ouvre ne fenêtre avec le détail des évènements de la journée. ' Tous les évènements sont mémorisés dans une base SQLite3, classés par date et heure de début.
' Une barre de commande en haut permet de choisir l'année.
' définir la fenêtre des évènements d'un jour form 100 : hide 100 : top 100,30 : left 100,20 : width 100,width_client(0)-20 : height 100,height_client(0)-40 SP1% = dll_call1("CreateScrollPanel",handle(100)) res% = dll_call5("LocateScrollPanel",SP1%,0,0,630,height_client(100))
panel 101 : top 101,0 : left 101,0 : width 101,600 : height 101,960 res% = dll_call4("AttachToScrollPanel",SP1%,handle(101),0,0)
picture 102 : parent 102,101 : top 102,0 : left 102,0 : on_click 102,click_102 width 102,width_client(101) : height 102,height_client(101) list 103 : parent 103,100 : top 103,0 : left 103,630 : width 103,350 : height 103,height_client(100) on_click 103,click_103
for j%=0 to 11 nj% = JourDeSemaine%(1,j%+1,ann%) for i%=1 to 31 if nj%=0 2d_flood j%*200+100,i%*25+12,255,127,127 else 2d_fill_color 255,255,255 end_if if i%<29 print_locate j%*200 + 5,i%*25+5 : print right$("0"+str$(i%),2) + " " + jour$(nj%) else if j%=1 if (i%=29) and (bissext%=1) then print_locate j%*200 + 5,i%*25+5 : print right$("0"+str$(i%),2) + " " + jour$(nj%) else if i%<31 print_locate j%*200 + 5,i%*25+5 : print right$("0"+str$(i%),2) + " " + jour$(nj%) else if (j%=0) or (j%=2) or (j%=4) or (j%=6) or (j%=7) or (j%=9) or (j%=11) print_locate j%*200 + 5,i%*25+5 : print right$("0"+str$(i%),2) + " " + jour$(nj%) end_if end_if end_if end_if nj% = nj% + 1 if nj%>6 then nj% = 0 next i% next j%
show 5 end_sub
sub tracer_picture102() 2d_target_is 102 print_target_is 102 for i%=1 to 23 2d_line 0,i%*40,width_client(102),i%*40 next i% 2d_line 50,0,50,height_client(102) for i%=0 to 23 print_locate 5,i%*40+5 print right$("0"+str$(i%),2)+":00" next i%
end_sub
sub ChoixJour() dim_local x%, y%, jrs% x% = mouse_x_left_down(5) y% = mouse_y_left_down(5) jour% = int(y%/25) mois% = int((x%+200)/200) ann% = val(text$(3)) jrs% = JourDeSemaine%(jour%, mois%, ann%) if (jrs%<0) or (jrs%>6) then exit_sub caption 100,jrs$(jrs%)+", le "+str$(jour%)+"/"+str$(mois%)+"/"+text$(3) show 100 end_sub
sub ChoixHeure() dim_local x%, y%,heure%, Ladate$, heure$ x% = mouse_x_left_down(102) y% = mouse_y_left_down(102) heure% = int((y%)/40) heure$ = right$("0"+str$(heure%),2) ' chercher les évnements pour jour%, mois%, ann%, heure%, déposer dans LIST 103 LaDate$ = str$(ann%)+"/"+right$("0"+str$(mois%),2)+"/"+right$("0"+str$(jour%),2) query$ = "SELECT * FROM Evenements WHERE Date = ²"+LaDate$ query$ = query$ + "² and Debut >= ²"+heure$+":00² and Debut <= ²" + heure$+":59" query$ = query$ + "² ORDER BY Debut" ' prémarer la requête res% = dll_call2("CompileSQLite3Script",SQL%,adr(s$)) ' Remplissage LIST par lecture ID, date, heure et libellé de chacun des enregistrements clear 103 for i%=1 to 100 : ' 100 évènements dans la même heure est fort improbable... res% = dll_call1("GetSQLite3NextRow",SQL%) : ' pointer l'évènement suivant if res%<0 then exit_for ' prendre le ID res% = dll_call2("GetSQLite3CellText",SQL%,1) s$ = text$(1001)+": " ' prendre la date res% = dll_call2("GetSQLite3CellText",SQL%,2) s$ = s$ + text$(1001)+", " ' prendre l'heure res% = dll_call2("GetSQLite3CellText",SQL%,3) s$ = s$ + text$(1001)+": " ' prendre le libellé res% = dll_call2("GetSQLite3CellText",SQL%,5) s$ = s$ + text$(1001) ' ajouter cela à la liste item_add 103,s$ next i%
' finaliser la requête res% = dll_call1("FinalizeSQLite3Request",SQL%)
if count(103)=0 then message "Il n'y a pas d'évènements pour cette tranche horaire !"
end_sub
sub ChoixEvenement()
end_sub
sub ConnecterSQLite3() res% = dll_call0("InitializeSQLite3") if file_exists(base$)=0 if message_confirmation_yes_no("Base de données absente. Voulez-vous la créer ?")<>1 exit_sub end_if ' ici, on crée la base SQL% = dll_call2("OpenSQLite3",adr(base$),handle(1001)) if SQL%=0 message "Erreur en création du fichier !" exit_sub end_if clear 1011 item_add 1011,"CREATE TABLE Evenements ([ID] INTEGER PRIMARY KEY," item_add 1011," [Date] VARCHAR (50), [Heure] VARCHAR (50), [Duree] INTEGER," item_add 1011," [Libelle] VARCHAR (10));" res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011)) if res%<0 message "Erreur en création de la base de données !" SQL% = dll_call1("CloseSQLite3",SQL%) exit_sub end_if n_evenements% = 0 n_champs% = 5
else SQL% = dll_call2("OpenSQLite3",adr(base$),handle(1001)) if SQL%=0 message "Ce fichier n'est pas une base SQLite3 valide :" exit_sub end_if res% = dll_call1("GetSQLite3TableNames",SQL%) if res%<>1 message "Ce fichier n'est pas une base des contacts !" SQL% = dll_call1("CloseSQLite3",SQL%) exit_sub end_if if item_read$(1001,1)<>table$ message "Ce fichier n'est pas une base des évènements - tables non conformes !" message text$(1001) SQL% = dll_call1("CloseSQLite3",SQL%) exit_sub end_if ' on charge la liste des colonnes de la table "Evenements" res% = dll_call2("GetSQLite3ColumnNames",SQL%,adr(table$)) if res%<>5 message "Ce fichier n'est pas une base des évènements - nombre des colonnes non conformes !" SQL% = dll_call1("CloseSQLite3",SQL%) exit_sub end_if n_champs% = res% err% = 0 for i%=1 to res% s$ = item_read$(1001,i%) if instr(s$,"["+Colonnes$(i%)+"]")=0 then err% = 1 next i% if err%=1 message "Ce fichier n'est pas une base des évènements - noms des colonnes non conformes !" SQL% = dll_call1("CloseSQLite3",SQL%) exit_sub end_if n_evenements% = dll_call2("GetSQLite3RowCount",SQL%,adr(s$)) end_if end_sub
Dernière édition par Klaus le Dim 5 Déc 2021 - 19:34, édité 3 fois
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Dim 5 Déc 2021 - 10:45
Merci à toi Klaus, Je n'ai pas encore testé le code de JL35... Aujourd'hui ça ne sera pas possible car la forme n'est pas au rendez-vous Il va me falloir du temps et de la pêche pour vous répondre à tous les deux. J 'espère que demain je serai en meilleur forme
A+
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: calendrier clicable Dim 5 Déc 2021 - 10:53
Y a pas d'urgence, Jean-Claude ! Pends bien soin de toi - la santé prime tout !
EDIT
J'ai complété mon code ci-dessus en y aoutant: 1. création et ouverture de la base de données SQLite3 2. petite correction dans la formule qui calcule le jour de la semaine 3. un clic dans la case d'une journée quelconque ouvre une fenêtre avec les horaires de 00:00 à 23:59 par tranches horaires
Je continue tranquillement...
Dernière édition par Klaus le Dim 5 Déc 2021 - 13:09, édité 1 fois
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Sujet: Re: calendrier clicable Dim 5 Déc 2021 - 13:06
Dis-moi Klaus, 23:90 c'est avant ou après minuit ?
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: calendrier clicable Dim 5 Déc 2021 - 13:09
Citation :
Dis-moi Klaus, 23:90 c'est avant ou après minuit ?
évidemment, c'est 23:59 h ! J'ai corrigé ci-dessus.
J'ai ajouté la détection de l'heure choisi dans mon code ci-dessus.
EDIT
J'ai ajouté le chargement des évènements dans une liste pour la tranche horaire cliquée. Evidemment, pour le moment, cette liste est vide. La prochaine version incluera la création d'un évènement dans une tranche horaire.
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
À tous ceux qui s’intéressent à l'astronomie et autres calculs astronomiques.
Vous trouverez sur mon webdav le livre de Jean Meeus Astronomical Algorithms qui est une référence pour les calculs astronomiques. Vous le trouvez sous forme .zip et aussi .pdf Le livre est écrit dans la langue de Shakespeare mais vous pouvez en tirez profit.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Bonjour à tous, @Papydall Tu as dû te tromper de sujet C'est pas grave.. Je te souhaite un bon retour
@ JL35 J'ai réussi tant bien que mal, à faire fonctionner ton programme. J' ai dépensé beaucoup d'énergie pour adapter les chemins. Ton programme correspond bien à ma demande, mais il ne fonctionne pas correctement. Où bien je n'ai pas compris son fonctionnemnt: comment enregistrer le texte d'une cellule avant de fermer ou de cliquer sur le bouton édit env.
@Klaus Je ne t'oubli pas,
A+
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
Salut Jean Claude, En fait, toutes les modifications, mises à jour, etc. se font en cliquant sur le bouton 'Edit Evt', qui affiche le fichier des événements de l'année en cours et permet de le modifier et de le réécrire,
Il n'est pas prévu d'éditer une case donnée, c'est tout le fichier de l'année qui est concerné. Le clic sur une case permet seulement de voir le contenu enregistré, pas de le modifier. D'accord, c'est la solution de facilité...
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
C'est dommage qu'il n'y ai pas une fenêtre par cellule. d'autant plus dommage qu'avec ton code on est très proche de ce que je souhaite. Mais malheureusement reprendre ton code pour l'adapter me parais mission impossible pour le moment. En tout cas, merci.
Demain, je vais explorer la proposition de Klaus.
bientôt.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: calendrier clicable Mar 7 Déc 2021 - 7:49
Citation :
C'est dommage qu'il n'y ai pas une fenêtre par cellule.
Si, c'est justement l'objectif. Un click dans une cellule ouvre une fenêtre donnant 24 tranches horaires, cliquables à leur tour.
La gestion de SQLite3 pour le calendrier commence à tourner. Je travaille sur l'affichage graphique des plages des évènements enregistrés...
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: calendrier clicable Mar 7 Déc 2021 - 10:33
Bonjour à tous !
@Klaus Je viens d’effectuer un test de ton calendrier en cours de développement. C’est vraiment très très bien. C’est clair, net et très simple d’utilisation. L’accès aux évènements par un simple clic dans la case d’un jour choisi fonctionne parfaitement bien. Tout s’affiche en grand et c’est parfaitement lisible. C’est très pro. Un grand BRAVO !
Bonne continuation pour la suite.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Mar 7 Déc 2021 - 10:38
J' abandonne provisoirement car c'est trop difficille pour moi.
A+
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
Sujet: Re: calendrier clicable Ven 10 Déc 2021 - 13:36
Oh, oh, mais c'est un calendrier que je connais, ça !!! Je me disais bien que j'avais les oreilles qui sifflaient...
Désolé, cela fait un petit moment que j'avais déserté le forum...
Pour ce qui est du calendrier perpétuel que j'avais fabriqué il y a longtemps déjà, et que j'utilise chaque jour, car il est bien pratique, je me disais quand même qu'il est bien pour un retraité, comme moi, où il n'y a qu'un seul événement à noter chaque jour, mais c'est vrai que j'ai depuis longtemps l'idée de le compléter en en faisant un vrai calendrier-agenda utilisable par des gens qui ont plusieurs choses à noter par jour. Alors, Jean-Claude, ton idée m'intéresse, même si je ne suis pas sûr d'être en mesure d'y ajouter toutes les consignes que tu souhaites...? Voilà quand même un petit défi à réaliser, je ne sais pas si cela répondra à l'utilisation que tu souhaites. A suivre...
NOTA: Comme je crois que je n'ai jamais publié la version que j'utilise, vois « Calendrier perpétuel new look » pour récapituler où on en est actuellement...
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Lun 3 Jan 2022 - 13:50
Merci JJN4 Je t'ai répondu => ici il me reste à regarder celui de Klaus dès que possible.
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: calendrier clicable Mar 22 Fév 2022 - 16:13
Bonjour à tous !
Pour relancer la discussion sur le calendrier perpétuel avec notes, je vous propose ma version. Rien à voir avec les versions de JJN4 ou JL35. La mienne est minimaliste.
Elle vous donne la date du jour et permet d'avoir des notes par jour avec un affichage automatique On clique sur le jour du mois pour le sélectionner ou on choisit dans les combos en haut le jour, le mois, ou l'année.
- Le jour sélectionné apparait sur fond jaune. - La date du jour apparait en bleu si une note existe. - 1 bouton en haut permet le retour à la date d'aujourd'hui. - 2 boutons en bas pour créer ou supprimer une note. - La sauvegarde est automatique.
Le code est ici (MAJ 26.02.2022 - 15h02) :
Spoiler:
Code:
' Programme : CALENDRIER MENSUEL avec NOTES ' Créateur : MiNiBuG ' Date : 02.02.2022
WIDTH 0,388 : CAPTION 0,"CALENDRIER MENSUEL avec NOTES" : ON_CLOSE 0,fermer COMBO 3 : PARENT 3,0 : LEFT 3,5 : TOP 3,5 : WIDTH 3,45 : FONT_SIZE 3,13 : ON_CHANGE 3,affiche COMBO 4 : PARENT 4,0 : LEFT 4,52 : TOP 4,5 : WIDTH 4,105 : FONT_SIZE 4,13 : ON_CHANGE 4,affiche COMBO 5 : PARENT 5,0 : LEFT 5,160 : TOP 5,5 : WIDTH 5,60 : FONT_SIZE 5,13 : ON_CHANGE 5,affiche BUTTON 7 : PARENT 7,0 : LEFT 7,223 : TOP 7,5 : WIDTH 7,145 : HEIGHT 7,27 : FONT_SIZE 7,13 : CAPTION 7,"Aujourd'hui" : ON_CLICK 7,aujourdhui ALPHA 9 : PARENT 9,0 : LEFT 9,5 : TOP 9,56 : FONT_SIZE 9,12 : CAPTION 9," Lun Mar Mer Jeu Ven Sam Dim" a%=10 : FOR y%=1 TO 6 : FOR x%=1 TO 7 PANEL a% : PARENT a%,0 : TOP a%,y%*52+26 : LEFT a%,x%*52-49 : WIDTH a%,52 : HEIGHT a%,52 FONT_SIZE a%,16 : COLOR a%,255,255,255 : ON_CLICK a%,jour : a%=a%+1 NEXT x% : NEXT y% ALPHA 52 : PARENT 52,0 : LEFT 52,375 : TOP 52,6 : FONT_SIZE 52,13
MEMO 54 : PARENT 54,0 : LEFT 54,373 : TOP 54,32 : WIDTH 54,357 : HEIGHT 54,405 : FONT_SIZE 54,13 : ON_CHANGE 54,saisienote BUTTON 55 : PARENT 55,0 : LEFT 55,5 : TOP 55,395 : WIDTH 55,155 : HEIGHT 55,40 : FONT_SIZE 55,15 : CAPTION 55,"Créer une note" : ON_CLICK 55,creenote BUTTON 56 : PARENT 56,0 : LEFT 56,170 : TOP 56,395 : WIDTH 56,195 : HEIGHT 56,40 : FONT_SIZE 56,15 : CAPTION 56,"Supprimer une note" : ON_CLICK 56,supprimenote
FOR a%=0 TO 6 : READ j$(a%) : NEXT a% FOR a%=1 TO 12 : READ m$(a%) : ITEM_ADD 4,m$(a%) : READ nbj(a%) : NEXT a% FOR a%=1900 TO 2050 : ITEM_ADD 5,STR$(a%) : NEXT a% GOSUB aujourdhui
chemin$=DIR_CURRENT$ IF DIR_EXISTS(chemin$+"\notes")=0 THEN DIR_MAKE chemin$+"\notes" : PAUSE 100
GOSUB jour1 : GOSUB affiche
SHOW 0
END
jour: d$=chemin$+"\notes"+RIGHT$("0"+STR$(jour%),2)+RIGHT$("0"+STR$(mois%),2)+STR$(annee%)+".nte" IF TEXT$(54)<>"" FILE_SAVE 54,d$ : PAUSE 100 ELSE GOSUB supprimenote END_IF CLEAR 54 IF CAPTION$(NUMBER_CLICK)<>"" THEN jour%=VAL(CAPTION$(NUMBER_CLICK)) : TEXT 3,STR$(jour%) : GOSUB affiche
jour1: d$=chemin$+"\notes"+RIGHT$("0"+STR$(jour%),2)+RIGHT$("0"+STR$(mois%),2)+STR$(annee%)+".nte" IF FILE_EXISTS(d$)=1 INACTIVE 55 : ACTIVE 56 ELSE ACTIVE 55 : INACTIVE 56 END_IF RETURN
aujourdhui: d$=chemin$+"\notes"+RIGHT$("0"+STR$(jour%),2)+RIGHT$("0"+STR$(mois%),2)+STR$(annee%)+".nte" IF TEXT$(54)<>"" THEN FILE_SAVE 54,d$ : PAUSE 100 : CLEAR 54 jour%=LEFT$(DATE$,2) : mois%=MID$(DATE$,4,2) : annee%=RIGHT$(DATE$,4) TEXT 3,STR$(jour%) : TEXT 4,m$(mois%) : TEXT 5,STR$(annee%) GOSUB jour1
saisienote: IF TEXT$(54)="" INACTIVE 56 FONT_COLOR jselect%,0,0,0 : FONT_BOLD_OFF jselect% ELSE ACTIVE 56 FONT_COLOR jselect%,100,100,255 : FONT_BOLD jselect% END_IF RETURN
creenote: IF ntexist%=0 CAPTION 52,"Créer une note à la date du "+RIGHT$("0"+STR$(jour%),2)+" "+m$(mois%)+" "+STR$(annee%) WIDTH 0,750 : INACTIVE 55 : SET_FOCUS 54 END_IF RETURN
supprimenote: d$=chemin$+"\notes"+RIGHT$("0"+STR$(jour%),2)+RIGHT$("0"+STR$(mois%),2)+STR$(annee%)+".nte" IF FILE_EXISTS(d$)=1 THEN FILE_DELETE d$ : PAUSE 100 CLEAR 54 : ACTIVE 55 : INACTIVE 56 : WIDTH 0,388 GOSUB affiche RETURN
fermer: d$=chemin$+"\notes"+RIGHT$("0"+STR$(jour%),2)+RIGHT$("0"+STR$(mois%),2)+STR$(annee%)+".nte" IF TEXT$(54)<>"" THEN FILE_SAVE 54,d$ : PAUSE 100 RETURN
Dernière édition par Minibug le Sam 26 Fév 2022 - 14:34, édité 5 fois
lechat75 aime ce message
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Mar 22 Fév 2022 - 16:55
Bonjour à tous,
@Minibug Je vais le tester dès que possible. Actuellement j'utilise la version de JJN4 dont je ne trouve plus le poste. Ta version me parait simple d'utilisation. A+
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Mer 23 Fév 2022 - 9:35
@minibug Je viens de tester.
Il y a un problème : j'ai fait un exécutable de ton code , je l'ai placé dans un dossier. A l'exécution il y a bien un sous dossier "notes" qui est créé mais pas de note. question comment la note est enregistrée? A+
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: calendrier clicable Mer 23 Fév 2022 - 12:02
Bonjour Jean Claude,
Hum je pense savoir ce qui ce passe. Je regarde...
PS : Je viens de mettre le code à jour ci-dessus. Maintenant ça devrait mieux fonctionner.
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: calendrier clicable Mer 23 Fév 2022 - 15:41
Super Minibug ça fonctionne. Je vais m'en servir en plus de celui de JJN4. Ne soit pas trop pressé , il me faudra un peu de temps. Merci. A+
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: calendrier clicable Mer 23 Fév 2022 - 16:26
Bonjour à tous !
Beau calendrier ! Bravo Minibug ! C'est clair et net ! Belle présentation !
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: calendrier clicable Ven 25 Fév 2022 - 15:16
Bonjour et merci à tous les 2 pour vos retours.
@ Jean Claude Prends le temps qu'il te faut, le programme ne va pas s'envoler...