Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Un petit tableur | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Un petit tableur Jeu 10 Mar 2011 - 18:28 | |
| C'est plutôt un petit exercice de style, bien améliorable. J'ai utilisé un Picture plutôt qu'un Grid (qui semblait plus indiqué pour faire ça) pour pouvoir utiliser individuellement dans chaque cellule du tableau des enrichissements de texte différents: police, taille, couleur, alignement etc. Il est très perfectible, il manque quelques bricoles, mais voici l'état actuel. Pour plus de détails du fonctionnement, consulter l'aide intégrée. - VERSION A JOUR - - Code:
-
DIM w0, h0, p, nc, nr, lc, hl, slc, lcl, het, et, i%, j%, k%, x, y, x1, y1, a$, b$, d$ DIM arg$, c, r, c1, r1, c2, r2, l, fnt$, sz, gras, ital, soul, alig$, cout$, couf$ DIM fc$, ft$, fimg$, fpr$, xs, ys, wp, hp, sa$, shl, lt, ht, ini%, yet, a1$, a2$ DIM maxr, maxc, cars$, clc, prt$, lim, him, lpr, hpr, ori, nc1, nr1, lc1, hl1, cc, rr DIM sc1, sr1, t%, u$, r11, c11, r12, c12, ca, ra, vnn%, fnbr, clig, xp, yp, hlp$, mes$ maxr = 60: maxc = 20: ' rangées maxi, colonnes maxi DIM xc(maxc), yr(maxr), lco(maxc), hro(maxr) DIM cel$(maxr,maxc), pol$(maxr,maxc), siz(maxr,maxc), enr$(maxr,maxc) DIM ali$(maxr,maxc), cot$(maxr,maxc), cof$(maxr,maxc), fnb(maxr,maxc) DIM rc$, ct$, cf$, od, sd, rf, gf, bf, wa, ha, la, mg, mh, wi, hi, rx, cx, v, va, v1, v2
LABEL new, opn, der, savc, savt, savs, impr, quit, copy, paste, cut LABEL Chpol, Attp, Chsiz, Atts, Enrich, Majenr, Majali, Majcou, Majfnb, Majtx, Pra, Formon LABEL ra, rb, rc, rd, re, rf, Clic2cr, Desel, Newcel, Majpr, Key, Dimensions, Tailtext LABEL lico, LinColn, Desgri, Deslign, Coulig, Descel, Clicol, Cliran, optim, Valpr LABEL Afmes, Formules, Eval, Aide, Copform, Verif, Alerte, Trace
fc$ = "C:\Temp\Test.csv": ' fichier de manoeuvre <============================ ft$ = "C:\Temp\Test.tab": ' idem, formatage conservé fimg$ = "Z:\Test.bmp" prt$ = "C:\Util\WinTextPrint.exe " fpr$ = "Z:\Tab.prt"
nc = 6: ' nb de colonnes utiles nr = 20: ' nb de lignes utiles lc = 120: ' largeur de colonne lcl = 30: ' largeur de la 1ère colonne hl = 20: ' hauteur de rangée het = hl: ' hauteur de la 1ère rangée alig$ = "L": ' alignement gauche cout$ = "N": ' couleur texte noire couf$ = "W": ' couleur fond blanche rf = 255: gf = 255: bf = 255 clig = 192: ' couleur des lignes (192,192,192) cars$ = "\": ' séparateur de valeurs dans le fichier ini% = 0 et = 50: ' hauteur en-tête
CAPTION 0, fc$ + " - Tableur Panoramic"
MAIN_MENU 1 SUB_MENU 11: PARENT 11, 1: CAPTION 11, "Fichier" SUB_MENU 12: PARENT 12, 1: CAPTION 12, "Edition" ' SUB_MENU 13: PARENT 13, 1: CAPTION 13, "Affichage" ' SUB_MENU 14: PARENT 14, 1: CAPTION 14, "Insertion" ' SUB_MENU 15: PARENT 15, 1: CAPTION 15, "Format" ' SUB_MENU 16: PARENT 16, 1: CAPTION 16, "Outils" SUB_MENU 17: PARENT 17, 1: CAPTION 17, "Aide" ON_CLICK 17, Aide
' Sous-menus 2 (Fichier) SUB_MENU 21: CAPTION 21,"Nouveau" : PARENT 21, 11 SUB_MENU 22: CAPTION 22,"Ouvrir" : PARENT 22, 11 SUB_MENU 23: CAPTION 23,"Ouvrir dernier enregistré": PARENT 23, 11 SUB_MENU 24: CAPTION 24,"Enregistrer en CSV (sans format)" : PARENT 24, 11 SUB_MENU 25: CAPTION 25,"Enregistrer en TAB (avec format)" : PARENT 25, 11 SUB_MENU 26: CAPTION 26,"Enregistrer sous...": PARENT 26, 11 SUB_MENU 27: CAPTION 27,"Imprimer": PARENT 27, 11 SUB_MENU 28: CAPTION 28,"Quitter" : PARENT 28, 11 ON_CLICK 21, new: ON_CLICK 22, opn: ON_CLICK 23, der: ON_CLICK 24, savc ON_CLICK 25, savt: ON_CLICK 26, savs: ON_CLICK 27, impr: ON_CLICK 28, quit
' Sous-menus 3 (Edition) SUB_MENU 31: CAPTION 31,"Copier" : PARENT 31, 12 SUB_MENU 32: CAPTION 32,"Coller" : PARENT 32, 12 SUB_MENU 33: CAPTION 33,"Couper" : PARENT 33, 12 ON_CLICK 31, copy: ON_CLICK 32, paste: ON_CLICK 33, cut
fnt$ = "Arial": sz = 10: gras = 0: ital = 0: soul = 0 FOR r = 1 TO nr FOR c = 1 TO nc cel$(r,c)="": pol$(r,c)=fnt$: siz(r,c)=sz: enr$(r,c)="": ali$(r,c)="L" cot$(r,c)="N": cof$(r,c)="W": fnb(r,c)=0 NEXT c NEXT r EDIT 2: TOP 2, 0: LEFT 2, 2: WIDTH 2, 150: HEIGHT 2, 20 TEXT 2, fnt$ ON_CLICK 2, Chpol EDIT 3: TOP 3, 0: LEFT 3, 152: HEIGHT 3, 20: WIDTH 3, 50 TEXT 3, STR$(sz) ON_CLICK 3, Chsiz ALPHA 4: TOP 4, 24: LEFT 4, 6: WIDTH 4, lcl: CAPTION 4, "A1" EDIT 5: TOP 5, 22: LEFT 5, 30: WIDTH 5, 450: HEIGHT 5, 20 FONT_NAME 5, fnt$: FONT_SIZE 5, sz ON_KEY_DOWN 5, Key yet = 50 ' Enrichissements PICTURE 6: TOP 6, 0: LEFT 6, 210: WIDTH 6, 20: HEIGHT 6, 20: HINT 6, "Gras" 2D_TARGET_IS 6: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 PRINT_TARGET_IS 6: FONT_SIZE 6, 10: FONT_BOLD 6: PRINT_LOCATE 4, 2: PRINT "G" PICTURE 7: TOP 7, 0: LEFT 7, 235: WIDTH 7, 20: HEIGHT 7, 20: HINT 7, "Italiques" 2D_TARGET_IS 7: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 PRINT_TARGET_IS 7: FONT_SIZE 7, 10: FONT_ITALIC 7: PRINT_LOCATE 4, 2: PRINT "I" PICTURE 8: TOP 8, 0: LEFT 8, 260: WIDTH 8, 20: HEIGHT 8, 20: HINT 8, "Souligné" 2D_TARGET_IS 8: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 PRINT_TARGET_IS 8: FONT_SIZE 8, 10: FONT_UNDERLINE 8: PRINT_LOCATE 4, 2: PRINT "S" FOR i% = 6 TO 8: ON_CLICK i%, Enrich: NEXT i% ' Alignement PICTURE 89: TOP 89, 0: LEFT 89, 285: WIDTH 89, 20: HEIGHT 89, 20: HINT 89, "Aligné à gauche" 2D_TARGET_IS 89: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0 FOR j% = 4 TO 16 STEP 6: 2D_LINE 4, j%, 16, j%: NEXT j% FOR j% = 7 TO 18 STEP 6: 2D_LINE 4, j%, 12, j%: NEXT j% PICTURE 90: TOP 90, 0: LEFT 90, 310: WIDTH 90, 20: HEIGHT 90, 20: HINT 90, "Centré" 2D_TARGET_IS 90: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0 FOR j% = 4 TO 16 STEP 6: 2D_LINE 4, j%, 16, j%: NEXT j% FOR j% = 7 TO 18 STEP 6: 2D_LINE 7, j%, 13, j%: NEXT j% PICTURE 91: TOP 91, 0: LEFT 91, 335: WIDTH 91, 20: HEIGHT 91, 20: HINT 91, "Aligné à droite" 2D_TARGET_IS 91: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0 FOR j% = 4 TO 16 STEP 6: 2D_LINE 4, j%, 16, j%: NEXT j% FOR j% = 7 TO 18 STEP 6: 2D_LINE 8, j%, 16, j%: NEXT j% FOR i% = 89 TO 91: ON_CLICK i%, Enrich: NEXT i%
' Couleurs PICTURE 70: TOP 70, 0: LEFT 70, 360: WIDTH 70, 20: HEIGHT 70, 20: HINT 70, "Texte Noir" 2D_TARGET_IS 70 PRINT_TARGET_IS 70: FONT_COLOR 70,0,0,0: FONT_SIZE 70,12: FONT_BOLD 70:PRINT_LOCATE 4,0:PRINT "A" PICTURE 71: TOP 71, 0: LEFT 71, 380: WIDTH 71, 20: HEIGHT 71, 20: HINT 71, "Texte Rouge" 2D_TARGET_IS 71 PRINT_TARGET_IS 71: FONT_COLOR 71,255,0,0: FONT_SIZE 71,12: FONT_BOLD 71:PRINT_LOCATE 4,0:PRINT "A" PICTURE 72: TOP 72, 0: LEFT 72, 400: WIDTH 72, 20: HEIGHT 72, 20: HINT 72, "Texte Vert" 2D_TARGET_IS 72 PRINT_TARGET_IS 72: FONT_COLOR 72,0,255,0: FONT_SIZE 72,12: FONT_BOLD 72:PRINT_LOCATE 4,0:PRINT "A" PICTURE 73: TOP 73, 0: LEFT 73, 420: WIDTH 73, 20: HEIGHT 73, 20: HINT 73, "Texte Bleu" 2D_TARGET_IS 73 PRINT_TARGET_IS 73: FONT_COLOR 73,0,0,255: FONT_SIZE 73,12: FONT_BOLD 73:PRINT_LOCATE 4,0:PRINT "A"
PICTURE 74: TOP 74, 0: LEFT 74, 450: WIDTH 74, 20: HEIGHT 74, 20: HINT 74, "Fond Blanc" 2D_TARGET_IS 74: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1: 2D_PEN_COLOR 255,255,255: 2D_FILL_COLOR 255,255,255: 2D_RECTANGLE 3,3,17,17 PICTURE 75: TOP 75, 0: LEFT 75, 470: WIDTH 75, 20: HEIGHT 75, 20: HINT 75, "Fond Jaune" 2D_TARGET_IS 75: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1: 2D_PEN_COLOR 255,255,0: 2D_FILL_COLOR 255,255,0: 2D_RECTANGLE 3,3,17,17 PICTURE 76: TOP 76, 0: LEFT 76, 490: WIDTH 76, 20: HEIGHT 76, 20: HINT 76, "Fond Magenta" 2D_TARGET_IS 76: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1: 2D_PEN_COLOR 255,128,255: 2D_FILL_COLOR 255,192,255: 2D_RECTANGLE 3,3,17,17 PICTURE 77: TOP 77, 0: LEFT 77, 510: WIDTH 77, 20: HEIGHT 77, 20: HINT 77, "Fond Cyan" 2D_TARGET_IS 77: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1: 2D_PEN_COLOR 128,255,255: 2D_FILL_COLOR 192,255,255: 2D_RECTANGLE 3,3,17,17 FOR i% = 70 TO 77: ON_CLICK i%, Enrich: NEXT i%
PICTURE 78: TOP 78, 0: LEFT 78, 540: WIDTH 78, 20: HEIGHT 78, 20: HINT 78, "Format monétaire" 2D_TARGET_IS 78: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 PRINT_TARGET_IS 78: FONT_NAME 78, "Lucida Console": FONT_SIZE 78, 12: FONT_BOLD 78 PRINT_LOCATE 4, 3: PRINT "€" ON_CLICK 78, Enrich
PICTURE 80: TOP 80, 0: LEFT 80, 570: WIDTH 80, 20: HEIGHT 80, 20 HINT 80, "Recopie de la formule"+chr$(10)+"de la cellule précédente"+chr$(10)+"incrémentée." 2D_TARGET_IS 80: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 PRINT_TARGET_IS 80: FONT_NAME 80, "Lucida Console": FONT_SIZE 80, 12 PRINT_LOCATE 5, 2: PRINT "R" ON_CLICK 80, Copform
PICTURE 81: TOP 81,0: LEFT 81, 600: WIDTH 81, 20: HEIGHT 81, 20: HINT 81,"Couleur des lignes" 2D_TARGET_IS 81: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0: 2D_LINE 3,6,17,6: 2D_LINE 3,13,17,13 2D_LINE 4,3,4,17: 2D_LINE 15,3,15,17 ON_CLICK 81, Coulig
FORM 50: TOP 50, et+80: LEFT 50, 100: WIDTH 50, 240: HEIGHT 50, 370: HIDE 50 BUTTON 51: PARENT 51, 50: TOP 51, 307: LEFT 51, 70: CAPTION 51, "OK" ALPHA 52: PARENT 52, 50: TOP 52, 10: LEFT 52, 60: FONT_BOLD 52 ON_CLICK 51, Dimensions
ALPHA 114: PARENT 114, 50: TOP 114, 35: LEFT 114, 5: CAPTION 114, "Largeur de colonnes:" SPIN 115: PARENT 115, 50: LEFT 115, 130: TOP 115, 35: WIDTH 115, 70: MAX 115, 600
ALPHA 130: PARENT 130, 50: TOP 130, 60: LEFT 130, 5: CAPTION 130, "Enrichissements:" CHECK 131: PARENT 131, 50: TOP 131, 80: LEFT 131, 10: CAPTION 131, "Gras" CHECK 132: PARENT 132, 50: TOP 132, 80: LEFT 132, 80: CAPTION 132, "Italiques" CHECK 133: PARENT 133, 50: TOP 133, 80: LEFT 133, 150: WIDTH 133, 60: CAPTION 133, "Souligné"
CONTAINER_OPTION 135: PARENT 135, 50: TOP 135, 110: LEFT 135, 5: WIDTH 135, 215: HEIGHT 135, 40 CAPTION 135, " Alignement texte: " OPTION 136: PARENT 136,135: LEFT 136, 5: TOP 136, 18: CAPTION 136, "Gauche" OPTION 137: PARENT 137,135: LEFT 137, 75: TOP 137, 18: CAPTION 137, "Centré" OPTION 138: PARENT 138,135: LEFT 138, 145: TOP 138, 18: CAPTION 138, "Droite" CONTAINER_OPTION 140: PARENT 140, 50: TOP 140, 160: LEFT 140, 5: WIDTH 140, 215: HEIGHT 140, 40 CAPTION 140, " Couleur texte: " OPTION 141: PARENT 141,140: LEFT 141, 5: TOP 141, 18: CAPTION 141, "Noir" OPTION 142: PARENT 142,140: LEFT 142, 55: TOP 142, 18: CAPTION 142, "Rouge" OPTION 143: PARENT 143,140: LEFT 143, 115: TOP 143, 18: CAPTION 143, "Vert" OPTION 144: PARENT 144,140: LEFT 144, 165: TOP 144, 18: CAPTION 144, "Bleu" CONTAINER_OPTION 145: PARENT 145, 50: TOP 145, 210: LEFT 145, 5: WIDTH 145, 215: HEIGHT 145, 40 CAPTION 145, " Couleur fond: " OPTION 147: PARENT 147,145: LEFT 147, 5: TOP 147, 18: CAPTION 147, "Blanc" OPTION 148: PARENT 148,145: LEFT 148, 55: TOP 148, 18: CAPTION 148, "Jaune" OPTION 149: PARENT 149,145: LEFT 149, 105: TOP 149, 18: CAPTION 149, "Magenta" OPTION 150: PARENT 150,145: LEFT 150, 165: TOP 150, 18: CAPTION 150, "Cyan" CONTAINER_OPTION 151: PARENT 151, 50: TOP 151, 260: LEFT 151, 5: WIDTH 151, 215: HEIGHT 151, 40 CAPTION 151, "Format nombres: " OPTION 152: PARENT 152, 151: LEFT 152, 5: TOP 152, 18: CAPTION 152, "Normal" OPTION 153: PARENT 153, 151: LEFT 153, 80: TOP 153, 18: CAPTION 153, "Monétaire"
FORM 60: TOP 60, et+80: LEFT 60, 50: WIDTH 60, 220: HEIGHT 60, 200: HIDE 60 CAPTION 60, "Lignes/Colonnes" ALPHA 160: PARENT 160, 60: TOP 160, 10: CAPTION 160, " Nombre de colonnes:" SPIN 161: PARENT 161, 60: TOP 161, 10: LEFT 161, 120: WIDTH 161, 60 ALPHA 162: PARENT 162, 60: TOP 162, 35: CAPTION 162, " Largeur des colonnes:" SPIN 163: PARENT 163, 60: TOP 163, 35: LEFT 163, 120: WIDTH 163, 60 ALPHA 164: PARENT 164, 60: TOP 164, 65: CAPTION 164, " Nombre de rangées:" SPIN 165: PARENT 165, 60: TOP 165, 65: LEFT 165, 120: WIDTH 165, 60 ALPHA 166: PARENT 166, 60: TOP 166, 90: CAPTION 166, " Hauteur des rangées:" SPIN 167: PARENT 167, 60: TOP 167, 90: LEFT 167, 120: WIDTH 167, 60 BUTTON 168: PARENT 168, 60: TOP 168, 130: LEFT 168, 60: WIDTH 168, 80 CAPTION 168, "OK": ON_CLICK 168, lico MIN 161, 1: MIN 165, 1: MIN 163, 1: MIN 167, 1 MAX 161, 20: MAX 163, 500: MAX 165, 60: MAX 167, 100 POSITION 161, nc: POSITION 163, lc: POSITION 165, nr: POSITION 167, hl ' Dialogue 'impression' FORM 220: TOP 220, et+80: LEFT 220, 100: WIDTH 220, 300: HEIGHT 220, 500: HIDE 220 ALPHA 239: PARENT 239, 220: TOP 239, 2: LEFT 239, 10 CONTAINER_OPTION 221: PARENT 221, 220: TOP 221, 22: LEFT 221, 10: HEIGHT 221, 40: WIDTH 221, 240 CAPTION 221, " Orientation: " OPTION 222: PARENT 222, 221: TOP 222, 16: LEFT 222, 10: CAPTION 222, "Portrait": ON_CLICK 222, optim OPTION 223: PARENT 223, 221: TOP 223, 16: LEFT 223, 100: CAPTION 223, "Paysage": ON_CLICK 223, optim EDIT 224: PARENT 224, 220: TOP 224, 75: LEFT 224, 10: WIDTH 224, 40 ALPHA 225: PARENT 225, 220: TOP 225, 75: LEFT 225, 60: CAPTION 225, "Marge gauche" mg = 3 EDIT 226: PARENT 226, 220: TOP 226, 75 : LEFT 226, 140: WIDTH 226, 40 ALPHA 227: PARENT 227, 220: TOP 227, 75: LEFT 227, 200: CAPTION 227, "Marge haut" mh = 3 EDIT 228: PARENT 228, 220: TOP 228, 105: LEFT 228, 10: WIDTH 228, 40 ALPHA 229: PARENT 229, 220: TOP 229, 105: LEFT 229, 60: CAPTION 229, "Largeur" EDIT 230: PARENT 230, 220: TOP 230, 105 : LEFT 230, 140: WIDTH 230, 40 ALPHA 231: PARENT 231, 220: TOP 231, 105: LEFT 231, 200: CAPTION 231, "Hauteur" BUTTON 233: PARENT 233, 220: TOP 233, 130: LEFT 233, 100: CAPTION 233, "Valider" ON_CLICK 233, optim
wa = 190: ha = INT(297*wa/210): la = 50 PICTURE 232: PARENT 232, 220: TOP 232, 160: LEFT 232, la: WIDTH 232, wa: HEIGHT 232, ha 2D_TARGET_IS 232: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,wa, ha
BUTTON 234: PARENT 234, 220: TOP 234, 435: LEFT 234, 55: CAPTION 234, "OK" ON_CLICK 234, Valpr BUTTON 235: PARENT 235, 220: TOP 235, 435: LEFT 235, 155: CAPTION 235, "Annuler" ON_CLICK 235, Valpr
GOSUB Majenr
FOR i% = 1 TO maxc: lco(i%) = lc: NEXT i%: ' largeur des colonnes FOR i% = 1 TO maxr: hro(i%) = hl: NEXT i%: ' hauteur des lignes
p = 100: PICTURE p: PICTURE p+1: PICTURE p+2: PICTURE p+3 GOSUB Desgri: ' Pictures p, p+1, p+2 et p+3
od = 200: OPEN_DIALOG od sd = 201: SAVE_DIALOG sd
rc$=CHR$(10) hlp$=CHR$(9)+CHR$(9)+CHR$(9)+" - AIDE DU TABLEUR PANORAMIC -"+rc$ hlp$=hlp$+CHR$(9)+CHR$(9)+CHR$(9)+" ======================="+rc$+rc$ hlp$=hlp$+"Les dimensions initiales du tableau sont fixées arbitrairement dans le programme (20 rangées de"+rc$ hlp$=hlp$+"6 colonnes)."+rc$ hlp$=hlp$+"Couleur des lignes de séparation des cellules: cliquer sur l'outil 'Couleur des lignes', on dispose"+rc$ hlp$=hlp$+"de 5 nuances de gris, du noir au blanc (pas de lignes), en bascule. Cette modification de teinte"+rc$ hlp$=hlp$+"s'applique à l'ensemble du tableau."+rc$ hlp$=hlp$+"Pour modifier globalement les dimensions et les largeurs et hauteurs de cellules, cliquer sur la case"+rc$ hlp$=hlp$+"'L/C' en haut à gauche du tableau."+rc$ hlp$=hlp$+"Pour modifier individuellement la largeur d'une colonne, ainsi que le formatage du texte dans"+rc$ hlp$=hlp$+"toutes les cellules de cette colonne, cliquer sur l'en-tête de cette colonne."+rc$ hlp$=hlp$+"De même, pour modifier la hauteur d'une rangée et le formatage du texte dans toutes les cellules"+rc$ hlp$=hlp$+"de cette rangée, cliquer sur le numéro de cette rangée."+rc$+rc$ hlp$=hlp$+"Chaque cellule du tableau peut supporter un formatage individuel:"+rc$ hlp$=hlp$+"- Police, taille et couleur de caractère (noir, rouge, vert ou bleu)."+rc$ hlp$=hlp$+"- Enrichissements du texte: gras, italiques ou souligné."+rc$ hlp$=hlp$+"- Alignement du texte dans la cellule: à gauche, centré ou à droite."+rc$ hlp$=hlp$+"- Couleur du fond (blanc, jaune, magenta, cyan)."+rc$ hlp$=hlp$+"- Formatage des nombres: libre ou monétaire (2 chiffres après la virgule)"+rc$+rc$ hlp$=hlp$+"Attention: le formatage global rangée ou colonne prend le pas sur les formatages individuels des"+rc$ hlp$=hlp$+"cellules, il faut donc éventuellement reprendre le formatage individuel d'une cellule après un"+rc$ hlp$=hlp$+"formatage global."+rc$+rc$ hlp$=hlp$+"SAISIE :"+rc$ hlp$=hlp$+"====="+rc$ hlp$=hlp$+"Pour saisir une valeur dans une cellule, cliquer sur la cellule pour la sélectionner (elle s'encadre"+rc$ hlp$=hlp$+"en rouge), et saisir la valeur dans la zone d'édition (la donnée s'écrit simultanément dans la cellule"+rc$ hlp$=hlp$+"sélectionnée). On peut choisir un format particulier d'inscription dans la cellule en choisissant le"+rc$ hlp$=hlp$+"formatage dans la barre d'outils du haut: enrichissements, alignement, couleur des caractères, couleur"+rc$ hlp$=hlp$+"du fond de la cellule. Le formatage s'effectue en temps réel, après avoir choisi à tout moment le type"+rc$ hlp$=hlp$+"de format."+rc$ hlp$=hlp$+"Fin de saisie: soit 'Enter' (le focus se positionne alors sur la cellule du dessous), soit par appui"+rc$ hlp$=hlp$+"sur une des flèches de direction, ce qui positionne le focus sur la cellule adjacente correspondante,"+rc$ hlp$=hlp$+"soit en cliquant sur une nouvelle cellule quelconque."+rc$+rc$ hlp$=hlp$+"FORMULES :"+rc$ hlp$=hlp$+"========"+rc$ hlp$=hlp$+"On peut saisir des valeurs sous forme de formules précédées du signe égal (=)."+rc$ hlp$=hlp$+"Les formules admises sont :"+rc$ hlp$=hlp$+" - date ou date/heure: =DATE ou =DATEHEURE"+rc$ hlp$=hlp$+" - résultat d'une opération arithmétique entre deux cellules quelconques: =A1+B1, =B4-B5, etc."+rc$ hlp$=hlp$+" on admet les 4 opérations élémentaires:+addition, - soustraction, * multiplication et / division."+rc$ hlp$=hlp$+" - somme d'une suite de cellules consécutives: rangées ou colonnes, de la forme =S(B2,B12), ou =S(A5,D5)"+rc$ hlp$=hlp$+"Pour ces opérations, il y a erreur si l'une des cellules concernées est vide ou ne contient pas une"+rc$ hlp$=hlp$+"valeur numérique. Dans ce cas l'anomalie est signalée et l'opération abandonnée."+rc$ hlp$=hlp$+"Pour éviter d'avoir à saisir la même formule dans les lignes successives d'une colonne, il suffit de"+rc$ hlp$=hlp$+"saisir la formule dans la 1ère rangée de la série, puis de sélectionner successivement les cellules suivantes"+rc$ hlp$=hlp$+"et de cliquer sur l'outil 'R' de la barre d'outils. La formule précédente sera réécrite et incrémentée."+rc$+rc$ hlp$=hlp$+"SAUVEGARDES :"+rc$ hlp$=hlp$+"=========="+rc$ hlp$=hlp$+"Les sauvegardes se font:"+rc$ hlp$=hlp$+" - soit au format classique CSV (sauvegarde lisible par un tableur classique: les champs sont séparés"+rc$ hlp$=hlp$+" par un caractère ';'), mais tout le formatage du texte (couleurs, alignement, enrichissements)"+rc$ hlp$=hlp$+" est perdu."+rc$ hlp$=hlp$+" - soit au format propriétaire TAB, qui enregistre le formatage."+rc$+rc$ hlp$=hlp$+"IMPRESSION :"+rc$ hlp$=hlp$+"========="+rc$ hlp$=hlp$+"L'impression se fait par l'intermédiaire du module WinTextPrint de l'ami Klaus, sous forme d'image."+rc$ hlp$=hlp$+"Pour ce faire, l'image du tableau est préalablement sauvegardée dans un fichier au format bmp,"+rc$ hlp$=hlp$+"c'est cette image qui sera imprimée."+rc$ hlp$=hlp$+"Un aperçu est affiché, on peut alors modifier l'orientation, les marges haut et gauche, ainsi que les"+rc$ hlp$=hlp$+"dimensions de l'image imprimée."+rc$ hlp$=hlp$+"Les valeurs sont données en millimètres."+rc$
TIMER 105: TIMER_INTERVAL 105, 100: ON_TIMER 105, Majtx
END ' ==============================================================================
Afmes: TIMER_OFF 105 MESSAGE mes$ TIMER_ON 105 RETURN
Clicol: ' clic dans la rangée du haut (colonnes) TIMER_OFF 105 clc = 1 xs = MOUSE_X_POSITION(p+1) FOR c1 = nc TO 0 STEP -1 IF xs > xc(c1) THEN EXIT_FOR: ' colonne c1 NEXT c1 SHOW 50 CAPTION 52, "COLONNE: "+CHR$(64+c1) CAPTION 114, "Largeur de la colonne:" POSITION 115, lco(c1) MARK_ON 136: MARK_ON 141: MARK_ON 147: MARK_ON 152 slc = lco(c1) RETURN
Cliran: ' clic dans la colonne de gauche (rangées) TIMER_OFF 105 clc = 0 ys = MOUSE_Y_POSITION(p+2) FOR r1 = nr TO 0 STEP -1 IF ys > yr(r1) THEN EXIT_FOR: ' rangée r1 NEXT r1 SHOW 50 CAPTION 52, "RANGÉE: "+STR$(r1) CAPTION 114, "Hauteur de la rangée:" POSITION 115, hro(r1) MARK_ON 136: MARK_ON 141: MARK_ON 147: MARK_ON 152 shl = hro(r1) RETURN
LinColn: ' clic sur la case 'L/C' TIMER_OFF 105 SHOW 60 RETURN
lico: HIDE 60 nc1 = POSITION(161): lc1 = POSITION(163): nr1 = POSITION(165): hl1 = POSITION(167) IF nc1 = nc AND nr1 = nr AND lc1 = lc AND hl1 = hl THEN RETURN nc = nc1: nr = nr1: lc = lc1: hl = hl1 FOR c = 1 TO nc: lco(c) = lc: NEXT c FOR r = 1 TO nr: hro(r) = hl: NEXT r FOR r = 1 TO nr FOR c = 1 TO nc IF pol$(r,c) = "" THEN pol$(r,c) = "Arial" IF siz(r,c) < 7 THEN siz(r,c) = 10 NEXT c NEXT r GOSUB Desgri GOSUB Descel c = 1: r = 1: GOSUB Newcel: ' case sélectionnée SET_FOCUS 5 TIMER_ON 105 RETURN
Desgri: lt = 0: FOR c = 1 TO nc: lt = lt + lco(c): NEXT c ht = 0: FOR r = 1 TO nr: ht = ht + hro(r): NEXT r wp = lcl + lt + 3: hp = het + ht + 3: ' largeur et hauteur du picture w0 = wp + 20: IF w0 > 1200 THEN w0 = 1200 ' w0 = 650 IF w0 < 500 THEN w0 = 500 h0 = hp + et + 70 WIDTH 0, w0: HEIGHT 0, h0 ' rangée de titre des colonnes TOP p+1, yet: LEFT p+1, lcl+2: WIDTH p+1, lt: HEIGHT p+1, het y1 = het: x1 = lcl 2D_TARGET_IS p+1: PRINT_TARGET_IS p+1 2D_FILL_COLOR 230,230,230: 2D_PEN_COLOR 0,0,0 x = 0 FOR c = 1 TO nc 2D_RECTANGLE x, 0, x+lco(c)+1, het+1 PRINT_LOCATE x+lco(c)/2, 3: PRINT CHR$(64+c) xc(c) = x: x = x + lco(c) NEXT c ON_CLICK p+1, Clicol TOP p+2, yet+het: LEFT p+2, 2: WIDTH p+2, lcl: HEIGHT p+2, ht 2D_TARGET_IS p+2: PRINT_TARGET_IS p+2 2D_FILL_COLOR 230,230,230: 2D_PEN_COLOR 0,0,0 y = 0: ' colonne de titre des rangées FOR r = 1 TO nr 2D_RECTANGLE 0, y, lcl+1, y+hro(r)+1 PRINT_LOCATE lcl/2-5, y+3: PRINT RIGHT$(" "+STR$(r),2) yr(r) = y: y = y + hro(r) NEXT r ON_CLICK p+2, Cliran TOP p, yet+het: LEFT p, lcl+2: WIDTH p, lt: HEIGHT p, ht ON_CLICK p, Clic2cr ' case L/C TOP p+3, yet: LEFT p+3, 2: WIDTH p+3, lcl: HEIGHT p+3, het PRINT_TARGET_IS p+3: FONT_BOLD p+3: PRINT_LOCATE 4,3: PRINT "L/C" ON_CLICK p+3, LinColn ' cellules individuelles 2D_TARGET_IS p: 2D_FILL_COLOR rf, gf, bf: 2D_PEN_COLOR clig,clig,clig GOSUB Deslign c = 1: r = 1: GOSUB Newcel SET_FOCUS 5 RETURN
Deslign: 2D_TARGET_IS p: 2D_PEN_COLOR clig,clig,clig FOR c = 1 TO nc 2D_LINE xc(c), 0, xc(c), ht NEXT c: 2D_LINE lt-1, 0, lt-1, ht FOR r = 1 TO nr 2D_LINE 0, yr(r), lt, yr(r) NEXT r: 2D_LINE 0, ht-1, lt, ht-1 RETURN
Coulig: clig = clig + 64: IF clig > 256 THEN clig = 0 IF clig = 256 THEN clig = 255 GOSUB Deslign RETURN
Descel: ini% = 1 FOR r = 1 TO nr FOR c = 1 TO nc GOSUB Majpr IF LEN(a$) > 2 AND LEFT$(a$, 1) = "=" THEN GOSUB Formules GOSUB Pra NEXT c NEXT r ini% = 0 RETURN
Dimensions: lc1 = lco(c1): hl1 = hro(r1) IF clc = 1 lco(c1) = POSITION(115): ' clic sur une colonne ELSE hro(r1) = POSITION(115): ' clic sur une rangée END_IF HIDE 50 ' enrichissements de la colonne ou de la rangée entière d$ = "": b$ = "L": ct$ = "N": cf$ = "W" IF CLICKED(131) = 1 THEN d$ = d$ + "G": ' enrichissement des caractères IF CLICKED(132) = 1 THEN d$ = d$ + "I" IF CLICKED(133) = 1 THEN d$ = d$ + "S" IF CLICKED(136) = 1 THEN rc$ = "L": ' alignement dans la cellule IF CLICKED(137) = 1 THEN rc$ = "C" IF CLICKED(138) = 1 THEN rc$ = "R" IF CLICKED(141) = 1 THEN ct$ = "N": ' couleur de caractères IF CLICKED(142) = 1 THEN ct$ = "R" IF CLICKED(143) = 1 THEN ct$ = "G" IF CLICKED(144) = 1 THEN ct$ = "B": ' couleur de fond IF CLICKED(147) = 1 THEN cf$ = "W" IF CLICKED(148) = 1 THEN cf$ = "Y" IF CLICKED(149) = 1 THEN cf$ = "M" IF CLICKED(150) = 1 THEN cf$ = "C" k% = 0: ' format nombres IF CLICKED(153) = 1 THEN k% = 1 IF clc = 1 FOR i% = 1 TO maxr enr$(i%,c1) = d$: ali$(i%,c1) = rc$: cot$(i%,c1) = ct$: cof$(i%,c1) = cf$ fnb(i%,c1) = k% NEXT i% ELSE FOR i% = 1 TO maxc enr$(r1,i%) = d$: ali$(r1,i%) = rc$: cot$(r1,i%) = ct$: cof$(r1,i%) = cf$ fnb(r1,i%) = k% NEXT i% END_IF IF lco(c1) <> lc1 OR hro(r1) <> hl1 THEN GOSUB Desgri GOSUB Descel: ' réaffichage de toutes les cellules TIMER_ON 105 RETURN
Majtx: a$ = TEXT$(5): IF a$ = sa$ THEN RETURN sa$ = a$: cel$(r, c) = a$ GOSUB Pra RETURN
Clic2cr: xs = MOUSE_X_POSITION(p): ys = MOUSE_Y_POSITION(p) FOR c1 = nc TO 0 STEP -1 IF xs > xc(c1) THEN EXIT_FOR: ' colonne c1 NEXT c1 FOR r1 = nr TO 0 STEP -1 IF ys > yr(r1) THEN EXIT_FOR: ' rangée r1 NEXT r1 sc1 = c1: sr1 = r1 a$ = cel$(r,c) IF LEN(a$) > 2 AND LEFT$(a$, 1) = "=" THEN GOSUB Formules: GOSUB Pra ' désélect la cellule courante GOSUB Desel c = sc1: r = sr1: ' nouvelle cellule sélectionnée GOSUB Newcel RETURN
Desel: ' désélectionner la cellule courante r, c 2D_TARGET_IS p: 2D_FILL_COLOR rf, gf, bf x1 = x+lco(c): y1 = y+hro(r) 2D_PEN_COLOR clig,clig,clig 2D_LINE x,y,x1,y: 2D_POLY_TO x1, y1 2D_POLY_TO x,y1: 2D_POLY_TO x,y RETURN
Newcel: ' sélectionner la nouvelle cellule r, c CAPTION 4, CHR$(64+c)+STR$(r) GOSUB Majpr IF ini% = 1 THEN RETURN GOSUB Majenr: GOSUB Majali: GOSUB Majcou: GOSUB Majfnb a$ = cel$(r, c): GOSUB Pra IF ini% = 2 THEN RETURN TEXT 5, a$ SET_FOCUS 5 RETURN
Majpr: ' prise en compte des paramètres de la cellule r, c couf$ = cof$(r, c) IF couf$ = "W" THEN rf = 255: gf = 255: bf = 255 IF couf$ = "Y" THEN rf = 255: gf = 255: bf = 0 IF couf$ = "M" THEN rf = 255: gf = 192: bf = 255 IF couf$ = "C" THEN rf = 192: gf = 255: bf = 255 2D_TARGET_IS p: 2D_FILL_COLOR rf, gf, bf y = yr(r): x = xc(c): x1 = x+lco(c)+1: y1 = y+hro(r)+1 IF ini% = 0 2D_PEN_COLOR 255,0,0 2D_RECTANGLE x, y, x1, y1: ' cellule qui a le focus ELSE 2D_PEN_COLOR clig,clig,clig 2D_RECTANGLE x, y, x1, y1 END_IF a$ = cel$(r, c) PRINT_TARGET_IS p fnt$ = pol$(r,c): IF fnt$ = "" THEN fnt$ = "Arial": pol$(r,c) = fnt$ FONT_NAME p, fnt$: TEXT 2, fnt$ sz = siz(r, c): IF sz < 6 OR sz > 30 THEN sz = 10: siz(r, c) = sz FONT_SIZE p, sz: TEXT 3, STR$(sz) alig$ = ali$(r, c) b$ = enr$(r, c) FONT_BOLD_OFF p: FONT_ITALIC_OFF p: FONT_UNDERLINE_OFF p: gras = 0: ital = 0: soul = 0 IF INSTR(b$, "G") > 0 THEN gras = 1: FONT_BOLD p IF INSTR(b$, "I") > 0 THEN ital = 1: FONT_ITALIC p IF INSTR(b$, "S") > 0 THEN soul = 1: FONT_UNDERLINE p cout$ = cot$(r, c) FONT_COLOR p, 0,0,0 IF cout$ = "R" THEN FONT_COLOR p, 255,0,0 IF cout$ = "G" THEN FONT_COLOR p, 0,255,0 IF cout$ = "B" THEN FONT_COLOR p, 0,0,255 fnbr = fnb(r, c): ' format nombres RETURN
Key: t% = KEY_DOWN_CODE IF t%=13 OR t%=37 OR t%=38 OR t%=39 OR t%=40: ' touche 'Enter' ou flèches a$ = TEXT$(5): cel$(r,c) = a$ IF LEN(a$) > 2 AND LEFT$(a$, 1) = "=" GOSUB Formules: GOSUB Pra END_IF IF (t%=13 OR t%=40) AND r < nr: ' Enter, ou flèche bas GOSUB Desel: r = r + 1 ELSE IF t% = 38 and r > 1: ' flèche haut GOSUB Desel: r = r - 1 ELSE IF t% = 37 AND c > 1: ' flèche gauche GOSUB Desel: c = c - 1 ELSE IF t% = 39 AND c < nc: ' flèche droite GOSUB Desel: c = c + 1 END_IF END_IF END_IF END_IF GOSUB Newcel: RETURN END_IF a$ = TEXT$(5): cel$(r, c) = a$ GOSUB Pra RETURN
Pra: ' affichage de a$ dans la cellule r,c FONT_NAME p, fnt$: FONT_SIZE p, sz GOSUB Formon xp = x+3: yp = y+2 IF alig$ <> "L" a$ = TRIM$(a$) GOSUB Tailtext: ' -> l = largeur de a$, en pixels IF l < lco(c) IF alig$ = "C" xp = x+(lco(c)-l)/2: ' centré ELSE xp = x+lco(c)-l-2: ' cadré à droite END_IF END_IF END_IF IF xp < x OR yp < y mes$ = "Anomalie de positionnement:"+rc$ mes$ = mes$ + "x="+STR$(xp)+" y="+STR$(yp)+rc$ mes$ = mes$ + "a$="+a$+" (lg="+STR$(LEN(a$))+")"+rc$ mes$ = mes$ + "Forcé à 0,0 dans la cellule." GOSUB Afmes xp = x+3: yp = y+2 END_IF 2D_TARGET_IS p: 2D_FILL_COLOR rf, gf, bf: 2D_PEN_COLOR 255,255,255 2D_RECTANGLE x+1,y+1,x+lco(c),y+hro(r) PRINT_LOCATE xp, yp: PRINT a$ RETURN
Formon: IF fnbr = 0 THEN RETURN ' format monétaire FOR i% = 1 TO LEN(a$) j% = ASC(MID$(a$, i%, 1)) IF j% > 57 OR j% < 44 THEN RETURN IF j% = 45 OR j% = 47 THEN RETURN NEXT i% k% = INSTR(a$, ","): IF k% > 0 THEN a$ = LEFT$(a$, k%-1) +"."+MID$(a$, k%+1,100) i% = 100*VAL(a$): a$ = STR$(i%/100): ' pour ne conserver que 2 décimales éventuelles k% = INSTR(a$, ".") IF k% < 1 a$ = a$ + ",00" ELSE a$ = LEFT$(a$, k%-1) + "," + MID$(a$, k%+1, 100) IF INSTR(a$, ",") = LEN(a$)-1 THEN a$ = a$ + "0" END_IF RETURN
Chpol: ' choix de police TIMER_OFF 105 LIST 85: TOP 85, 20: HEIGHT 85, 200: WIDTH 85, 150: FONT_NAMES_LOAD 85 Attp: WAIT 200: IF CLICKED(85) = 0 THEN GOTO Attp fnt$ = ITEM_READ$(85, ITEM_INDEX(85)) DELETE 85 TEXT 2, fnt$ FONT_NAME p, fnt$: pol$(r, c) = fnt$ TIMER_ON 105 RETURN
Chsiz: ' choix de taille de police TIMER_OFF 105 LIST 85: TOP 85, 20: LEFT 85, 150: HEIGHT 85, 160: WIDTH 85, 50 FOR i% = 8 TO 30 STEP 2 ITEM_ADD 85, STR$(i%) NEXT i% Atts: WAIT 200: IF CLICKED(85) = 0 THEN GOTO Atts sz = VAL(ITEM_READ$(85, ITEM_INDEX(85))) DELETE 85 TEXT 3, STR$(sz) FONT_SIZE p, sz: siz(r, c) = sz TIMER_ON 105 RETURN
Enrich: SELECT NUMBER_CLICK CASE 6: gras = ABS(gras - 1): GOSUB Majenr: goto rc CASE 7: ital = ABS(ital - 1): GOSUB Majenr: goto rc CASE 8: soul = ABS(soul - 1): GOSUB Majenr: goto rc CASE 70: cout$ = "N": GOSUB Majcou: goto rc CASE 71: cout$ = "R": GOSUB Majcou: goto rc CASE 72: cout$ = "G": GOSUB Majcou: goto rc CASE 73: cout$ = "B": GOSUB Majcou: goto rc CASE 74: couf$ = "W": GOSUB Majcou: goto rc CASE 75: couf$ = "Y": GOSUB Majcou: goto rc CASE 76: couf$ = "M": GOSUB Majcou: goto rc CASE 77: couf$ = "C": GOSUB Majcou: goto rc CASE 78: fnbr = ABS(fnbr - 1): GOSUB Majfnb: goto rc CASE 89: alig$ = "L": GOSUB Majali: goto rc CASE 90: alig$ = "C": GOSUB Majali: goto rc CASE 91: alig$ = "R": GOSUB Majali: goto rc END_SELECT rc: GOSUB Majpr: GOSUB Pra RETURN
Majenr: FOR i% = 6 TO 8 2D_TARGET_IS i%: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2 SELECT i% CASE 6: IF gras = 1 THEN 2D_PEN_COLOR 0,0,0 CASE 7: IF ital = 1 THEN 2D_PEN_COLOR 0,0,0 CASE 8: IF soul = 1 THEN 2D_PEN_COLOR 0,0,0 END_SELECT 2D_LINE 1,1,19,1: 2D_POLY_TO 19,19: 2D_POLY_TO 1,19: 2D_POLY_TO 1,0 NEXT i% d$ = "": IF gras = 1 THEN d$ = "G" IF ital = 1 THEN d$ = d$ + "I" IF soul = 1 THEN d$ = d$ + "S" enr$(r, c) = d$ RETURN
Majali: IF alig$ = "" THEN alig$ = "L" FOR i% = 89 TO 91 2D_TARGET_IS i%: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2 SELECT i% CASE 89: IF alig$ = "L" THEN 2D_PEN_COLOR 0,0,0 CASE 90: IF alig$ = "C" THEN 2D_PEN_COLOR 0,0,0 CASE 91: IF alig$ = "R" THEN 2D_PEN_COLOR 0,0,0 END_SELECT 2D_LINE 1,1,19,1: 2D_POLY_TO 19,19: 2D_POLY_TO 1,19: 2D_POLY_TO 1,0 NEXT i% ali$(r, c) = alig$ RETURN
Majcou: IF cout$ = "" THEN cout$ = "N" IF couf$ = "" THEN couf$ = "W" FOR i% = 70 TO 77 2D_TARGET_IS i%: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2 SELECT i% CASE 70: IF cout$ = "N" THEN 2D_PEN_COLOR 0,0,0: FONT_COLOR p,0,0,0 CASE 71: IF cout$ = "R" THEN 2D_PEN_COLOR 0,0,0: FONT_COLOR p,255,0,0 CASE 72: IF cout$ = "G" THEN 2D_PEN_COLOR 0,0,0: FONT_COLOR p,0,255,0 CASE 73: IF cout$ = "B" THEN 2D_PEN_COLOR 0,0,0: FONT_COLOR p,0,0,255 CASE 74: IF couf$ = "W" THEN 2D_PEN_COLOR 0,0,0: rf=255:gf=255:bf=255 CASE 75: IF couf$ = "Y" THEN 2D_PEN_COLOR 0,0,0: rf=255:gf=255:bf=0 CASE 76: IF couf$ = "M" THEN 2D_PEN_COLOR 0,0,0: rf=255:gf=192:bf=255 CASE 77: IF couf$ = "C" THEN 2D_PEN_COLOR 0,0,0: rf=192:gf=255:bf=255 END_SELECT 2D_LINE 1,1,19,1: 2D_POLY_TO 19,19: 2D_POLY_TO 1,19: 2D_POLY_TO 1,0 NEXT i% cot$(r, c) = cout$: cof$(r, c) = couf$ RETURN
Majfnb: 2D_TARGET_IS 78: 2D_PEN_COLOR 192,192,192: 2D_PEN_WIDTH 2 IF fnbr = 1 THEN 2D_PEN_COLOR 0,0,0 2D_LINE 1,1,19,1: 2D_POLY_TO 19,19: 2D_POLY_TO 1,19: 2D_POLY_TO 1,0 fnb(r, c) = fnbr RETURN
savc: ' enregistrement au format CSV, sans les enrichissements DIR_DIALOG sd, "C:\Temp" FILTER sd, "Fichier csv|*.csv" fc$ = FILE_NAME$(sd) FILE_OPEN_WRITE 1, fc$ FOR j% = 1 TO nr a$ = "" FOR i% = 1 TO nc a$ = a$ + cel$(j%, i%) + ";" NEXT i% FILE_WRITELN 1, LEFT$(a$, LEN(a$)-1) NEXT j% FILE_CLOSE 1 CAPTION 0, fc$ + " - Tableur Panoramic" FILE_SAVE p, fimg$ RETURN
savt: ' enregistrement au format TAB, formatage conservé DIR_DIALOG sd, "C:\Temp" FILTER sd, "Fichier tab|*.tab" ft$ = FILE_NAME$(sd) FILE_OPEN_WRITE 1, ft$ FOR j% = 1 TO nr a$ = "" FOR i% = 1 TO nc a$ = a$ + cel$(j%, i%) a$ = a$ + cars$ + "F=" + pol$(j%, i%) a$ = a$ + cars$ + "S=" + STR$(siz(j%,i%)) a$ = a$ + cars$ + "E=" + enr$(j%, i%) a$ = a$ + cars$ + "A=" + ali$(j%, i%) a$ = a$ + cars$ + "C=" + cot$(j%, i%) a$ = a$ + cars$ + "B=" + cof$(j%, i%) a$ = a$ + cars$ + "M=" + STR$(fnb(j%,i%)) + ";" NEXT i% FILE_WRITELN 1, LEFT$(a$, LEN(a$)-1) NEXT j% FILE_CLOSE 1 CAPTION 0, ft$ + " - Tableur Panoramic" FILE_SAVE p, fimg$ RETURN
new: CAPTION 0, " - Tableur Panoramic" ini% = 1 fnt$ = "Arial": sz = 10: gras = 0: ital = 0: soul = 0 FOR r = 1 TO nr FOR c = 1 TO nc cel$(r,c) = "" pol$(r,c) = fnt$: siz(r,c) = sz: enr$(r,c) = "": ali$(r,c) = "L": cot$(r,c) = "N" cof$(r,c) = "W" GOSUB Newcel NEXT c NEXT r ini% = 0 r = 1: c = 1: GOSUB Newcel RETURN
opn: DIR_DIALOG od, "C:\Temp" FILTER od, "Fichiers csv, tab|*.csv;*.tab" ft$ = FILE_NAME$(od): IF ft$ = "_" THEN RETURN IF FILE_EXISTS(ft$) = 0 MESSAGE "Fichier " + ft$ + " non trouvé !": RETURN END_IF CAPTION 0, ft$ + " - Tableur Panoramic" FILE_OPEN_READ 1, ft$ r = 0 WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$: r = r + 1: c = 1 ra: k% = INSTR(a$, ";") IF k% > 0 b$ = LEFT$(a$, k%-1): a$ = MID$(a$, k%+1, 500) ELSE b$ = a$: a$ = "" END_IF ' valeurs implicites si non présentes: Arial 10, noir pol$(r,c)="Arial": siz(r,c)=10: enr$(r,c)="": ali$(r,c)="L" :cot$(r,c)="N" k% = INSTR(b$, cars$): ' séparateur des enrichissements IF k% > 0 cel$(r,c) = LEFT$(b$, k%-1) rb: d$ = UPPER$(MID$(b$, k%+1, 2)): b$ = MID$(b$, k%+3, 500) k% = INSTR(b$, cars$) IF k% > 0 arg$ = LEFT$(b$, k%-1): b$ = MID$(b$, k%, 500): k% = 1 ELSE arg$ = b$ END_IF IF d$ = "F=" pol$(r,c) = arg$ ELSE IF d$ = "S=" siz(r,c) = VAL(arg$) ELSE IF d$ = "E=" enr$(r,c) = arg$ ELSE IF d$ = "A=" ali$(r,c) = arg$ ELSE IF d$ = "C=" cot$(r,c) = arg$ ELSE IF d$ = "B=" cof$(r,c) = arg$ ELSE IF d$ = "M=" fnb(r,c) = VAL(arg$) END_IF END_IF END_IF END_IF END_IF END_IF END_IF IF k% > 0 THEN GOTO rb ELSE cel$(r, c) = b$ END_IF IF a$ <> "" THEN c = c + 1: GOTO ra END_WHILE FILE_CLOSE 1 ' Report dans les cellules (affichage) ini% = 2 FOR r = 1 TO nr FOR c = 1 TO nc a$ = cel$(r,c): GOSUB Majpr IF LEN(a$) > 2 AND LEFT$(a$, 1) = "=" THEN GOSUB Formules GOSUB Pra NEXT c NEXT r ini% = 0: r = 1: c = 1: GOSUB Newcel RETURN
der:
RETURN
savs:
RETURN
impr: ' désélectionner momentanément la case r,c avant sauvegarde TIMER_OFF 105 GOSUB Desel FILE_SAVE p, fimg$: ' sauvegarde du tableau entier au format bmp GOSUB Newcel SHOW 220 lim = INT(lt*.351): him = INT(ht*.351): ' image imprimée, en mm a$ = "Image "+STR$(lt)+" x "+STR$(ht)+" pixels (" a$ = a$ + STR$(lim)+" x "+STR$(him)+" mm)" CAPTION 239, a$ MARK_ON 222 TEXT 224, STR$(mg): TEXT 226, STR$(mh) TEXT 228, STR$(lim): TEXT 230, STR$(him) RETURN
optim: IF CLICKED(223) = 1 ori = 1: ' paysage ha = 190: wa = INT(297*ha/210): la = 5: ra = ha/210 ELSE IF CLICKED(222) = 1 ori = 0: ' portrait wa = 190: ha = INT(297*wa/210): la = 50: ra = wa/210 END_IF END_IF LEFT 232, la: WIDTH 232, wa: HEIGHT 232, ha 2D_TARGET_IS 232: 2D_PEN_COLOR 192,192,192: 2D_FILL_COLOR 255,255,255: 2D_FILL_SOLID: 2D_RECTANGLE 0,0,wa,ha 2D_FILL_COLOR 192,192,192 2D_FILL_HORIZONTAL mg = VAL(TEXT$(224)) mh = VAL(TEXT$(226)) lim = VAL(TEXT$(228)) him = VAL(TEXT$(230)) 2D_RECTANGLE INT(mg*ra),INT(mh*ra),INT((mg+lim)*ra),INT((mh+him)*ra) RETURN
Valpr: IF CLICKED(235) = 1 THEN HIDE 220: RETURN: ' Annuler lpr = 200: ' largeur de l'image à l'impression hpr = 210*ht/lt: ' hauteur de l'image FILE_OPEN_WRITE 1, fpr$ IF ori = 0 FILE_WRITELN 1, "<#orientation=Portrait#>" ELSE FILE_WRITELN 1, "<#orientation=Paysage#>" END_IF
FILE_WRITELN 1, "<#image=" + chr$(34)+fimg$+chr$(34)+ ","+STR$(mg)+","+STR$(mh)+","+STR$(lim)+","+STR$(him)+"#>" FILE_CLOSE 1 IF MESSAGE_CONFIRMATION_YES_NO("Prêt pour impression ?") = 1 EXECUTE_WAIT prt$ + "/file=" + fpr$ END_IF HIDE 220 FILE_DELETE fpr$ TIMER_ON 105 RETURN
Copform: IF r = 1 THEN RETURN b$ = cel$(r-1, c): IF LEFT$(b$, 1) <> "=" THEN RETURN b$ = MID$(b$, 2, 100) d$ = "+": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO rf d$ = "-": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO rf d$ = "*": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO rf d$ = "/": k% = INSTR(b$, d$): IF k% <1 THEN RETURN rf: IF LEFT$(b$, 1) = "=" THEN b$ = MID$(b$, 2, 100): k% = k%-1 a1$ = LEFT$(b$, k%-1): a2$ = MID$(b$, k%+1, 100) c1 = ASC(LEFT$(a1$, 1)) - 64: r1 = VAL(MID$(a1$, 2, 2)) c2 = ASC(LEFT$(a2$, 1)) - 64: r2 = VAL(MID$(a2$, 2, 2)) IF r2 <> r1 THEN RETURN: ' pas la même rangée a$ = "="+LEFT$(a1$,1)+STR$(r1+1)+d$+LEFT$(a2$,1)+STR$(r1+1) TEXT 5, a$ RETURN
quit: TERMINATE RETURN
copy: CLIPBOARD_STRING_COPY TEXT$(5) RETURN
paste: TEXT 5, CLIPBOARD_STRING_PASTE$ RETURN
cut: CLIPBOARD_STRING_COPY TEXT$(5) TEXT 5, "": GOSUB Majtx RETURN
Tailtext: ' Calcul de la largeur l de a$, en pixels PICTURE 300: TOP 300, -150: WIDTH 300, 900: COLOR 300, 1, 1, 1 PRINT_TARGET_IS 300: FONT_NAME 300, fnt$: FONT_SIZE 300, sz IF gras = 1 THEN FONT_BOLD 300 IF ital = 1 THEN FONT_ITALIC 300 IF soul = 1 THEN FONT_UNDERLINE 300 FONT_COLOR 300,0,0,0: PRINT a$ FOR l = 0 TO 799 IF COLOR_PIXEL_RED(300,l,0)=1 AND COLOR_PIXEL_GREEN(300,l,0)=1 AND COLOR_PIXEL_BLUE(300,l,0)=1 THEN EXIT_FOR NEXT l PRINT_TARGET_IS p: DELETE 300 RETURN
Formules: ' formules de la forme: =date, =dateheure, =A2+A3 b$ = UPPER$(MID$(a$, 2, LEN(a$)-1)) IF b$ = "DATE" THEN a$ = DATE$: RETURN IF b$ = "DATEHEURE" THEN a$ = DATE$ + " " + LEFT$(TIME$, 5): RETURN IF LEFT$(b$, 2) = "S(" b$ = MID$(b$, 3, LEN(b$)-3) d$ = ",": k% = INSTR(b$, d$): IF k% < 1 THEN RETURN ELSE d$ = "+": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO rd d$ = "-": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO rd d$ = "*": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO rd d$ = "/": k% = INSTR(b$, d$): IF k% <1 THEN RETURN END_IF rd: IF LEFT$(b$, 1) = "=" THEN b$ = MID$(b$, 2, 100): k% = k%-1 a1$ = LEFT$(b$, k%-1): a2$ = MID$(b$, k%+1, 100) c1 = ASC(LEFT$(a1$, 1)) - 64: r1 = VAL(MID$(a1$, 2, 2)) c2 = ASC(LEFT$(a2$, 1)) - 64: r2 = VAL(MID$(a2$, 2, 2)) IF d$ = "," v = 0 IF c1 = c2: ' somme dans une colonne FOR rr = r1 TO r2 b$ = cel$(rr, c1) GOSUB Eval: IF vnn% > 0 THEN rx=rr: cx=c1: GOSUB Alerte: RETURN v = v + va NEXT rr ELSE IF r1 = r2: ' somme dans une rangée FOR cc = c1 TO c2 b$ = cel$(r1, cc) GOSUB Eval: IF vnn% > 0 THEN rx=r1: cx=cc: GOSUB Alerte: RETURN v = v + va NEXT cc ELSE RETURN END_IF END_IF ELSE b$ = cel$(r1,c1): GOSUB Eval: IF vnn% > 0 THEN rx=r1: cx=c1: GOSUB Alerte: RETURN v1 = va b$ = cel$(r2,c2): GOSUB Eval: IF vnn% > 0 THEN rx=r2: cx=c2: GOSUB Alerte: RETURN v2 = va IF d$ = "+" v = v1 + v2 ELSE IF d$ = "-" v = v1 - v2 ELSE IF d$ = "*" v = v1 * v2 ELSE IF d$ = "/" v = v1 / v2 ELSE RETURN END_IF END_IF END_IF END_IF END_IF a$ = STR$(v) RETURN
Eval: IF LEFT$(b$, 1) = "=" ' c'est une formule b$ = UPPER$(MID$(b$, 2, LEN(b$)-1)) d$ = "+": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO re d$ = "-": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO re d$ = "*": k% = INSTR(b$, d$): IF k% > 0 THEN GOTO re d$ = "/": k% = INSTR(b$, d$): IF k% <1 THEN RETURN re: a1$ = LEFT$(b$, k%-1): a2$ = MID$(b$, k%+1, 100) c11 = ASC(LEFT$(a1$, 1)) - 64: r11 = VAL(MID$(a1$, 2, 2)) c12 = ASC(LEFT$(a2$, 1)) - 64: r12 = VAL(MID$(a2$, 2, 2)) b$ = cel$(r11,c11) k% = INSTR(b$, ","): IF k%>0 THEN b$ = LEFT$(b$, k%-1)+"."+MID$(b$, k%+1, 100) GOSUB Verif: IF vnn% > 0 THEN RETURN v1 = VAL(b$) b$ = cel$(r12,c12) k% = INSTR(b$, ","): IF k%>0 THEN b$ = LEFT$(b$, k%-1)+"."+MID$(b$, k%+1, 100) GOSUB Verif: IF vnn% > 0 THEN RETURN v2 = VAL(b$) IF d$ = "+" va = v1 + v2 ELSE IF d$ = "-" va = v1 - v2 ELSE IF d$ = "*" va = v1 * v2 ELSE IF d$ = "/" va = v1 / v2 ELSE RETURN END_IF END_IF END_IF END_IF ELSE ' c'est une valeur k% = INSTR(b$, ","): IF k%>0 THEN b$ = LEFT$(b$, k%-1)+"."+MID$(b$, k%+1, 100) GOSUB Verif: IF vnn% > 0 THEN RETURN va = VAL(b$) END_IF RETURN
Verif: vnn% = 0 IF b$ = "" THEN vnn% = 2: RETURN: ' chaîne vide FOR i% = 1 TO LEN(b$) IF ASC(MID$(b$, i%, 1)) > 57 THEN vnn% = 1: RETURN: ' caractère non numérique NEXT i% RETURN
Alerte: mes$ = "Cellule "+CHR$(cx+64)+STR$(rx)+":"+CHR$(10) mes$ = mes$ + "Opération sur chaîne vide ou non numérique" GOSUB Afmes RETURN
Trace: mes$ = mes$ + " - " + a1$ + " - " + a2$: GOSUB Afmes RETURN
Aide: mes$ = hlp$: GOSUB Afmes RETURN
PS j'ai remarqué un truc embêtant avec l'aide, il y a parfois un plantage après affichage de cette aide (qui est sous forme de MESSAGE a$): ' Panoramic a cessé de fonctionner...' et je ne m'explique pas pourquoi. Le message s'affiche bien en entier et c'est seulement au retour que ça plante, peut-être le texte du message est-il trop long et ça détruit quelque chose ? Autre chose: la façon dont j'ai numéroté les objets n'est pas un exemple à suivre, c'est la croix et la bannière pour en intercaler un par la suite, quand ils commencent à se multiplier. Il vaut bien mieux définit une variable numéro qui s'incrémente au fur et à mesure.
Dernière édition par JL35 le Jeu 17 Mar 2011 - 14:59, édité 3 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un petit tableur Ven 11 Mar 2011 - 17:35 | |
| Bonjour à tous, Rapidement: j'ai été absent un moment à cause de problème de santé (AVF), très douloureux, mais pas évolutif. Ce qui m'a empêché un temps de vous suivre. Pour ton tableur JL35 remplace la ligne 963 par - Code:
-
m=MESSAGE_CONFIRMATION_OK(a$)
sans oublier de déclarer la variable. Et là çà marche. Il y a peut-être un bug sur "message" ? A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Ven 11 Mar 2011 - 18:33 | |
| Te voilà de retour Jean Claude, c'est pas trop tôt ! je croyais que tu nous avais abandonnés, mais bon, là c'est autre chose de plus embêtant. J'espère que tout va s'arranger pour le mieux pour toi mon ami, et bon courage !
Merci pour ta suggestion, ça ne change rien à la présentation, et si ça marche je ne vais pas chercher plus loin ! Je mets ça à l'essai. Comme l'erreur n'était pas systématique, je mets en observation.
Un truc que je n'ai pas maîtrisé c'est l'encadrement des cellules. En effet ce n'est pas facile, l'encadrement d'une cellule donnée conditionne l'encadrement des quatre cellules qui lui sont adjacentes, et ça devient vite le bazar... J'aurais peut-être dû encadrer systématiquement toutes les cellules, ça c'est facile à faire, j'ai été trop ambitieux. J'y viendrai peut-être. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Sam 12 Mar 2011 - 16:09 | |
| @Jean Claude : salut et je te souhaite une super santé ! @JL35 : Effectivement, c'est un gros programme, mais j'admet qu'il vaut le coup !!! C'est vraiment un superbe programme. Pour l'erreur dont tu parles, elle n'est pas due au message. J'en emploie souvent de très grandes tailles pour les mêmes raison (aide) ça n'a jamais posé de problème par contre, je viens d'avoir l'erreur que tu cites dans une toute autre circonstance (que le message) le programme d'accueil de etamioreb publié dans la rubrique discussion (où il n'y a pas de message) donc c'est dû à autre chose, je ne sais pas quoi... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 16:20 | |
| Salut jjn4, et merci pour ton appréciation. Cette erreur est effectivement bizarre, ça survient juste sur le clic sur 'Ok'. Mais bon, si la combine de Jean Claude marche, très bien.
Je n'ai pas précisé, mais c'est évident, qu'il faut adapter les noms de fichiers et de chemins à son propre environnement, en tête du programme..
Finalement je crois que je vais refaire une version sans les encadrements de cellules, c'est trop scabreux, ça ne marche pas bien et ça ne me plaît pas. Et si on veut surligner une cellule (ou une colonne, ou une rangée), il suffit de la colorer, et ça, ça marche. Et il reste le quadrillage en gris léger pour séparer les cellules. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 18:44 | |
| Salut,
Tu as eu raison hier JL35, je me suis fait allumer. Le pire de l'histoire c'est que j'avais lu le sujet ou Klaus faisait mention de la faute d'orthographe (row,raw). Je l'avais zappé. Une bourde de plus à mon actif. Mes excuses à Jack.
Pour ce qui concerne l'encadrement des cellules, peut-être pourrais-tu garder un bouton pour un encadrement complet d'une ou plusieurs cellules. Ce tableur a le mérite d'être simple d'utilisation, vivement qu'il nous fasse les 4 opérations.
Je viens à nouveau de tester l'aide, sans modifier ton programme (en gardant message a$) et cette fois-ci pas de problème. Même en consultant l'aide plusieurs fois sans fermer le programme ???. Donc JJN4 a raison, il n'y a pas de rapport avec MESSAGE.
A+
PS: pour la cohérence du sujet j'ai posté ce message pendant que JL35 postait le sien.
Dernière édition par Jean Claude le Sam 12 Mar 2011 - 18:52, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 18:44 | |
| Désolé Jean Claude, mais ta solution n'en est pas une puisque le phénomène (plantage sur 'Message') se produit tout pareil avec Message_Confirmation, ce qui semble logique. En fait, ça se produit quand j'ai mon message affiché à l'écran, et que je modifie le source dans l'éditeur à côté avant de cliquer 'Ok'. Ce que je fais n'est sans doute pas très catholique et ça perturbe l'interpréteur, ça doit être normal. Cela dit, j'ai refait le tableur sans la gestion de l'encadrement des cellules, ça complique trop et ça n'apporte pas grand chose dans la mesure où on peut colorer les cellules individuellement. Par contre j'ai ajouté l'ébauche d'un traitement de formules, commençant par le signe égal (=). Ainsi, si on écrit =DATE dans une cellule elle affichera la date du jour, ou =DATEHEURE, la date et l'heure. On peut faire les 4 opérations arithmétiques élémentaires entre deux cellules pour afficher le résultat dans une troisième, ainsi =A4+A5 affichera le résultat de l'addition du contenu des deux cellules citées.. Il n'y a aucun contrôle pour savoir si les valeurs citées sont bien des valeurs numériques, si ce n'est pas le cas on part en erreur... On pourrait étendre ce système de formules (sous-programme 'Formules') pour par exemple faire l'addition sur plus de 2 cellules (une colonne ou une rangée), etc., et bien entendu ajouter les contrôles de validité. Comme c'est pas mal modifié, je reposte le programme en entier: - LA VERSION A JOUR EST EN TETE DU POST- Mise à jour 12/3 21h40: rafraîchissement des noms et tailles des polices utilisées par cellule. Mise à jour 13/3 21h35: correction de quelques bugs, et formule =S(... : somme de plusieurs colonnes ou plusieurs rangées consécutives. Mise à jour 14/3 23h10: - ajout de l'outil formatage des nombres: libre ou monétaire (2 chiffres après la virgule) - ajout de l'outil recopie de formule (voir l'aide) - ajout du choix de la teinte de la grille (nuances de gris)
Dernière édition par JL35 le Jeu 17 Mar 2011 - 15:00, édité 5 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 18:50 | |
| On s'est croisés Jean Claude Regarde ce que je mets au sujet du plantage Message, finalement c'est ma façon de procéder qui doit être mauvaise: modifier le source en cours de déroulement du programme ! Comme tu vois j'ai supprimé les cadres, c'est plus simple et on fait aussi bien avec les couleurs. Et j'ai rajouté les opérations (formules), mais ça demande à être étendu. Et tes remarques sont toujours les bienvenues mon ami ! Pour le moment, on m'appelle au parloir pour l'apéro. | |
| | | Invité Invité
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 20:55 | |
| Salut JL35, Pour info, je n'arrive pas a avoir d'erreur avec l'aide, et je ne sais pas comment vous faites. Je travaille avec PsPad qui normalement se sert de l'instruction chain. J'ai donc fait l'essai avec l'éditeur Panoramic, et j'ai pas d'erreur.
Par contre il y a une erreur avec le positionnement de la cellule lorsqu'on veut centrer ou mettre à droite le contenu d'une cellule. L'affichage se fait en 1,1. Ce qui ne veut pas dire que le contenu est perdu, cela ne concerne que l'affichage. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 21:11 | |
| Comme je l'ai dit, l'erreur se produit quand je modifie le source pendant que la fenêtre message est affichée à l'écran, et que je clique 'Ok', c'est donc une situation anormale pour l'interpréteur. Je ne considère plus que c'est un problème.
Quant à tes problèmes d'alignement, je ne vois pas, tout se passe bien chez moi, les caractères s'affichent bien avec le centrage demandé au fur et à mesure de la frappe, et restent ainsi quand on change de cellule... ??? on parle bien évidemment d'alignement dans la cellule focus, et non pas dans la zone de saisie où c'est toujours aligné à gauche. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 21:23 | |
| Salut Cosmos,
Pas de problème de position du texte chez moi, si je demande droit c'est à droite, et ainsi de suite. Pour l'erreur concernant l'aide, éffectivement il n'y en pas si tu ferme l'aide avant de retourner dans le programme.
A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 21:41 | |
| Ben oui, je ne m'explique pas le problème de cosmos... PS j'ai fait un petite mise à jour: le nom et la taille de la police utilisée dans une cellule donnée n'était pas mis à jour au changement de case. Une remarque concernant la méthode utilisée: comme il s'agit d'un seul Picture découpé arbitrairement en cases, et non pas de cellules indépendantes comme dans un Grid, la saisie, si elle est trop longue, peut déborder d'une case sur l'autre. Si on ne veut pas déborder, il faudrait mesurer en permanence la longueur de la saisie et tronquer si elle est trop longue. Mais je me demande si ce n'est pas plutôt un avantage: un texte peut ainsi occuper plusieurs cellules, par exemple pour mettre un titre sur plusieurs colonnes. Inconvénient: ce qui dépasse est perdu à l'enregistrement au format TAB (ou plutôt à la relecture de la sauvegarde: écrasé par le contenu de la cellule suivante). Mais non finalement: il suffit de recliquer sur la cellule, après relecture, pour faire réapparaître son contenu initial Bon, je laisse comme ça jusqu'à avis contraire. | |
| | | Invité Invité
| Sujet: Re: Un petit tableur Sam 12 Mar 2011 - 23:17 | |
| Tu fais comme tu veux. Par exemple je clique 10 dans une cellule autre que A1. Ensuite je clique pour paragraphe droite. Le contenu va en A1. si je remets en paragraphe gauche, le contenu reprend sa place. Avec "10", il n'y a pas de débordement. Bonsoir, je fais juste une remarque. J'ai des forces à récupérer pour demain. Je remarque en vitesse ce que tu as marqué. - Citation :
- Comme je l'ai dit, l'erreur se produit quand je modifie le source pendant que la fenêtre message est affichée à l'écran, et que je clique 'Ok', c'est donc une situation anormale pour l'interpréteur. Je ne considère plus que c'est un problème.
J'avais constaté que tu utilisais un timer. Ton aide utilise a$, et timer aussi. Commence plutôt par mettre timer_off lors de la lecture de l'aide, et peut-être tes problèmes disparaîtrons. Re bonsoir.. |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 11:19 | |
| @JL35,
Il y a un problème avec les opérations en horizontale (=b8+c8).
A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 15:35 | |
| @cosmos, tu as évidemment raison en ce qui concerne le timer, qui doit être arrêté pendant l'affichage de l'aide !
Par contre, je ne vois pas du tout comment tu peux obtenir cette erreur de cliquer dans une case et que les données que tu tapes s'affichent dans une autre, en tout cas je n'arrive pas à le reproduire... ta cellule s'encadre bien en rouge quand tu cliques dessus ?
@Jean Claude, là non plus je n'arrive pas à reproduire l'erreur que tu cites... peux-tu être plus précis ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 16:53 | |
| Je viens de réessayer et cette fois-ci çà marche !? Je suppose que j'ai du taper une cellule vide. Ex: (=b8+c8), si c8 est vide il y a l'erreur, ce qui est normal. Il te reste à prévoir la situation avec l'aide d'un ON_ERROR_GOTO par exemple. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 17:10 | |
| Effectivement il y a plein de cas d'erreur qui ne sont pas traités, celui que tu cites, ou bien si on fait une opération sur une case qui ne contient pas une valeur numérique.
Là j'essaie de traiter le cas d'une somme de cases qui contiennent elles-mêmes des formules, mais c'est coton, je ne maîtrise pas très bien la récursivité ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 17:57 | |
| Panoramic n'a pas de vraie récursivité, car les variables sont globales. Sans rentrer dans le détail de ton tableur, voici comment je règle ce genre de problèmes, sans toute fois pouvoir obtenir une vraie récursivité:
Je créerais un tableau de strings et un pointeur, de la manière suivante: dim formules$(100) : ' pile des formules à traiter dim i_formules%(100) : ' endroits actuels d'interprétation de la formule i dim p_formules% : ' pointeur sur la dernière formule mise dans la pile
S'il faut mettre de côté une formule pour en traiter une autre, on faut: p_formules%µ = p_formules% + 1 formules$(p_formules%) = ...string contenant la formule... i_formules%(p_formules%) = ...indice de l'endroit de la formule ayant déclenché la mise en pile
Lorsqu'on a fini de traiter une formule, on vérifie p_formules%. Tant que cette variable est supérieure à zéro, on fait: ...formule à traiter... = formules$(p_formules%) ...endroit actuel dans la formule... = i_formules%(p_formules%) p_formules% = p_formules% + 1
Dans ce schéma, je mémorise le texte de la formule et l'indice du caractère ayant déclenché la mise en pile de la formule. Selon les cas, il est possible que tu aies besoin d'empiler également d'autres informations, et il faudra autant de tableaux linéaires que d'informations à mémoriser. Mais le principe reste le même.
Dernière remarque: dans cet exemple, j'ai prévu un empilement de 100 formules, ce qu'il faut certainement adapter au contexte de ton programme.
| |
| | | Invité Invité
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 19:40 | |
| JL35 Je viens de voir ton message. Excuses moi d'avoir un ordinateur piloté par des extra-terrestres, avec plein d'aliens partout: voici l'image: Je clique sur n'importe quelle case, et j'y met par exemple 10. Cela va bien dans la case cliquée. Si je clique ensuite pour mettre à droite dans la cellule (ou au milieu), je me retrouve avec un affichage en A1. Si de nouveau je clique pour un affichage à gauche, l'affichage se fait dans la bonne cellule. J'ai vu qu'il y avait deux versions, j'ai essayé la deuxième, et pas de différence. Ne me dites pas que je suis le seul a avoir ce phénomène. Non! Il n'y a pas de trucage, d'autant que je voulais juste voir l'erreur que vous parliez et que je ne reproduisais pas. C'est pas grave, c'était juste une constatation. Je quitte, il faut que je laisse la place. |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 13 Mar 2011 - 21:28 | |
| Bravo JL 35 ! un petit truc qui t'as peut être déjà été signalé : cellule A1 : valeur 14 cellule B1 : valeur 15 cellule C1 : opération =A1+B1 touche entrée C1 affiche 29 je passe dessus avec les touches flèches pas de souci si C1 selectionné affichage de l'opération je quitte affichage du résultat. maintenant je joue avec la souris et je selectionne C1 affichage de l'opération, je selectionne (click sur) A1 l'operation reste en affichage dans C1 ceci étant, encore... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Dim 13 Mar 2011 - 21:49 | |
| Je viens de mettre une nouvelle version en ligne (à la place de la 2ème en page 1): - correction de quelques petits bugs - Formules: ajout de la somme de plusieurs cellules consécutives de la même rangée ou de la même colonne - contrôle dans les formules que la cellule contient bien une valeur numérique (sinon, abandon) - quand il y a des valeurs décimales, je convertis le résultat des formules au format monétaire: 2 décimales, c'est un choix arbitraire, facile à changer. Ca pourrait faire partie du formatage... mais ça complique. J'ai mis dans la colonne E ce que contiennent réellement les cellules correspondantes de la colonne D. On voit que la formule somme peut concerner des cellules qui contiennent déjà elles-mêmes une formule, mais il ne faut pas aller plus loin dans la cascade (par exemple des sommes de sommes, etc.). @Klaus merci pour tes remarques, mais je ne vais pas m'embringuer là-dedans pour ce petit (déjà quand même plus de 1000 lignes) programme, je ne crois pas que ça en vaille la peine. Mais je garde toutes tes suggestions sous le coude, au cas où... @ygeronimi essaie avec la dernière version, ça devrait être corrigé. @cosmos décidément je vais finir par le croire que ton pc est hanté par des esprits malins, je ne vois pas du tout comment reproduire ce phénomène... ???
Dernière édition par JL35 le Lun 14 Mar 2011 - 8:47, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| | | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Lun 14 Mar 2011 - 15:30 | |
| J'ai ajouté 3 outils: €: le formatage des nombres: libre ou monétaire, c'est à dire 2 chiffres après la virgule R: la recopie d'une formule incrémentée dans la case du dessous, pour éviter d'avoir à la resaisir à chaque ligne dans le cas d'une liste. Par exemple si dans la case D3 j'ai =B3+C3, je clique la case D4 (elle a le focus) puis l'outil 'R': elle se remplit avec =B4+C4, et ainsi de suite. Grille: le choix de la teinte de la grille (5 valeurs de gris en bascule, y compris noir et blanc: pas de grille) et là je vais peut-être faire une pause, parce que ça commence à devenir un peu trop volumineux à mon goût... @cosmos j'ai plus ou moins réussi à reproduire ton défaut (le '10' qui part se balader dans la case A1), il me semble en faisant un formatage à droite sur une valeur avec plein d'espaces devant (le total dépassant la largeur de la colonne), mais j'ai fait quelques petites modifs depuis et je n'y arrive plus... Le texte peut dépasser la largeur de la colonne et déborder sur la colonne suivante, mais dans ce cas il faut garder l'alignement à gauche, sinon le comportement est un peu imprévisible. Mais ça peut être pratique pour mettre un titre sur plusieurs colonnes, dans ce cas il faut le centrer à la main, en ajoutant des espaces en tête. 17/3 j'ai laissé une seule version, à jour, en tête de la page 1 | |
| | | Invité Invité
| Sujet: Re: Un petit tableur Ven 18 Mar 2011 - 22:06 | |
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un petit tableur Ven 18 Mar 2011 - 23:05 | |
| Merci Nicolas ! | |
| | | Contenu sponsorisé
| Sujet: Re: Un petit tableur | |
| |
| | | | Un petit tableur | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |