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
» Gestion d'un système client-serveur.
Un petit livret Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Un petit livret Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Un petit livret Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Un petit livret Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Un petit livret Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Un petit livret Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Un petit livret Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Un petit livret Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Un petit livret Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Un petit livret Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Un petit livret Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Un petit livret Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Un petit livret Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Un petit livret Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Un petit livret Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
Funko POP! Jumbo One Piece Kaido Dragon Form : ...
Voir le deal

 

 Un petit livret

Aller en bas 
+3
Nardo26
Klaus
JL35
7 participants
AuteurMessage
JL35




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

Un petit livret Empty
MessageSujet: Un petit livret   Un petit livret EmptyMar 5 Avr 2011 - 22:53

Fabrication d'un petit livret de poche de 8 pages à partir d'une feuille A4. Je m'en sers par exemple pour faire un petit annuaire téléphonique qui tient dans mon portefeuille.

1) Fabrication matérielle:
On imprime le texte formaté sous forme de 8 images de page sur une feuille A4, qui est ensuite pliée judicieusement pour que les pages se suivent:
Un petit livret Livret
à gauche la page en sortie d'imprimante. Une incision est pratiquée au cutter sur la ligne rouge, puis la page est pliée:
- dans le sens de la longueur, texte à l'extérieur
- dans le sens de la largeur entre 7/8 et 3/4, texte à l'extérieur, puis entre 1/8 et 2/3, et 6/7 et 4/5 texte à l'intérieur
et le tout est replié de façon que les pages se suivent.
Pour le pliage, ne pas se fier aveuglément aux traits qui peuvent être un peu décalés en fonction de l'imprimante, mais plutôt aux bords de la feuille, l'incision se faisant juste sur la pliure.

2) Logiciel:
Le fichier d'origine est mis en forme pour obtenir une largeur continue du nombre de caractères de chaque page, compte tenu de la police de caractères et des marges gauche et droite. On utilise ici une police fixe, et il est bon de prévoir un minimum de marges.
(il est possible d'éditer le fichier d'origine, pour ajustements).
Puis chaque page est fabriquée sous forme d'image dans des Picture ( 8 ), certaines tête-bêche.
Enfin, l'ensemble est regroupé sous forme d'une image unique (image de la page A4) qui sera imprimée.
Image partielle de l'écran de travail:
Un petit livret Part1

On utilise IrfanView pour les manipulations d'images: retournements et regroupements, et WinTextPrint de l'ami Klaus pour l'impression finale (mais on peut aussi imprimer l'image avec un programme de traitement d'image).

Code:

' Livret.bas, fabrication et impression d'un livret à partir d'une feuille A4
DIM w0, h0, w1, h1, wa, t1, l1, x, y, x1%, x2%, x3%, x4%, y1%, y2%, p, sens(8), u%
DIM f$, f1$, a$, b$, n, pol$, sz, nc, nl, l, lc%, hc%, xa, ya, r, g, b, lp, hp
DIM t2,t3,t4,t5,t6,t7,t8,l2,l3,l4,l5,l6,l7,l8, td, lf, lm, eda, i%, j%, gras, ital
DIM iv$, ip$, mh, mb, mg, md, nump, ncu, nlu, rtemp$, nm$, ad$, tl$, lt, ln
DIM la, fi$(8), fm$, fp$, fh1$, fh2$, fpr$, fsz$, fbk$, atf, ats, w, h, xt, yt
DIM fa$, fb$, fc$, fr$, fd$, ff$, v%(1000)
DIM tf%, tf2, tf3, lh%, w%, h%, bpp%, ll%, ll2, ll3, pos

LABEL Chf, Chp, Cht, Che, Param, Mfo, Refresh, Mfot, Mfoa, Mfop, ra, rq, ewt
LABEL Ecpage, Vflip, phot, Edite, Edr, Imprime, Tailcar, Dimima, Composite
LABEL BmpInfos, Aide

' ************** chemins de fichiers à adapter *****************
rtemp$ = "Z:\": ' répertoire de travail
f1$ = rtemp$ + "Txfor.txt"
fm$ = rtemp$ + "page1.bmp"
fp$ = rtemp$ + "livret.jpg"
fpr$ = rtemp$ + "Impr"
fh1$ = rtemp$ + "H1.bmp"
fh2$ = rtemp$ + "H2.bmp"
fsz$ = rtemp$ + "Listail"
fbk$ = rtemp$ + "Back.bmp"
fd$ = rtemp$ + "Dir.tmp"
ff$ = rtemp$ + "Info.txt"
fb$ = rtemp$ + "Img.bmp"
' Ressources externes:
iv$ = "C:\Progra~1\Irfanv~1\i_view32.exe ": ' IrfanView
ip$ = "C:\Util\WinTextPrint.exe ": ' utilitaire d'impression de Klaus

sens(1)=1:sens(2)=0:sens(3)=0:sens(4)=0:sens(5)=0:sens(6)=1:sens(7)=1:sens(8)=1
w0= 1140: h0 = 960
WIDTH 0, w0: HEIGHT 0, h0: FONT_BOLD 0: CAPTION 0, " - LIVRET -"
COLOR 0, 128,255,255
w1 = 1100: h1 = w1*210/297: ' (image finale = 1100 x 778 pixels)
lp = w1/4: hp = h1/2
t1 = 10: l1 = 10
x1% = w1/4: x2% = w1/2: x3% = 3*w1/4: x4% = w1
y1% = h1/2: y2% = h1
t2 = t1+hp: l2 = l1
t3 = t2: l3 = l1+lp
t4 = t2: l4 = l3+lp
t5 = t2: l5 = l4+lp
t6 = t1: l6 = l5
t7 = t1: l7 = l4
t8 = t1: l8 = l3
PICTURE 1: TOP 1, t1: LEFT 1, l1: WIDTH 1, lp: HEIGHT 1, hp
2D_TARGET_IS 1: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 2: TOP 2, t2: LEFT 2, l2: WIDTH 2, lp: HEIGHT 2, hp
2D_TARGET_IS 2: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 3: TOP 3, t3: LEFT 3, l3: WIDTH 3, lp: HEIGHT 3, hp
2D_TARGET_IS 3: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 4: TOP 4, t4: LEFT 4, l4: WIDTH 4, lp: HEIGHT 4, hp
2D_TARGET_IS 4: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 5: TOP 5, t5: LEFT 5, l5: WIDTH 5, lp: HEIGHT 5, hp
2D_TARGET_IS 5: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 6: TOP 6, t6: LEFT 6, l6: WIDTH 6, lp: HEIGHT 6, hp
2D_TARGET_IS 6: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 7: TOP 7, t7: LEFT 7, l7: WIDTH 7, lp: HEIGHT 7, hp
2D_TARGET_IS 7: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
PICTURE 8: TOP 8, t8: LEFT 8, l8: WIDTH 8, lp: HEIGHT 8, hp
2D_TARGET_IS 8: 2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp
td = t1 + h1 + 60
lf = 350
ALPHA 10: TOP 10, td: LEFT 10, lf
CAPTION 10, "Marges:    Haut        Bas      Gauche    Droite"
mg = 2: md = 2: mh = 1: mb = 0: ' marges (en caractères ou lignes)
SPIN 11: TOP 11, td+20: LEFT 11, lf+50: WIDTH 11, 50: POSITION 11, mh
SPIN 12: TOP 12, td+20: LEFT 12, lf+110: WIDTH 12, 50: POSITION 12, mb
SPIN 13: TOP 13, td+20: LEFT 13, lf+170: WIDTH 13, 50: POSITION 13, mg
SPIN 14: TOP 14, td+20: LEFT 14, lf+230: WIDTH 14, 50: POSITION 14, md

FOR x = 11 TO 14: MIN x, 0: MAX x, 20: NEXT x

CHECK 15: TOP 15, td+50: LEFT 15, lf+50: WIDTH 15, 200: CAPTION 15, "Pages numérotées"
MARK_ON 15
ALPHA 16: TOP 16, td-55: LEFT 16, lf: CAPTION 16, "Fichier:"
EDIT 17: TOP 17, td-55: LEFT 17, lf+50: WIDTH 17, 270
TEXT 17, f$: ON_CLICK 17, Chf
BUTTON 18: TOP 18, td-20: LEFT 18, lf+330: WIDTH 18, 100: CAPTION 18, "EXEC"
ON_CLICK 18, Mfo
BUTTON 19: TOP 19, td-55: LEFT 19, lf+330: WIDTH 19, 100: CAPTION 19, "Edit source"
ON_CLICK 19, Edite
BUTTON 20: TOP 20, td+45: LEFT 20, lf+330: WIDTH 20, 100: CAPTION 20, "Imprimer"
ON_CLICK 20, Imprime
BUTTON 28: TOP 28, td+45: LEFT 28, lf+440: WIDTH 28, 100: CAPTION 28, "Aide"
ON_CLICK 28, Aide
BUTTON 25: TOP 25, td+15: LEFT 25, lf+330: WIDTH 25, 100: CAPTION 25, "Edit résultat"
ON_CLICK 25, Edr
CONTAINER_OPTION 21: TOP 21, td-35: LEFT 21, lf+50: WIDTH 21, 270: HEIGHT 21, 35
OPTION 22: PARENT 22, 21: TOP 22, 12: LEFT 22, 10: CAPTION 22, "Texte"
OPTION 23: PARENT 23, 21: TOP 23, 12: LEFT 23, 100: CAPTION 23, "Annuaire"
OPTION 24: PARENT 24, 21: TOP 24, 12: LEFT 24, 200: caption 24, "Photos"
MARK_ON 22

OPEN_DIALOG 50
pol$ = "Lucida Console": sz = 8: ' Police à pas fixe
gras = 0: ital = 0
GOSUB Tailcar: ' -> lc%, hc%: taille des caractères, en pixels
FOR p = 1 TO 8
    FONT_NAME p, pol$: FONT_SIZE p, sz
NEXT p
nc = INT(x1%/lc%)-1: ' largeur totale de colonne, en caractères
nl = INT(y1%/hc%)-1: ' nombre total de lignes par page
nump = 0: ' numérotation des pages
eda = 0
atf = 0: ats = 0
ALPHA 30: TOP 30, td-55: LEFT 30, 10: CAPTION 30, "Police ="
LIST 31: TOP 31, td-55: LEFT 31, 60: HEIGHT 31, 25: WIDTH 31, 200: ITEM_ADD 31, pol$
ON_CLICK 31, Chp
ALPHA 32: TOP 32, td-28: LEFT 32, 10: CAPTION 32, "Taille ="
LIST 33: TOP 33, td-28: LEFT 33, 60: HEIGHT 33, 25: WIDTH 33, 40: ITEM_ADD 33, STR$(sz)
ON_CLICK 33, Cht
ALPHA 34: TOP 34, td+2: LEFT 34, 10: CAPTION 34, "1 carac=          mm."
LIST 35: TOP 35, td: LEFT 35, 60: HEIGHT 35, 20: WIDTH 35, 40: ITEM_ADD 35, STR$(lc%*297/1100)
ALPHA 36: TOP 36, td+27: LEFT 36, 10: CAPTION 36, "1 ligne=            mm."
LIST 37: TOP 37, td+25: LEFT 37, 60: HEIGHT 37, 20: WIDTH 37, 40: ITEM_ADD 37, STR$(hc%*297/1100)
ALPHA 38: TOP 38, td+52: LEFT 38, 10: CAPTION 38, "1 page=          lignes de          caract.(total)"
LIST 39: TOP 39, td+50: LEFT 39, 60: HEIGHT 39, 20: WIDTH 39, 30: ITEM_ADD 39, STR$(nl)
LIST 40: TOP 40, td+50: LEFT 40, 155: HEIGHT 40, 20: WIDTH 40, 30: ITEM_ADD 40, STR$(nc)
CHECK 45: TOP 45, td-25: LEFT 45, 120: CAPTION 45, "Gras"
CHECK 46: TOP 46, td-25: LEFT 46, 180: CAPTION 46, "Italique"
ON_CLICK 45, Che: ON_CLICK 46, Che

ALPHA 41: TOP 41, td-55: LEFT 41, w1-140: CAPTION 41, "Feuille A4 = 297 x 210 mm"

IF FILE_EXISTS(f1$) = 1 THEN FILE_DELETE f1$
END

' ================================= S/P ====================================
Chf:
a$ = FILE_NAME$(50)
IF a$ <> "" AND a$ <> "_"
    f$ = a$: TEXT 17, f$
END_IF
RETURN

Chp:
IF atf = 0
    FONT_NAMES_ADD 31: atf = 1
ELSE
    pol$ = ITEM_INDEX$(31)
    CLEAR 31: ITEM_ADD 31, pol$
    atf = 0
    GOSUB Param
END_IF
RETURN

Cht:
IF ats = 0
    FILE_OPEN_WRITE 1, fsz$
    FOR x = 5 TO 30: FILE_WRITELN 1, STR$(x): NEXT x
    FILE_CLOSE 1
    FILE_ADD 33, fsz$: ats = 1
ELSE
    sz = VAL(ITEM_INDEX$(33))
    CLEAR 33: ITEM_ADD 33, STR$(sz): FILE_DELETE fsz$
    ats = 0
    GOSUB Param
END_IF
RETURN

Che:
gras = 0: ital = 0
IF CHECKED(45) = 1 THEN gras = 1
IF CHECKED(46) = 1 THEN ital = 1
GOSUB Param
RETURN

Param:
GOSUB Tailcar: ' -> lc%, hc%: taille des caractères, en pixels
FOR p = 1 TO 8
    FONT_NAME p, pol$: FONT_SIZE p, sz
    FONT_BOLD_OFF p: IF gras = 1 THEN FONT_BOLD p
    FONT_ITALIC_OFF p: IF ital = 1 THEN FONT_ITALIC p
NEXT p
nc = INT(x1%/lc%)-1: ' largeur totale de colonne, en caractères
nl = INT(y1%/hc%)-1: ' nombre total de lignes par page
CLEAR 35: ITEM_ADD 35, STR$(lc%*297/1100)
CLEAR 37: ITEM_ADD 37, STR$(hc%*297/1100)
CLEAR 39: ITEM_ADD 39, STR$(nl)
CLEAR 40: ITEM_ADD 40, STR$(nc)
RETURN

Mfo:
' Mise en largeur du fichier f$ -> f1$
mh = POSITION(11): mb = POSITION(12): mg = POSITION(13): md = POSITION(14)
nump = 0: IF CHECKED(15) = 1 THEN nump = 1
ncu = nc-mg-md
nlu = nl-mh-mb-nump
f$ = TEXT$(17): IF f$ = "" THEN RETURN
eda = 0
IF CHECKED(23) = 1
    eda = 1
ELSE
    IF CHECKED(24) = 1
        eda = 2
    END_IF
END_IF
IF eda = 0
    GOSUB Mfot: ' mise en forme fichier texte standard
ELSE
    IF eda = 1
        GOSUB Mfoa: ' mise en forme fichier type annuaire
    ELSE
        ' GOSUB Mfop: ' mise en forme photos
        GOSUB Composite
    END_IF
END_IF
Refresh:
' affichage des pages
FOR p = 1 TO 8
    GOSUB Ecpage
NEXT p
2D_TARGET_IS 8: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, hp-1, lp-1, hp-1
2D_TARGET_IS 7: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, hp-1, lp-1, hp-1
2D_TARGET_IS 3: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, 0, lp-1, 0
2D_TARGET_IS 4: 2D_PEN_COLOR 255,0,0: 2D_LINE 0, 0, lp-1, 0
2D_PEN_COLOR 0,0,0
RETURN

Mfot:
' Mise au format d'un fichier texte ordinaire
FILE_OPEN_READ 1, f$: lm = 0
WHILE FILE_EOF(1) = 0
    FILE_READLN 1, a$: IF LEN(a$) > lm THEN lm = LEN(a$)
END_WHILE
FILE_CLOSE 1
FILE_OPEN_READ 1, f$: FILE_OPEN_WRITE 2, f1$
WHILE FILE_EOF(1) = 0
    FILE_READLN 1, a$: a$ = RTRIM$(a$)
ra:
    IF LEN(a$) > ncu
        FOR x = ncu+1 TO 1 STEP -1
            IF MID$(a$, x, 1) = " " THEN EXIT_FOR
        NEXT x
        IF x > 1
            FILE_WRITELN 2, LEFT$(a$, x-1): a$ = MID$(a$, x+1, 200)
        ELSE
            FILE_WRITELN 2, LEFT$(a$, ncu): a$ = MID$(a$, ncu+1, 200)
        END_IF
        a$ = RTRIM$(a$): GOTO ra
    END_IF
    IF FILE_EOF(1) = 0
        FILE_READLN 1, b$
        IF LEFT$(b$, 1) <> " " AND LEFT$(b$, 1) <> CHR$(9)
            a$ = a$ + " " + b$: GOTO ra
        ELSE
            FILE_WRITELN 2, a$
            a$ = b$: GOTO ra
        END_IF
    END_IF
    FILE_WRITELN 2, a$
    END_WHILE
FILE_CLOSE 1: FILE_CLOSE 2
RETURN

Mfoa:
' Mise en forme du fichier annuaire téléphonique,
' articles de la forme: Nom;Adresse;Numéro
FILE_OPEN_READ 1, f$: FILE_OPEN_WRITE 2, f1$
WHILE FILE_EOF(1) = 0
    FILE_READLN 1, a$: a$ = RTRIM$(a$)
    IF LEFT$(a$, 1) = "*" THEN GOTO ewt: ' ligne ignorée (commentaire)
    i% = INSTR(a$, ";")
    IF i% < 1
        ad$ = a$
    ELSE
        nm$ = LEFT$(a$, i%-1): ln = LEN(nm$)
        a$ = MID$(a$, i%+1, 200)
        i% = INSTR(a$, ";")
        IF i% > 0
            ad$ = LEFT$(a$, i%-1): tl$ = MID$(a$, i%+1, 200)
        ELSE
            ad$ = "": tl$ = a$
        END_IF
        tl$ = RTRIM$(tl$): lt = LEN(tl$)
        IF lt > 0
            a$ = "": ' compactage du numéro (suppression des espaces)
            FOR i% = 1 TO LEN(tl$)
                IF MID$(tl$, i%, 1) <> " " THEN a$ = a$ + MID$(tl$, i%, 1)
            NEXT i%
            tl$ = a$: lt = LEN(tl$)
            x = ncu -lt - 1
        ELSE
            x = ncu
        END_IF
        IF ln > x
            FOR i% = x+1 TO 1 STEP -1
                IF MID$(nm$, i%, 1) = " " THEN EXIT_FOR
            NEXT i%
            IF ad$ <> ""
                ad$ = MID$(nm$, i%+1, 100) + " " + ad$
            ELSE
                ad$ = MID$(nm$, i%, 100)
            END_IF
            nm$ = LEFT$(nm$, i%-1)
        END_IF
        FILE_WRITELN 2, nm$ + STRING$(x+1-LEN(nm$), " ") + tl$
    END_IF
rq:
    IF LEN(ad$) > (ncu-1)
        FOR i% = ncu TO 1 STEP -1
            IF MID$(ad$, i%, 1) = " " THEN EXIT_FOR
        NEXT i%
        FILE_WRITELN 2, " " + LEFT$(ad$, i%-1)
        ad$ = MID$(ad$, i%+1, 100): GOTO rq
    END_IF
    ad$ = RTRIM$(ad$): IF ad$ <> "" THEN FILE_WRITELN 2, " " + ad$
ewt:
END_WHILE
FILE_CLOSE 1: FILE_CLOSE 2
RETURN

Mfop:
xt = mg*lc%: yt = mh*hc%
FOR u% = LEN(f$) TO 1 STEP -1
    IF MID$(f$, u%, 1) = "\" THEN EXIT_FOR
NEXT u%
fr$ = rtemp$ + "composite.bmp"
EXECUTE_WAIT "Cmd.exe /c DIR " + LEFT$(f$, u%) + "*.jpg /B >" + fd$
FILE_OPEN_READ 1, fd$
    FOR p = 1 TO 8
        IF FILE_EOF(1) = 1 THEN EXIT_FOR
        w0 = lp-INT((mg+md)*lc%): ' largeur réelle de l'image
        FILE_READLN 1, a$: f1$ = LEFT$(f$, u%) + a$: ' image d'origine
        GOSUB Dimima: ' -> dimensions de l'image: w, h
        h0 = INT(w0*h/w)
        IF w > h
            EXECUTE_WAIT iv$+f1$+" /resize=(0,"+STR$(w0)+") /aspectratio /rotate_l /convert="+fb$
        ELSE
            EXECUTE_WAIT iv$+f1$+" /resize=("+STR$(w0)+",0) /aspectratio /convert="+fb$
        END_IF
        PICTURE 300: TOP 300, -500: HEIGHT 300, hp-1: WIDTH 300, lp-1
        FILE_SAVE 300, fr$: DELETE 300: ' image de fond (32 bpp)
        EXECUTE_WAIT iv$ + fr$ + " /bpp=24 /convert=" + fr$: ' -> 24 bpp
        fc$ = fb$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop
        tf2 = tf%: ll2 = ll%: w0 = w%: h0 = h%
        fc$ = fr$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop
        tf3 = tf%: ll3 = ll%
        FILEBIN_OPEN_READ 2, fb$: FILEBIN_OPEN_WRITE 3, fr$
        FOR j% = 0 TO h0-1
            FILEBIN_POSITION 2, tf2-(j%+1)*ll2: FILEBIN_BLOCK_READ 2, 3*w0, v%(0)
            FILEBIN_POSITION 3, tf3-(yt+j%+1)*ll3+xt*3: FILEBIN_BLOCK_WRITE 3, 3*w0, v%(0)
        NEXT j%
        FILEBIN_CLOSE 2: FILEBIN_CLOSE 3
        FILE_LOAD p, fr$
        IF nump > 0
            PRINT_TARGET_IS p
            y = 2+(nl-1)*hc%: PRINT_LOCATE lp/2-20, y: PRINT "- "+STR$(p)+" -"
        END_IF
    NEXT p
    FILE_DELETE fb$: FILE_DELETE fr$
FILE_CLOSE 1: FILE_DELETE fd$
RETURN

Ecpage:
' écriture de la page p, depuis le fichier f1$
IF eda = 2 THEN GOTO phot
2D_TARGET_IS p
2D_PEN_COLOR 192,192,192: 2D_RECTANGLE 0,0,lp,hp: ' Raz
PRINT_TARGET_IS p
FONT_BOLD_OFF p: IF gras = 1 THEN FONT_BOLD p
FONT_ITALIC_OFF p: IF ital = 1 THEN FONT_ITALIC p
FILE_OPEN_READ 1, f1$
IF p > 1
    FOR n = 1 TO (p-1)*nlu
        IF FILE_EOF(1) = 1 THEN EXIT_FOR
        FILE_READLN 1, a$
    NEXT n
END_IF
y = 2
IF mh > 0
    FOR n = 1 TO mh
        PRINT_LOCATE 2, y: PRINT ""
        y = y + hc%
    NEXT n
END_IF
FOR n = 1 TO nlu
    IF FILE_EOF(1) = 1 THEN EXIT_FOR
    FILE_READLN 1, a$
    IF mg > 0 THEN a$ = STRING$(mg, " ") + a$
    PRINT_LOCATE 2, y: PRINT a$
    y = y + hc%
NEXT n
FILE_CLOSE 1
IF mb > 0
    FOR n = 1 TO mb
        PRINT_LOCATE 2, y: PRINT ""
        y = y + hc%
    NEXT n
END_IF
IF nump > 0
    y = 2+(nl-1)*hc%: PRINT_LOCATE lp/2-20, y: PRINT "- "+STR$(p)+" -"
END_IF
EXECUTE_WAIT iv$ + fm$ + " /swap_bw /convert=" + fm$: ' meilleur contraste ?
phot:
IF sens(p) = 1
    GOSUB Vflip
END_IF
RETURN

Vflip:
' rotation de l'image de 180°
FILE_SAVE p, fm$
EXECUTE_WAIT iv$ + fm$ + " /vflip /hflip /convert=" + fm$: ' symétrie V puis H
FILE_LOAD p, fm$
RETURN

Edite:
IF f$ = "" OR FILE_EXISTS(f$) = 0 THEN RETURN
EXECUTE_WAIT "Notepad.exe " + f$
RETURN

Edr:
IF FILE_EXISTS(f1$) = 0 THEN RETURN
EXECUTE_WAIT "Notepad.exe " + f1$
GOSUB Refresh
RETURN

Imprime:
IF f$ = "" THEN RETURN
' Images pages
x = INSTR(fm$, ".")
FOR p = 1 TO 8
    fi$(p) = LEFT$(fm$, x-2) + STR$(p) + ".bmp"
    FILE_SAVE p, fi$(p)
NEXT p
' Assemblage horizontal
EXECUTE_WAIT iv$+"/panorama=(1,"+fi$(1)+","+fi$(8)+","+fi$(7)+","+fi$(6)+") /convert="+fh1$
EXECUTE_WAIT iv$+"/panorama=(1,"+fi$(2)+","+fi$(3)+","+fi$(4)+","+fi$(5)+") /convert="+fh2$
' Assemblage vertical
EXECUTE_WAIT iv$+"/panorama=(2,"+fh1$+","+fh2$+") /convert="+fp$: ' (image 1100x778)
' Découpage de la partie centrale (pour tenir compte des marges imprimante)
EXECUTE_WAIT iv$ + fp$ + " /crop=(12,12,1073,756) /convert="+fp$
FILE_OPEN_WRITE 1, fpr$
    FILE_WRITELN 1, "<#orientation=Paysage#>"
    FILE_WRITELN 1, "<#image="+fp$+",0,0,289,204#>": ' zone imprimable
FILE_CLOSE 1
x = MESSAGE_CONFIRMATION_YES_NO("Prêt pour impression ?")
IF x = 1
    EXECUTE_WAIT ip$+" /file=" + fpr$
END_IF
FILE_DELETE fh1$: FILE_DELETE fh2$
RETURN

Tailcar:
' Largeur/Hauteur des caractères, en pixels
PICTURE 300: TOP 300, -150: WIDTH 300, 900: HEIGHT 300, 100: COLOR 300, 1, 1, 1
PRINT_TARGET_IS 300: FONT_NAME 300, pol$: FONT_SIZE 300, sz
IF gras = 1 THEN FONT_BOLD 300
IF ital = 1 THEN FONT_ITALIC 300
FONT_COLOR 300,0,0,0: PRINT "12345678901234567890"
FOR x = 0 TO 799
    IF COLOR_PIXEL_RED(300,x,0) = 1 THEN EXIT_FOR
NEXT x
FOR y = 0 TO 100
    IF COLOR_PIXEL_RED(300,0,y) = 1 THEN EXIT_FOR
NEXT y
PRINT_TARGET_IS 1: DELETE 300
lc% = x/20: hc% = y
RETURN

Dimima:
EXECUTE_WAIT iv$ + f1$ + " /info=" + ff$
FILE_OPEN_READ 5, ff$
WHILE FILE_EOF(5) = 0
    FILE_READLN 5, a$
    IF LEFT$(a$, 16) = "Image dimensions"
        a$ = MID$(a$, 20, 100)
        i% = INSTR(a$, " "): w = VAL(LEFT$(a$, i%-1))
        a$ = MID$(a$, i%+3, 100): i% = INSTR(a$, " ")
        h = VAL(LEFT$(a$, i%-1))
    END_IF
END_WHILE
FILE_CLOSE 5: FILE_DELETE ff$
RETURN

Composite:
xt = mg*lc%: yt = mh*hc%
FOR u% = LEN(f$) TO 1 STEP -1
    IF MID$(f$, u%, 1) = "\" THEN EXIT_FOR
NEXT u%
fr$ = "Z:\composite.bmp"
EXECUTE_WAIT "Cmd.exe /c DIR " + LEFT$(f$, u%) + "*.jpg /B >" + fd$
FILE_OPEN_READ 1, fd$
    FOR p = 1 TO 8
        IF FILE_EOF(1) = 1 THEN EXIT_FOR
        w0 = lp-INT((mg+md)*lc%): ' largeur réelle de l'image
        FILE_READLN 1, a$: f1$ = LEFT$(f$, u%) + a$: ' image d'origine
        GOSUB Dimima: ' -> w, h
        h0 = INT(w0*h/w)
        IF w > h
            EXECUTE_WAIT iv$+f1$+" /resize=(0,"+STR$(w0)+") /aspectratio /rotate_l /convert="+fb$
        ELSE
            EXECUTE_WAIT iv$+f1$+" /resize=("+STR$(w0)+",0) /aspectratio /convert="+fb$
        END_IF
        PICTURE 300: TOP 300, -500: HEIGHT 300, hp-1: WIDTH 300, lp-1
        FILE_SAVE 300, fr$: DELETE 300: ' image de fond (32 bpp)
        EXECUTE_WAIT iv$ + fr$ + " /bpp=24 /convert=" + fr$: ' -> 24 bpp
        fc$ = fb$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop
        tf2 = tf%: ll2 = ll%: w0 = w%: h0 = h%
        fc$ = fr$: GOSUB BmpInfos: IF bpp% <> 24 THEN message str$(bpp%): stop
        tf3 = tf%: ll3 = ll%
        FILEBIN_OPEN_READ 2, fb$: FILEBIN_OPEN_WRITE 3, fr$
        FOR j% = 0 TO h0-1
            FILEBIN_POSITION 2, tf2-(j%+1)*ll2: FILEBIN_BLOCK_READ 2, 3*w0, v%(0)
            FILEBIN_POSITION 3, tf3-(yt+j%+1)*ll3+xt*3: FILEBIN_BLOCK_WRITE 3, 3*w0, v%(0)
        NEXT j%
        FILEBIN_CLOSE 2: FILEBIN_CLOSE 3
        FILE_LOAD p, fr$
        IF nump > 0
            PRINT_TARGET_IS p
            y = 2+(nl-1)*hc%: PRINT_LOCATE lp/2-20, y: PRINT "- "+STR$(p)+" -"
        END_IF
    NEXT p
    FILE_DELETE fb$: FILE_DELETE fr$
FILE_CLOSE 1: FILE_DELETE fd$
RETURN

BmpInfos:
' Lecture des données du fichier bmp fb$
' -> tf: taille fichier, w%,h%: dimensions
'    bpp%: bits par pixel, ll%: taille ligne image
FILE_OPEN_READ 5, fc$: FILE_READBUF 5, a$, 54: FILE_CLOSE 5: ' en-tête bmp
tf% = ASC(MID$(a$,3,1))+256*ASC(MID$(a$,4,1)): ' taille totale du fichier
tf% = tf% + 256*256*ASC(MID$(a$,5,1))+256*256*256*ASC(MID$(a$,6,1))
lh% = ASC(MID$(a$,11,1))+256*ASC(MID$(a$,12,1)): ' taille du header
lh% = lh% + 256*256*ASC(MID$(a$,13,1))+256*256*256*ASC(MID$(a$,14,1))
w% = ASC(MID$(a$,19,1))+256*ASC(MID$(a$,20,1)): ' largeur image, en pixels
w% = w% + 256*256*ASC(MID$(a$,21,1))+256*256*256*ASC(MID$(a$,22,1))
h% = ASC(MID$(a$,23,1))+256*ASC(MID$(a$,24,1)): ' hauteur image, en pixels
h% = h% + 256*256*ASC(MID$(a$,25,1))+256*256*256*ASC(MID$(a$,26,1))
bpp% = ASC(MID$(a$,29,1))+256*ASC(MID$(a$,30,1)): ' bits par pixel image
ll% = (tf%-lh%)/h%: ' longueur d'une ligne image, en octets
RETURN


Aide:
a$ = "Impression sous forme d'un livret de 8 pages résultant d'une feuille A4 imprimée"+chr$(10)
a$ = a$ + "sur une seule face:"+chr$(10)
a$ = a$ + "- d'un texte quelconque"+chr$(10)
a$ = a$ + "- d'un annuaire téléphonique (source de la forme Nom;Adresse;Téléphone)"+chr$(10)
a$ = a$ + "- d'une série de 8 photos maximum (une photo par page)."+chr$(10)+chr$(10)
a$ = a$ + "Le choix du fichier source se fait par clic dans la zone 'Fichier'."+chr$(10)
a$ = a$ + "Une fois définis la police de caractères, sa taille, ses enrichissements"+chr$(10)
a$ = a$ + "éventuels (gras et/ou souligné), les marges gauche, droite, haut et bas,"+chr$(10)
a$ = a$ + "la numérotation éventuelle des pages, un clic sur le bouton EXEC déclenche"+chr$(10)
a$ = a$ + "le formatage du fichier source (mise à la largeur voulue) et le découpage en"+chr$(10)
a$ = a$ + "pages, puis l'affichage sur l'aperçu de la feuille telle qu'elle sera imprimée."+chr$(10)
a$ = a$ + "On peut alors modifier les paramètres de départ à sa convenance, puis recliquer"+chr$(10)
a$ = a$ + "sur le bouton EXEC pour voir l'effet des modifications."+chr$(10)+chr$(10)
a$ = a$ + "Dans le cas de photos, on choisit (clic dans la zone Fichier) une image quelconque"+chr$(10)
a$ = a$ + "dans un répertoire, les 8 images choisies seront les 8 premières images de ce"+chr$(10)
a$ = a$ + "répertoire. Les paramètres marges s'appliquent, les images étant entourées d'une"+chr$(10)
a$ = a$ + "bordure blanche correspondant aux marges choisies."+chr$(10)+chr$(10)
a$ = a$ + "Nota: les marges s'expriment en nombre de caractères suivant la police choisie et"+chr$(10)
a$ = a$ + "sa taille (gauche et droite), ou de lignes (haut et bas)."+chr$(10)+chr$(10)
a$ = a$ + "Impression: clic le bouton 'Imprimer' (demande de confirmation)."+chr$(10)+chr$(10)
a$ = a$ + "Mise en livret (pliage):"+chr$(10)
a$ = a$ + "- Replier en deux la feuille imprimée dans le sens de la longueur, texte à l'extérieur."+chr$(10)
a$ = a$ + "- Déplier, puis replier en deux dans le sens de la largeur, texte à l'extérieur."+chr$(10)
a$ = a$ + "- Plier les deux moitiés obtenues dans le sens de la largeur, texte à l'intérieur."+chr$(10)
a$ = a$ + "Bien marquer les plis, puis pratiquer au cutter une incision dans le pli du milieu,"+chr$(10)
a$ = a$ + "sens de la longueur, limitée à la moitié de la feuille (entre les pages 3/4 et 7/8)."+chr$(10)
a$ = a$ + "Puis replier le tout suivant les plis, de façon à avoir les pages qui se suivent."+chr$(10)
a$ = a$ + "(on peut mettre une bande de colle - stick - entre les bords des pages 1 et 2, et 5 et 6,"+chr$(10)
a$ = a$ + "pour les solidariser)."+chr$(10)
MESSAGE a$
RETURN



Dernière édition par JL35 le Lun 11 Avr 2011 - 18:17, édité 4 fois
Revenir en haut Aller en bas
Klaus

Klaus


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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMar 5 Avr 2011 - 23:00

Ingénieux ! Bravo !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMar 5 Avr 2011 - 23:04

Très bonne idée !!!
Bravo ! Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMar 5 Avr 2011 - 23:07

Merci les amis ! ça réagit vite ce soir ! Very Happy
Revenir en haut Aller en bas
Polaris




Nombre de messages : 69
Date d'inscription : 03/04/2011

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMer 6 Avr 2011 - 0:02

Et pourquoi un petit book d'instruction Panoramic a emmener partout!

Il fallait y pense quand même!!

trop fun! Surprised
Revenir en haut Aller en bas
Yannick




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

Un petit livret Empty
MessageSujet: re   Un petit livret EmptyMer 6 Avr 2011 - 1:18

Génial !

quoique , je prendrai plutôt la version francaise
lol!



cheers cheers cheers
Revenir en haut Aller en bas
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMer 6 Avr 2011 - 18:01

Une petite modif, la possibilité de mise en forme
- soit d'un fichier texte normal, mais sa longueur ne doit pas dépasser 8 petites pages (le reste ne sera pas imprimé).
- soit d'un fichier annuaire téléphonique dont les articles sont de la forme: Nom;Adresse;Téléphone, par exemple:
Citation :
...
BONAPARTE Napoléon;12 rue Malmaison 12345 RUEIL;01 02 03 04 05
- Portable;06 07 08 09 01
- portable Joséphine;06 05 04 03 02
SEIZE Louis;Château de 78000 VERSAILLES;12 34 56 78 90
...
sera imprimé:
Un petit livret Exemple
chaque champ est facultatif, et peut être vide ou omis.
De même, la taille est limitée aux 8 premières pages.

J'ai également ajouté la possibilité d'éditer le fichier résultat, toujours pour ajustements.



Dernière édition par JL35 le Mer 6 Avr 2011 - 21:11, édité 1 fois
Revenir en haut Aller en bas
659_minifly




Nombre de messages : 590
Age : 75
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMer 6 Avr 2011 - 19:03

super Jl35.
Cela me rappel les minis bandes-dessinées de spirou. bravo pour cette superbe idée.
Revenir en haut Aller en bas
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyMer 6 Avr 2011 - 21:01

Merci, eh oui Spirou, comme le temps passe...
on pourrait bien sûr y mettre aussi des images, mais a priori je n'en vois pas trop l'intérêt !
Revenir en haut Aller en bas
jjn4

jjn4


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

Un petit livret Empty
MessageSujet: +++   Un petit livret EmptyMer 6 Avr 2011 - 23:23

Bon sang, je ne savais pas que Napoléon s'était retiré à Rueil !
Ils disent n'importe quoi, dans les livres d'histoire !
Laughing
Bonne astuce !!!
king
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyJeu 7 Avr 2011 - 18:34

Ca s'étoffe un peu (trop ?). Il y a affichage de la police, de sa taille, de la taille des caractères en mm, du nombre de lignes et de colonnes possible par mini-page en fonction de la police.
Et possibilité de changer de police et de taille, en cliquant sur le champ correspondant, pour voir l'effet produit (en recliquant sur Exec).
Il semble préférable de se cantonner aux polices à pas fixe, mais on peut essayer n'importe quelle autre, pour voir ce que ça donne. Dans ce cas les dimensions calculées sont très approximatives et supérieures à la réalité pour la largeur.
Revenir en haut Aller en bas
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyVen 8 Avr 2011 - 23:10

J'ai ajouté pour mon usage personnel la possibilité de faire un livret de 8 images maxi (photos), mais je ne l'ai pas intégrée dans le source là-haut, pour plusieurs raisons:
- le programme commence à prendre de l'embonpoint (500 lignes)...
- surtout, j'utilise pour ça une autre ressource externe: composite.exe, qui est un module d'ImageMagick (gratuit), et dont je me sers pour ajouter un cadre blanc autour des images (pour préserver les marges).
- et je ne suis pas sûr que ça intéresse grand monde... Very Happy
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptySam 9 Avr 2011 - 6:45

franchement c'est ce qu'on appelle: UN utilitaire !
bien pratique ! Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptySam 9 Avr 2011 - 10:37

Bonjour Nardo, et merci !
Crois-tu que je doive mettre la dernière version (édition de photos) ? ça m'embête un peu, car si on veut utiliser cette fonctionnalité il faut avoir installé ImageMagick, ça commence à faire beaucoup de ressources externes nécessaires...
A moins que je trouve une combine Panoramic pour créer des marges autour des images...

PS j'ai une idée pour le faire en Panoramic (donc sans ImageMagick), il suffit de demander, mais pas le temps de la mettre en pratique pour le moment... patience.
Revenir en haut Aller en bas
Invité
Invité




Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptySam 9 Avr 2011 - 19:31

bien imaginé
Revenir en haut Aller en bas
JL35




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

Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret EmptyLun 11 Avr 2011 - 18:22

Voilà, on peut maintenant faire de la même façon un petit livret de 8 images (photos).
J'ai galéré comme un malade pour faire en Panoramic l'incrustation d'une image bitmap dans une autre (en fait incrustation d'une image dans une image blanche, pour avoir des bordures), pour pouvoir se passer de imageMagick, et ça a l'air de marcher.
Et ça peut servir pour d'autres applications amusantes, entre autres ajouter un cadre à une photo, etc. (c'est le s/p Mfop).
J'ai ajouté également une petite aide.

Le programme a pris un peu d'ampleur (près de 600 lignes), mais on n'a rien sans rien ! Smile
Revenir en haut Aller en bas
Contenu sponsorisé





Un petit livret Empty
MessageSujet: Re: Un petit livret   Un petit livret Empty

Revenir en haut Aller en bas
 
Un petit livret
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Petit plus sur le mag
» petit truc
» Un petit explorateur
» Un petit éphéméride
» Petit Questionnaire

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: