FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Tableur, - Un petit tableur Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Tableur, - Un petit tableur Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Tableur, - Un petit tableur Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Tableur, - Un petit tableur Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Tableur, - Un petit tableur Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Tableur, - Un petit tableur Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Tableur, - Un petit tableur Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Tableur, - Un petit tableur Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Tableur, - Un petit tableur Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Tableur, - Un petit tableur Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Tableur, - Un petit tableur Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Tableur, - Un petit tableur Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Tableur, - Un petit tableur Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Tableur, - Un petit tableur Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Tableur, - Un petit tableur Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-17%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS + Cellular 44mm (plusieurs ...
249 € 299 €
Voir le deal

 

 Un petit tableur

Aller en bas 
5 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Un petit tableur   Tableur, - Un petit tableur EmptyJeu 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.
Tableur, - Un petit tableur Clip
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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyVen 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+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyVen 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.
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Tableur, - Un petit tableur Empty
MessageSujet: +++   Tableur, - Un petit tableur EmptySam 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...
scratch
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 12 Mar 2011 - 18:50

On s'est croisés Jean Claude Very Happy
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.
Revenir en haut Aller en bas
Invité
Invité




Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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
Tableur, - Un petit tableur Tab1
Bon, je laisse comme ça jusqu'à avis contraire.
Revenir en haut Aller en bas
Invité
Invité




Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptySam 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. Sleep

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..
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 13 Mar 2011 - 11:19

@JL35,

Il y a un problème avec les opérations en horizontale (=b8+c8).

A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 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 ?
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 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+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 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é !
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 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: alien alien alien alien alien alien alien alien alien

voici l'image:
Tableur, - Un petit tableur 14880810

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.
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Tableur, - Un petit tableur Empty
MessageSujet: re   Tableur, - Un petit tableur EmptyDim 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
scratch

ceci étant, encore...
cheers cheers
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyDim 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.

Tableur, - Un petit tableur Tab
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
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Tableur, - Un petit tableur Empty
MessageSujet: re   Tableur, - Un petit tableur EmptyDim 13 Mar 2011 - 23:03

petit souci disparu !

cheers cheers
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyLun 14 Mar 2011 - 15:30

J'ai ajouté 3 outils:
Tableur, - Un petit tableur Tab2
€: 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
Revenir en haut Aller en bas
Invité
Invité




Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyVen 18 Mar 2011 - 22:06

... Impressionnant!
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur EmptyVen 18 Mar 2011 - 23:05

Merci Nicolas ! Very Happy
Revenir en haut Aller en bas
Contenu sponsorisé





Tableur, - Un petit tableur Empty
MessageSujet: Re: Un petit tableur   Tableur, - Un petit tableur Empty

Revenir en haut Aller en bas
 
Un petit tableur
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Un petit tableur (bis)
» Tablette et tableur.
» Un vrai tableur pour Panoramic dans une DLL
» Clone Début - Tableur
» Mini tableur pour Windows

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: