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.
Un petit tableur (bis) Emptypar Pedro Aujourd'hui à 10:37

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

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

» Décompilation
Un petit tableur (bis) Emptypar JL35 Mar 12 Nov 2024 - 19:57

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

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

» Aide-mémoire mensuel
Un petit tableur (bis) Emptypar jjn4 Lun 4 Nov 2024 - 18:56

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

» KGF_dll - nouvelles versions
Un petit tableur (bis) Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Un petit tableur (bis) Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Un petit tableur (bis) Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Un petit tableur (bis) Emptypar Yannick Mer 25 Sep 2024 - 22:16

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

» BUG QR Code DelphiZXingQRCode
Un petit tableur (bis) Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Un petit tableur (bis) 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
Le Deal du moment : -47%
SAMSUNG T7 Shield Bleu – SSD Externe 1 To ...
Voir le deal
89.99 €

 

 Un petit tableur (bis)

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




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

Un petit tableur (bis) Empty
MessageSujet: Un petit tableur (bis)   Un petit tableur (bis) EmptyVen 4 Mai 2012 - 17:27

Décidément, je me répète...
J'avais proposé il y a un an un petit tableur: https://panoramic.1fr1.net/t1463-un-petit-tableur?highlight=Tableur,
j'ai eu l'occasion de l'utiliser et de l'améliorer un peu, mais le sujet étant verrouillé (normal, trop vieux) je me permets de mettre la nouvelle version ici.
Il y a quelques retouches mineures, mais surtout la possibilité de supprimer et d'insérer des colonnes et des lignes.
Pour l'impression du tableau, je suis passé de WinTextPrint.exe à la nouvelle version WTP.exe de notre ami Klaus, dommage qu'on ait perdu au passage la possibilité d'imprimer en mode paysage (donc ce paramètre est inopérant).

C'est moins élaboré que le tableur de Klaus (on en est loin), mais ça peut faire l'affaire.

Voici le nouveau code (1250 lignes, quand même):
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
DIM scl

LABEL new, opn, der, savc, savt, savs, impr, quit, copy, paste, cut, Chw, Chh
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
LABEL lico, LinColn, Desgri, Deslign, Suplign, Coulig, Descel, Clicol, Cliran
LABEL Insert, Suppri, optim, Valpr, Afmes, Formules, Eval, Aide, Copform, Verif
LABEL Alerte, Trace, Faide

fc$ = "C:\Temp\Test.csv": ' fichier de manoeuvre <============================
ft$ = "C:\Temp\Test.tab": ' idem, formatage conservé
fimg$ = "C:\Temp\Test.bmp"
prt$ = "C:\UTIL\WTP.exe ": ' module d'impression, en mode 'image'
fpr$ = "C:\Temp\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 (L, C, R)
cout$ = "N": ' couleur texte noire (N, R, G, B)
couf$ = "W": ' couleur fond blanche (W, Y, M, C)
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 de l'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é (* non codé)": 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... (* non codé)": 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: ' nom police
TEXT 2, fnt$
ON_CLICK 2, Chpol
EDIT 3: TOP 3, 0: LEFT 3, 152: HEIGHT 3, 20: WIDTH 3, 50: ' taille police
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: ' zone de saisie
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 (en bascule)"
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

LIST 85: TOP 85, 20: LEFT 85, 150: HEIGHT 85, 175: WIDTH 85, 50: HIDE 85
FOR i% = 6 TO 30 STEP 2
    ITEM_ADD 85, STR$(i%)
NEXT i%
ON_CLICK 85, Atts

' Form dialogue formatage lignes/colonnes
FORM 50: TOP 50, et+80: LEFT 50, 100: WIDTH 50, 240: HEIGHT 50, 410: HIDE 50
ALPHA 52: PARENT 52, 50: TOP 52, 10: LEFT 52, 70: FONT_BOLD 52

BUTTON 110: PARENT 110,50: TOP 110,30: LEFT 110,5: WIDTH 110,105: HEIGHT 110,20: CAPTION 110,"Insérer une colonne"
ON_CLICK 110, Insert
BUTTON 111: PARENT 111,50: TOP 111,30: LEFT 111,115: WIDTH 111,105: HEIGHT 111,20: CAPTION 111,"Supprimer la colonne"
ON_CLICK 111, Suppri

ALPHA 114: PARENT 114, 50: TOP 114, 65: LEFT 114, 5: CAPTION 114, "Largeur de colonnes:"
SPIN 115: PARENT 115, 50: LEFT 115, 130: TOP 115, TOP(114): WIDTH 115, 70: MAX 115, 600

ALPHA 130: PARENT 130, 50: TOP 130, TOP(114)+25: LEFT 130, 5: CAPTION 130, "Enrichissements:"
CHECK 131: PARENT 131, 50: TOP 131, TOP(130)+20: LEFT 131, 10: CAPTION 131, "Gras"
CHECK 132: PARENT 132, 50: TOP 132, TOP(130)+20: LEFT 132, 80: CAPTION 132, "Italiques"
CHECK 133: PARENT 133, 50: TOP 133, TOP(130)+20: LEFT 133, 150: WIDTH 133, 60: CAPTION 133, "Souligné"

CONTAINER_OPTION 135: PARENT 135, 50: TOP 135, TOP(130)+50: 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, TOP(135)+50: 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, TOP(140)+50: 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, TOP(145)+50: 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"
BUTTON 51: PARENT 51, 50: TOP 51, TOP(151)+47: LEFT 51, 70: CAPTION 51, "OK"
ON_CLICK 51, Dimensions

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, 525: HIDE 220
COLOR 220,180,255,255: CAPTION 220, " - PARAMÈTRES D'IMPRESSION -": BORDER_SMALL 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: ": HIDE 221: ' paramètre orientation plus pris en compte à l'impression
OPTION 222: PARENT 222, 221: TOP 222, 16: LEFT 222, 10: CAPTION 222, "Portrait"
OPTION 223: PARENT 223, 221: TOP 223, 16: LEFT 223, 100: CAPTION 223, "Paysage"
EDIT 224: PARENT 224, 220: TOP 224, 75: LEFT 224, 10: WIDTH 224, 30
ALPHA 225: PARENT 225, 220: TOP 225, 78: LEFT 225, 45: CAPTION 225, "Marge gauche (mm)"
mg = 3
EDIT 226: PARENT 226, 220: TOP 226, 75 : LEFT 226, 150: WIDTH 226, 30
ALPHA 227: PARENT 227, 220: TOP 227, 78: LEFT 227, 185: CAPTION 227, "Marge haut (mm)"
mh = 3
EDIT 228: PARENT 228, 220: TOP 228, 105: LEFT 228, 10: WIDTH 228, 30
ALPHA 229: PARENT 229, 220: TOP 229, 108: LEFT 229, 45: CAPTION 229, "Largeur (mm)"
ON_CHANGE 228, Chw
EDIT 230: PARENT 230, 220: TOP 230, 105 : LEFT 230, 150: WIDTH 230, 30
ALPHA 231: PARENT 231, 220: TOP 231, 108: LEFT 231, 185: CAPTION 231, "Hauteur (mm)"
' ON_CHANGE 230, Chh
CHECK 240: PARENT 240,220: TOP 240,130: LEFT 240,10: CAPTION 240,"Proportionnel"
CHECK 241: PARENT 241,220: TOP 241,130: LEFT 241,150: WIDTH 241,130: CAPTION 241,"Imprimer les lignes"
MARK_ON 240: MARK_ON 241

BUTTON 233: PARENT 233, 220: TOP 233, 155: LEFT 233, 100: CAPTION 233, "Aperçu"
ON_CLICK 233, optim

wa = 190: ha = INT(297*wa/210): la = 50
PICTURE 232: PARENT 232, 220: TOP 232, 185: LEFT 232, la: WIDTH 232, wa: HEIGHT 232, ha
2D_TARGET_IS 232: 2D_PEN_COLOR 192,192,192: 2D_FILL_COLOR 255,255,220: 2D_RECTANGLE 0,0,wa, ha

BUTTON 234: PARENT 234, 220: TOP 234, 460: LEFT 234, 55: CAPTION 234, "Imprimer"
ON_CLICK 234, Valpr
BUTTON 235: PARENT 235, 220: TOP 235, 460: 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$+"En cliquant sur l'en-tête d'une colonne, on peut:"+rc$
hlp$=hlp$+"- supprimer cette colonne ou insérer (créer) une nouvelle colonne avant celle-ci."+rc$
hlp$=hlp$+"- ajuster sa largeur et le formatage du texte dans toutes les cellules de cette colonne."+rc$
hlp$=hlp$+"De même, en cliquant sur le numéro d'une rangée on peut:"+rc$
hlp$=hlp$+"- supprimer cette rangée ou insérer une nouvelle rangée avant celle-ci."+rc$
hlp$=hlp$+"- ajuster sa hauteur et le formatage du texte dans toutes les cellules 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"+rc$
hlp$=hlp$+"    =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"+rc$
hlp$=hlp$+"suivantes et de cliquer sur l'outil 'R' de la barre d'outils. La formule précédente sera réécrite et"+rc$
hlp$=hlp$+"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 WTP.exe 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 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$

FORM 900: TOP 900,80: LEFT 900,200: WIDTH 900,640: HEIGHT 900,640: HIDE 900
COLOR 900,180,255,255: FONT_SIZE 900,10: border_hide 900
LIST 901: PARENT 901,900: WIDTH 901,WIDTH(900): HEIGHT 901,HEIGHT(900)-35
COLOR 901,255,255,180: font_name 901,"Arial"
k% = INSTR(hlp$, rc$)
WHILE k% > 0
    ITEM_ADD 901, LEFT$(hlp$, k%-1): hlp$ = MID$(hlp$, k%+1, 9000)
    k% = INSTR(hlp$, rc$)
END_WHILE
BUTTON 902: PARENT 902,900: TOP 902,HEIGHT(900)-30: WIDTH 902,150: LEFT 902,240: CAPTION 902,"OK"
ON_CLICK 902, Faide

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: TO_FOREGROUND 50
CAPTION 52, "COLONNE: "+CHR$(64+c1)
CAPTION 110, "Insérer une colonne": CAPTION 111, "Supprimer la colonne"
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: TO_FOREGROUND 50
CAPTION 52, "RANGÉE: "+STR$(r1)
CAPTION 110, "Insérer une rangée": CAPTION 111, "Supprimer la rangée"
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

Insert:
IF clc = 1
    ' insérer une colonne
    nc = nc + 1
    lco(nc) = lco(nc-1)
    FOR j% = 1 TO nr
        FOR i% = nc TO c1 + 1 STEP -1
            cel$(j%,i%) =  cel$(j%,i%-1)
            pol$(j%,i%) = pol$(j%,i%-1): siz(j%,i%) = siz(j%,i%-1)
            enr$(j%,i%) = enr$(j%,i%-1): ali$(j%,i%) = ali$(j%,i%-1)
            cot$(j%,i%) = cot$(j%,i%-1): cof$(j%,i%) = cof$(j%,i%-1)
            fnb(j%,i%) = fnb(j%,i%-1)
        NEXT i%
        cel$(j%,c1) = "": ' colonne insérée
    NEXT j%
ELSE
    ' insérer une rangée
    nr = nr + 1
    hro(nr) = hro(nr-1)
    FOR j% = nr TO r1 + 1 STEP -1
        FOR i% = 1 TO nc
            cel$(j%,i%) =  cel$(j%-1,i%)
            pol$(j%,i%) = pol$(j%-1,i%): siz(j%,i%) = siz(j%-1,i%)
            enr$(j%,i%) = enr$(j%-1,i%): ali$(j%,i%) = ali$(j%-1,i%)
            cot$(j%,i%) = cot$(j%-1,i%): cof$(j%,i%) = cof$(j%-1,i%)
            fnb(j%,i%) = fnb(j%-1,i%)
        NEXT i%
    NEXT j%
    FOR i% = 1 TO nc: cel$(r1,i%) = "": NEXT i%: ' rangée insérée
END_IF
HIDE 50
GOSUB Desgri
GOSUB Descel: ' réaffichage de toutes les cellules
sa$ = TEXT$(5)
TIMER_ON 105
RETURN

Suppri:
IF clc = 1
    ' supprimer une colonne
    i% = MESSAGE_CONFIRMATION_YES_NO("Supprimer la colonne "+CHR$(64+c1)+" ?")
    IF i% <> 1 THEN HIDE 50: TIMER_ON 105: RETURN
    nc = nc - 1
    IF c1 < (nc+1)
        FOR j% = 1 TO nr
            FOR i% = c1 TO nc
                cel$(j%,i%) = cel$(j%,i%+1)
                pol$(j%,i%) = pol$(j%,i%+1): siz(j%,i%) = siz(j%,i%+1)
                enr$(j%,i%) = enr$(j%,i%+1): ali$(j%,i%) = ali$(j%,i%+1)
                cot$(j%,i%) = cot$(j%,i%+1): cof$(j%,i%) = cof$(j%,i%+1)
                fnb(j%,i%) = fnb(j%,i%+1)
            NEXT i%
        NEXT j%
    END_IF
ELSE
    ' supprimer une rangée
    i% = MESSAGE_CONFIRMATION_YES_NO("Supprimer la rangée "+STR$(r1)+" ?")
    IF i% <> 1 THEN HIDE 50: TIMER_ON 105: RETURN
    nr = nr - 1
    IF r1 < (nr+1)
        FOR j% = r1 TO nr
            FOR i% = 1 TO nc
                cel$(j%,i%) = cel$(j%+1,i%)
                pol$(j%,i%) = pol$(j%+1,i%): siz(j%,i%) = siz(j%+1,i%)
                enr$(j%,i%) = enr$(j%+1,i%): ali$(j%,i%) = ali$(j%+1,i%)
                cot$(j%,i%) = cot$(j%+1,i%): cof$(j%,i%) = cof$(j%+1,i%)
                fnb(j%,i%) = fnb(j%+1,i%)
            NEXT i%
        NEXT j%
    END_IF
END_IF
HIDE 50
GOSUB Desgri
GOSUB Descel: ' réaffichage de toutes les cellules
sa$ = TEXT$(5)
TIMER_ON 105
RETURN

LinColn:
' clic sur la case 'L/C'
TIMER_OFF 105
POSITION 161, nc: POSITION 165, nr
SHOW 60: TO_FOREGROUND 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
IF w0 < 640 THEN w0 = 640
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: HINT p+3,"Nombre/Format des Lignes/Colonnes"
' 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

Suplign:
scl = clig: clig = 255
GOSUB Deslign
clig = scl
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"
IF CLICKED(147) = 1 THEN cf$ = "W": ' couleur de fond
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, cel$(r, c)
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: changement de cellule
    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: GOSUB Newcel: RETURN
    ELSE
        IF t% = 38 and r > 1: ' flèche haut
            GOSUB Desel: r = r - 1: GOSUB Newcel: RETURN
        ELSE
            IF t% = 37 AND c > 1: ' flèche gauche
                GOSUB Desel: c = c - 1: GOSUB Newcel: RETURN
            ELSE
                IF t% = 39 AND c < nc: ' flèche droite
                    GOSUB Desel: c = c + 1: GOSUB Newcel: RETURN
                END_IF
            END_IF
        END_IF
    END_IF
ELSE
    ' touche alphanumérique: entrée de donnée
END_IF
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$)
    l = TEXT_WIDTH(a$, p): ' -> 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
SHOW 85
RETURN

Atts:
sz = VAL(ITEM_READ$(85, ITEM_INDEX(85)))
HIDE 85
TEXT 3, STR$(sz)
FONT_SIZE p, sz: siz(r, c) = sz
a$ = TEXT$(5): GOSUB Pra
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:
' non implémenté

RETURN

savs:
' non implémenté

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: TO_FOREGROUND 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 à 600 dpi)"
CAPTION 239, a$
MARK_ON 222
TEXT 224, STR$(mg): TEXT 226, STR$(mh)
TEXT 228, STR$(lim): TEXT 230, STR$(him)
RETURN

Chw:
IF CHECKED(240) = 1
    a$ = TEXT$(228): IF a$ = "" THEN RETURN
    i% = VAL(a$)*ht/lt
    TEXT 230, STR$(i%)
END_IF
RETURN

Chh:
IF CHECKED(240) = 1
    a$ = TEXT$(230): IF a$ = "" THEN RETURN
    i% = VAL(a$)*lt/ht
    TEXT 228, STR$(i%)
END_IF
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 180,180,180: 2D_FILL_COLOR 255,255,220: 2D_FILL_SOLID: 2D_RECTANGLE 0,0,wa,ha
2D_FILL_COLOR 180,180,180
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: ' l'orientation n'est plus accessible dans wtp.exe ...
    ' FILE_WRITELN 1, "<#orientation=Portrait#>"
ELSE
    ' FILE_WRITELN 1, "<#orientation=Paysage#>"
END_IF
FILE_WRITELN 1, "<#unit_mm=on,23.62#>": ' unités mm, à 600 dpi
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
    IF CHECKED(241) = 0
        ' pas d'impression des lignes
        GOSUB Suplign
        FILE_SAVE p, fimg$
        GOSUB Deslign
    END_IF
    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

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:
TIMER_OFF 105: SHOW 900: TO_FOREGROUND 900
RETURN

Faide:
HIDE 900: TIMER_ON 105
RETURN



Dernière édition par JL35 le Dim 6 Mai 2012 - 14:43, édité 5 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 0:11

Bravo JL35, super propre Wink (Bon l'aide est un peu grande pour mon écran, mais bon, ce n'est pas le plus important Wink )
Revenir en haut Aller en bas
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 0:46

Merci Jicehel, et tu as raison pour l'aide, j'ai justement pensé à ton écran, il va falloir que j'adopte la méthode numéro 2 (aide en plusieurs morceaux).
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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 13:29

Bravo JL35, tout çà sans utiliser GRID,

Il y a un petit bug, en voulant tester l'insertion d'une colonne, j'ai découvert que la cellule A1 est recopiée en G20 si on insère une colonne en B.

Assez sympa tout de même

A+
Revenir en haut Aller en bas
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 17:49

Salut Jean-Claude, bizarre, je n'arrive pas à reproduire ce défaut dans les conditions que tu décris ???

PS minute, effectivement il y a un truc...

Tu as mis le doigt dessus, effectivement un petit rafraîchissement qui manquait.
J'en ai profité pour diminuer la hauteur de l'aide (maintenant c'est à défilement), pour que ça tienne dans l'écran riquiqui de Jicehel.
C'est à jour dans le 1er post.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 20:54

Ah oui, avec l'aide dans une liste, c'est propre et ça tient bien à l'écran Wink Merci JL35 pour la modif
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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 21:03

Merci pour la rectif, un petit code à étudier de près car tout en Panoramic.

A+
Revenir en haut Aller en bas
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 5 Mai 2012 - 21:11

Sauf l'impression, mais il n'y a pas les fonctions dans Panoramic. Heureusement Klaus était là !

22h55 petite correction: parfois, en passant d'une case à l'autre à l'aide des touches flèches, le contenu de la précédente était transporté dans la nouvelle.
Revenir en haut Aller en bas
jjn4

jjn4


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

Un petit tableur (bis) Empty
MessageSujet: +++   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 12:51

Il faut admettre que c'est pas mal du tout !
Dommage qu'on ne puisse pas faire la même chose avec grid !
Dommage aussi qu'il y ait des bugs
(là, évidemment, c'est mon côté critique qui ressort...) Laughing Laughing Laughing
comme erreur 62 à la ligne 782 quand on essaie de changer la taille de la police
ou des fois où ce que tape dans l'edit n'apparaît pas la cellule
et le R, comment on le fait marcher ?
Là, JL35 va m'inviter à continuer à me faire rare ! Laughing Laughing Laughing
Laughing alien Laughing alien Laughing ........................ Sleep
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 13:45

Certe, il manque un test Object_Exists sur la liste puisque le Delete est bien là, le timer est bien désactivé, mais on peut avoir la procédure événementielle du clic sur un bouton par exemple qui le remette en route et permette de sortir de la boucle. Quand l'utilisateur reclic alors sur la liste de police, la liste est déjà définie ...
Un truc vicieux auquel il faudra penser dans la définition d'interface. Pourtant, le programme me paraissait super propre est bien pensé, mais c'est vrai que l'utilisateur peut être un peu tordu (voir vicieux .... Wink )
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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 14:05

Jicehel à dit:
Citation :
mais c'est vrai que l'utilisateur peut être un peu tordu (voir vicieux .... )

Si tu penses à JJN4, je confirme rabbit geek
Revenir en haut Aller en bas
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 14:06

Mon cher jjn4, si tu trouves des anomalies dans le programme, ça prouve au moins que tu l'as essayé, et ça fait toujours plaisir !

- Pour la taille de police, j'ai un peu revu ma copie, plus d'objet temporaire qui est un peu scabreux, le clic dans la taille de police fait apparaître une liste de tailles, dans laquelle on choisit la nouvelle, on clique, et ça met à jour la cellule concernée. Évidemment, si la taille est trop grande pour la cellule, ça déborde (provisoirement) !

- La fonction 'R' (recopie) sert à recopier la formule incrémentée d'une cellule dans la cellule suivante de la même colonne. C'est utile pour une série d'additions par exemple:


Un petit tableur (bis) 0r
Ici la cellule C1 contient =A1+B1
Je clique sur C2, puis 'R', ça met =A2+B2 dans la cellule
Puis je clique successivement sur C3 et R (-> = A3+B3) et ainsi de suite.
Les valeurs contenues dans les opérandes (Ax et Bx) doivent être des valeurs numériques, sinon erreur.
Ça évide d'avoir à ressaisir la formule à chaque ligne.
C'est (bien) expliqué dans l'aide.
Les formules n'admettent que deux opérandes (=A1+B1+C1 n'est pas admis)
C'est un peu simpliste, peut-être un peu gadget, mais bon...

Et comme dit Jicehel, il faudrait bien penser l'interface avant de commencer à coder, mais bon, comme toujours je code un petit truc, puis je me prends au jeu et ça enfle, et je n'ai pas le courage de tout reprendre à zéro.

Vas-y jjn4, ne te gêne pas pour critiquer (je le dis comme ça, mais je sais très bien que tu n'as pas besoin de mes encouragements Very Happy)


Salut Jean_Claude, on s'est croisés... mais tu as bien raison !

edit 14h35 oups, j'ai simplement oublié de mettre le source à jour... c'est fait.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 16:09

Absolument Jean-Claude, je pensait à lui et il a bien raison de l'être, ça sert à ça les tests Wink
Au mieux, ça permet d'améliorer le programme, au pire, l'auteur dit qu'il n'en n'a rien à faire ou entre les 2, que ça demande trop de boulot et qu'il n'a pas le courage de s'y atteler (et là, je ne pense à personne en particulier, je reste général, car je pense que l'on est un peu comme ça, soit en a envie de modifier pour diverses raisons, soit pas ...). Bon comme je frise le hors sujet, je fais court Embarassed mais cette proposition d'organisation et les test de jjn4 permettent de voir comment programmer une interface utilisateurs et les problèmes que l'on peut rencontrer, c'est très intéressant.
Revenir en haut Aller en bas
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 16:56

Si on programme pour soi (c'est toujours mon cas au début d'un programme), on n'est pas trop exigeant sur la présentation et on peut s'accommoder de quelques petites malfaçons, mais dès qu'on diffuse le programme on s'expose aux critiques, c'est tout à fait normal, et bénéfique.

Si je chante sous la douche, ça ne trouble que moi (un peu mon épouse ?), mais si je me produis sur scène (franchement je ne vous souhaite pas une telle avanie) je dois accepter les remarques (même désobligeantes, quoique... mais pas les tomates !)


Dernière édition par JL35 le Dim 6 Mai 2012 - 17:19, édité 1 fois
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyDim 6 Mai 2012 - 17:15

Laughing Laughing Laughing Laughing Laughing Laughing Laughing Laughing lol! lol! lol! lol! Laughing Laughing Laughing Laughing Laughing Laughing Laughing Laughing
Revenir en haut Aller en bas
jjn4

jjn4


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

Un petit tableur (bis) Empty
MessageSujet: +++   Un petit tableur (bis) EmptyLun 7 Mai 2012 - 10:22

Citation :
mais pas les tomates !
Oueeuuuuhhhh ! Comment vous me voyez ?!!!
Un mec sympa et bien éduqué comme moi...!!!
Je ne lance jamais de tomates !
Bon, d'accord, mon humour est un taquin !
Laughing Laughing Laughing alien Laughing Laughing Laughing
Bon, je sens que je vais trouver encore des bugs
dans le programme de JL35...
lol! lol! lol! lol! lol! lol! lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyLun 7 Mai 2012 - 13:36

tortionnaire !
Revenir en haut Aller en bas
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyLun 7 Mai 2012 - 18:33

Bon, une nouvelle version pour embêter jjn4.

- D'abord le rajout de quelques Timer_off/Timer_on, en effet ça manquait à certains endroits et ça causait quelques soucis (j'en ai peut-être oublié ?).

- Amélioration de la sauvegarde au format 'propriétaire' .tab: le nombre et la taille des cellules sont également sauvegardés et restaurés (en plus du formatage): on retrouve l'image telle qu'au moment de la sauvegarde.

- Dans la rubrique 'impression', ajout de la visualisation de la taille réelle d'une cellule donnée à l'impression, en fonction des paramètres donnés. C'est à dire la taille affichée sur l'écran de la cellule est la même en mm que celle résultant de l'impression sur la feuille. Ça suppose un facteur à changer en fonction de la taille de son écran: variable rho.
Par exemple chez moi: écran de 1920 pixels de large pour 518 mm: rho = 1920/518 = 3,7065

- Et quelques bricoles.

(et demain direction Madrid pour la semaine, y'aura peut-être enfin un peu de soleil...)
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyLun 7 Mai 2012 - 18:59

Ben moi, je dis continues de l'embéter comme ça Wink
et bon voyage aussi pour demain pour peut-être trouver le soleil ...
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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyMar 8 Mai 2012 - 11:56

Je viens de tester, à priori çà marche bien. Désolé JJN4 alien , j'ai pas trouvé de BUG Very Happy

Alors comme il faut bien embêter l'auteur Razz , je me suis dit qu'il aurait été sympa d'avoir la possibilité de faire un tableau (grille)...

A+
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyMar 8 Mai 2012 - 12:18

Et aussi quelques tableaux croisés dynamiques ... Shocked
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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptyMar 8 Mai 2012 - 13:23

Ouais t'as raison, et même la sélection de plusieurs cellules, et aussi un onglet développement avec des boutons, Options, Combo (en Panoramic, bien sûr).....

Stop. Y va nous faire une syncope, ....

lol! lol! lol!
Revenir en haut Aller en bas
jjn4

jjn4


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

Un petit tableur (bis) Empty
MessageSujet: +++   Un petit tableur (bis) EmptyMer 9 Mai 2012 - 11:29

Oui, allez, on va dire que c'est bon !
Allez, JL35, t'as fait du super boulot !!!
Mais vous avez raison, il faut lui dire qu'il manque ceci ou cela,
parce que sinon, après, il va croire que c'est parfait,
et après, il va avoir les chevilles qui enflent, qui enflent, qui enflent...
Et puis après... PAFFFFFFF !!!!!
lol! Laughing alien Laughing lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 12 Mai 2012 - 18:21

Citation :
Jean Claude
Alors comme il faut bien embêter l'auteur, je me suis dit qu'il aurait été sympa d'avoir la possibilité de faire un tableau (grille)...

Jicehel
Et aussi quelques tableaux croisés dynamiques ...

Jean Claude
Ouais t'as raison, et même la sélection de plusieurs cellules, et aussi un onglet développement avec des boutons, Options, Combo (en Panoramic, bien sûr).....

Allez-y les gars, vous gênez pas ! Mad



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

Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) EmptySam 12 Mai 2012 - 20:55

C'est bien ce qu'on fait Very Happy
Mais comme on est sympa: tu peux prendre ton temps lol!
Revenir en haut Aller en bas
Contenu sponsorisé





Un petit tableur (bis) Empty
MessageSujet: Re: Un petit tableur (bis)   Un petit tableur (bis) Empty

Revenir en haut Aller en bas
 
Un petit tableur (bis)
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Un petit tableur
» 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: