FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Le Forum est en vacances.
par JL35 Aujourd'hui à 21:20

» Une autre façon de terminer une application.
par JL35 Hier à 14:27

» Compilateur FBPano
par Mike Lun 21 Aoû 2017 - 23:17

» Pb 20 (en analyse): plantage à l'appel d'un SUB
par Jack Lun 21 Aoû 2017 - 21:58

» Pb 19 (en analyse): libellé d'erreur dans des IF imbriqués
par Jack Lun 21 Aoû 2017 - 21:55

» Copier / coller du texte à partir de la fenêtre de commandes
par jean_debord Lun 21 Aoû 2017 - 9:46

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par papydall Lun 21 Aoû 2017 - 5:01

» Mettre en windows en veille
par papydall Lun 21 Aoû 2017 - 4:15

» Stretch_on ne stretch plus...
par papydall Dim 20 Aoû 2017 - 15:22

» Pb 18 (en analyse): RESTORE_LABEL avec DATA à la fin
par Jack Dim 20 Aoû 2017 - 13:21

» Problème de traitement des opérateurs avec le compilateur.
par Pedro Alvarez Sam 19 Aoû 2017 - 20:01

» Pb 17 (résolu): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (résolu): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Planches d'étiquettes

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



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

MessageSujet: Planches d'étiquettes   Dim 28 Aoû 2016 - 18:05

En attendant que tout le monde soit remonté de la plage, encore un programme d'impression de planches d'étiquettes, avec un peu plus de possibilités que le précédent.
Ça peut être des étiquettes, mais aussi des cartes de visite, pourquoi pas:
Code:

' Création et impression de planches d'étiquettes ou de cartes de visite
LABEL Quit,Pec,Chp,Chc,Chcoul,Chcoul1,Chi,Exec,Apercu,Apercf,Imprime,Gril
DIM a$,b$,i%,j%,t%,n%,r%,g%,b%,lc%,lf%,PA4%,PMo%,fnt$,sz%,attr%,coul%,ang%
DIM x%,y%,db%(10),di%(10),wp%,hp%,wt%,ht%,fi$,fm$,nt%,ni%
DIM mg%,mh%,eh%,ev%,nc%,nr%,txt%,gr%,pas%,ima%(10),wi%,hi%
DIM Feu%,Fet%,Fpo%,Fco%,Btf%,img%,od%,opt%
DLL_ON "C:\PANORAMIC\KGF\KGF.dll": ' <========== À AJUSTER ! ==========
fm$ = "C:\TEMP\Img.bmp":          ' <========== À AJUSTER ! ==========
gr% = 0: ' grille
pas% = 20: ' pas de la grille repère
Winbord(): ' dimensions des bordures (variables suivant l'OS: W7, W8 ou W10)

TOP 0,200: WIDTH 0,490: HEIGHT 0,700: FONT_NAME 0,"Arial": FONT_BOLD 0: BORDER_SMALL 0
          CAPTION 0,"  -  PLANCHE  D' ÉTIQUETTES  (A4)  -"
          COLOR 0,180,255,255
CONTAINER 9: TOP 9,0: LEFT 9,0: WIDTH 9,WIDTH(0)-2*wbb%: HEIGHT 9,120: COLOR 9,200,255,255
ALPHA 10: PARENT 10,9: TOP 10,5: LEFT 10,50
          CAPTION 10,"      Dimensions"+CHR$(10)+"  d'une étiquette:"+CHR$(10)+"(valeurs entières)"
SPIN 11: PARENT 11,9: TOP 11,TOP(10)+8: LEFT 11,LEFT(10)+110: WIDTH 11,55
ALPHA 12: PARENT 12,9: TOP 12,TOP(11)+3: LEFT 12,LEFT(11)+WIDTH(11)+5
          CAPTION 12,"x                      mm"
SPIN 13: PARENT 13,9: TOP 13,TOP(11): LEFT 13,LEFT(12)+15: WIDTH 13,WIDTH(11)
BUTTON 15: PARENT 15,9: TOP 15,TOP(11): LEFT 15,LEFT(13)+90: WIDTH 15,50: CAPTION 15,"OK"
          ON_CLICK 15,Pec
ALPHA 16: PARENT 16,9: TOP 16,TOP(15)+24: LEFT 16,LEFT(11)

ALPHA 20: PARENT 20,9: TOP 20,72: LEFT 20,5
          CAPTION 20,"Planche A4:": FONT_SIZE 20,10: COLOR 20,255,255,0
ALPHA 21: PARENT 21,9: TOP 21,TOP(20)-10: LEFT 21,90
          a$ = "Marges (mm) Gauche=                    Haut=                  "
          CAPTION 21,a$
SPIN 22: PARENT 22,9: TOP 22,TOP(21)-3: LEFT 22,LEFT(21)+130: WIDTH 22,50: ' marge gauche
SPIN 23: PARENT 23,9: TOP 23,TOP(22): LEFT 23,LEFT(22)+90: WIDTH 23,50: ' marge haut
ALPHA 24: PARENT 24,9: TOP 24,TOP(21)+28: LEFT 24,LEFT(21)
          CAPTION 24,"Espacements    Horiz.=                    Vert.="
SPIN 25: PARENT 25,9: TOP 25,TOP(24)-3: LEFT 25,LEFT(22): WIDTH 25,50: ' espacement horizontal
SPIN 26: PARENT 26,9: TOP 26,TOP(25): LEFT 26,LEFT(23): WIDTH 26,50: ' espacement vertical
BUTTON 30: PARENT 30,9: TOP 30,TOP(23): LEFT 30,LEFT(26)+70: CAPTION 30,"Aperçu"
          ON_CLICK 30,Apercu
BUTTON 31: PARENT 31,9: TOP 31,TOP(26): LEFT 31,LEFT(30): CAPTION 31,"Imprimer"
          ON_CLICK 31,Imprime
   
' Feuille complète, à imprimer
Feu% = 40
i% = Feu%: FORM i%: HIDE i%: BORDER_HIDE i%: TOP i%,0: LEFT i%,WIDTH(0): WIDTH i%,778
          HEIGHT i%,1100+25: FONT_BOLD i%: COLOR i%,128,64,0
i%=i%+1: PICTURE i%: PARENT i%,Feu%: TOP i%,25: WIDTH i%,778: HEIGHT i%,1100: PA4% = i%
i%=i%+1: BUTTON i%: PARENT i%,Feu%: TOP i%,0: LEFT i%,WIDTH(Feu%)/2-100
        CAPTION i%,"Imprimer": ON_CLICK i%,Imprime
i%=i%+1: BUTTON i%: PARENT i%,Feu%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(Feu%)/2+5
        CAPTION i%,"Fermer": ON_CLICK i%,Apercf

' Éléments à intégrer dans l'étiquette
i% = 50: t% = 135: n% = 0
ALPHA i%: TOP i%,t%-18: LEFT i%,0: FONT_SIZE i%,10: COLOR i%,255,255,0
          CAPTION i%," TEXTES: "
i%=i%+1: ALPHA i%: TOP i%,t%-15: LEFT i%,338: FONT_COLOR i%,0,0,255
        CAPTION i%,"PIXELS  CENTRÉ  ANGLE"
nt% = 8: ' ===== Nombre maximum de lignes de texte (modulable)  =====
FOR n% = 1 TO nt%: ' TEXTES
  i%=i%+1: db%(n%) = i%: ALPHA i%: TOP i%,t%: LEFT i%,2
          CAPTION i%,"Ligne "+STR$(n%)+":"
  i%=i%+1: EDIT i%: TOP i%,TOP(i%-1)-3: LEFT i%,50: WIDTH i%,275: ' +1 texte
          FONT_BOLD_OFF i%: FONT_SIZE i%,10: COLOR i%,255,255,180
  i%=i%+1: EDIT i%: TOP i%,TOP(i%-1)+25: LEFT i%,LEFT(i%-1): WIDTH i%,120: TEXT i%,"Arial"
          ON_CLICK i%,Chp: ' +2 fonte
  i%=i%+1: SPIN i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1): WIDTH i%,40
          MIN i%,5: MAX i%,38: POSITION i%,10: ' +3 taille
  i%=i%+1: CHECK i%: TOP i%,TOP(i%-1): WIDTH i%,25: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+3
          CAPTION i%,"G": FONT_BOLD i%: ' +4 gras
  i%=i%+1: CHECK i%: TOP i%,TOP(i%-1): WIDTH i%,25: LEFT i%,LEFT(i%-1)+28: CAPTION i%,"I"
          FONT_ITALIC i%: ' +5 italique
  i%=i%+1: CHECK i%: TOP i%,TOP(i%-1): WIDTH i%,25: LEFT i%,LEFT(i%-1)+28: CAPTION i%,"S"
          FONT_UNDERLINE i%: ' +6 souligné
  i%=i%+1: PICTURE i%: TOP i%,TOP(i%-1): WIDTH i%,25: HEIGHT i%,20: LEFT i%,LEFT(i%-1)+30
          COLOR i%,0,0,0: ON_CLICK i%,Chcoul: ' +7 couleur
  i%=i%+1: ALPHA i%: TOP i%,t%-1: LEFT i%,328: CAPTION i%,"X="+CHR$(10)+CHR$(10)+"Y="
  i%=i%+1: SPIN i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+14: WIDTH i%,45: ' +9 x
  i%=i%+1: SPIN i%: TOP i%,TOP(i%-1)+23: LEFT i%,LEFT(i%-1): WIDTH i%,WIDTH(i%-1): ' +10 y
  i%=i%+1: CHECK i%: TOP i%,TOP(i%-2)+5: WIDTH i%,30: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+5
          CAPTION i%,"H": ' +11 centré H
  i%=i%+1: CHECK i%: TOP i%,TOP(i%-2)+3: WIDTH i%,WIDTH(i%-1): LEFT i%,LEFT(i%-1)
            CAPTION i%,"V": j% = i%: ' +12 centré V
  i%=i%+1: CONTAINER_OPTION i%: TOP i%,TOP(i%-2)-7: LEFT i%,LEFT(i%-1)+35: WIDTH i%,40
          HEIGHT i%,50: COLOR i%,200,255,255: opt% = i%: ' +13 options d'orientation
  i%=i%+1: OPTION i%: PARENT i%,opt%: TOP i%,2: LEFT i%,4: CAPTION i%,"0°": MARK_ON i%
  i%=i%+1: OPTION i%: PARENT i%,opt%: TOP i%,TOP(i%-1)+14: LEFT i%,4: CAPTION i%,"45°"
  i%=i%+1: OPTION i%: PARENT i%,opt%: TOP i%,TOP(i%-1)+14: LEFT i%,4: CAPTION i%,"90°"
  t% = t% + 52
NEXT n%
i%=i%+1: ALPHA i%: TOP i%,t%: LEFT i%,0: FONT_SIZE i%,10: COLOR i%,255,255,0
        CAPTION i%," IMAGES: "
t% = t%+18
ni% = 2: ' ===== nombre maximum d'images (modulable) =====
FOR n% = 1 TO ni%: ' IMAGES
  i%=i%+1: di%(n%) = i%: ALPHA i%: TOP i%,t%: LEFT i%,2
          CAPTION i%,"Image "+STR$(n%)+":"
  i%=i%+1: EDIT i%: di%(n%)=i%: TOP i%,TOP(i%-1)-3: LEFT i%,50: WIDTH i%,230
          FONT_BOLD_OFF i%: FONT_SIZE i%,9: COLOR i%,255,255,180: ima%(n%) = i%
          ON_CLICK i%,Chi
  i%=i%+1: ALPHA i%: TOP i%,TOP(i%-1)+5: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+2
          COLOR i%,200,255,255: ' dimensions
  i%=i%+1: ALPHA i%: TOP i%,TOP(i%-1)-2: LEFT i%,LEFT(i%-2)+WIDTH(i%-2)+70
          CAPTION i%,"X=                Y="
  i%=i%+1: SPIN i%: TOP i%,TOP(i%-3): LEFT i%,LEFT(i%-1)+14: WIDTH i%,45
  i%=i%+1: SPIN i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+60: WIDTH i%,WIDTH(i%-1)
  t% = t% + 27
NEXT n%
HEIGHT 0,230+nt%*52+ni%*27
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+30: LEFT i%,WIDTH(0)/2-80: CAPTION i%,"Appliquer"
        ON_CLICK i%,Exec
i%=i%+1: OPEN_DIALOG i%: od% = i%

' Aperçu de l'étiquette type
Fet% = 249
i% = Fet%: FORM i%: HIDE i%: BORDER_HIDE i%: TOP i%,0: LEFT i%,LEFT(0)+5
          COLOR i%,255,148,148
i%=i%+1: PICTURE i%: PARENT i%,Fet%: TOP i%,wbh%: LEFT i%,wbb%: PMo% = i%
i%=i%+1: ALPHA i%: PARENT i%,Fet%: TOP i%,5: LEFT i%,10: FONT_SIZE i%,12: FONT_BOLD i%
        CAPTION i%,"ÉTIQUETTE TYPE :"
i%=i%+1: BUTTON i%: PARENT i%,Fet%: TOP i%,2: WIDTH i%,130: LEFT i%,WIDTH(Fet%)-135
        CAPTION i%,"Grille "+STR$(pas%)+" pixels (On/Off)": ON_CLICK i%,Gril
i%=i%+1: IMAGE i%: img% = i%

position 11,99: position 13,38: GOSUB Pec: ' étiquettes Laser 99x38 mm (Avery)
position 22,5: position 23,15: position 25,2: position 26,0

' Choix de la police de caractères
Fpo% = 300
FORM Fpo%: HIDE Fpo%: BORDER_HIDE Fpo%: TOP Fpo%,TOP(0): LEFT Fpo%,LEFT(0)+WIDTH(0)
          HEIGHT Fpo%,HEIGHT(0): WIDTH Fpo%,138
i%=Fpo%+1: LIST i%: PARENT i%,Fpo%: FULL_SPACE i%
          FONT_NAMES_LOAD i%: ON_CLICK i%,Chc
   
' Choix de la couleur du texte
Fco% = 400
lc% = 25: lf% = 2
i%=Fco%: FORM i%: HIDE i%: BORDER_SMALL i%: TOP i%,TOP(0): LEFT i%,LEFT(0)+WIDTH(0)
        WIDTH i%,lc%*2+wbb%*2+6: HEIGHT i%,lc%*4+10+wbh%+wbb%
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,2: LEFT i%,lf%: WIDTH i%,lc%: HEIGHT i%,lc%
        COLOR i%,0,0,0
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+lc%+2
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,255,255,255
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-2)+lc%+2: LEFT i%,lf%
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,255,0,0
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-1): LEFT i%,lf%+lc%+2
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,0,255,0
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-2)+lc%+2: LEFT i%,lf%
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,0,0,255
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-1): LEFT i%,lf%+lc%+2
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,128,0,128
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-2)+lc%+2: LEFT i%,lf%
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,0,128,128
i%=i%+1: PICTURE i%: PARENT i%,Fco%: TOP i%,TOP(i%-1): LEFT i%,lf%+lc%+2
        WIDTH i%,lc%: HEIGHT i%,lc%: COLOR i%,128,64,0
FOR j% = Fco% TO i%: ON_CLICK j%,Chcoul1: NEXT j%

Btf% = 500
BUTTON Btf%: TOP Btf%,HEIGHT(0)-60: LEFT Btf%,WIDTH(0)-95: CAPTION Btf%,"Quitter"
    ON_CLICK Btf%,Quit
' ==============================================================================
END: ' =========================================================================
'===============================================================================
Quit:
DLL_OFF
TERMINATE
'===============================================================================
Pec:
wp% = POSITION(11)*3.7: hp% = POSITION(13)*3.7: ' dimensions en pixels à l'écran
CAPTION 16,"  =    "+STR$(wp%)+"    x    "+STR$(hp%)+" pixels."
WIDTH Fet%,wp%+2*wbb%: HEIGHT Fet%,hp%+wbh%+wbb%
WIDTH PMo%,wp%: HEIGHT Pmo%,hp%
CAPTION Fet%,"  Étiquette  "+STR$(POSITION(11))+" x "+STR$(POSITION(13))+" mm."
TOP Fet%,0: TOP 0,HEIGHT(Fet%)
LEFT PMo%+2,WIDTH(Fet%)-WIDTH(PMo%+2)-5
SHOW Fet%: TO_FOREGROUND Fet%
RETURN
'===============================================================================
Chp:
' choix police
i% = NUMBER_CLICK
SHOW Fpo%
RETURN
'===============================================================================
Chc:
' polioce cliqueée
a$ = ITEM_INDEX$(Fpo%+1): TEXT i%,a$
FONT_NAME i%-1,a$
HIDE Fpo%
RETURN
'===============================================================================
Chcoul:
' choix couleur
i% = NUMBER_CLICK
SHOW Fco%
RETURN
' ==============================================================================
Chcoul1:
' couleur cliquée
j% = NUMBER_CLICK
x% = MOUSE_X_LEFT_DOWN(j%): y% = MOUSE_Y_LEFT_DOWN(j%)
r% = COLOR_PIXEL_RED(j%,x%,y%): g% = COLOR_PIXEL_GREEN(j%,x%,y%)
b% = COLOR_PIXEL_BLUE(j%,x%,y%)
COLOR i%,r%,g%,b%
HIDE Fco%
RETURN
' ==============================================================================
Chi:
i% = NUMBER_CLICK
a$ = FILE_NAME$(od%): IF LEN(a$)<5 THEN RETURN
IF FILE_EXISTS(a$) = 0 THEN RETURN
b$ = UPPER$(FILE_EXTRACT_EXTENSION$(a$)): IF b$<>".BMP" AND b$<>".JPG" THEN RETURN
TEXT i%,a$
DimJpgBmp(a$)
CAPTION i%+1,"("+STR$(wi%)+" x "+STR$(hi%)+")"
RETURN
' ==============================================================================
Exec:
' Création d'une étiquette, 10 éléments (lignes) maxi
SHOW Fet%
PRINT_TARGET_IS PMo%: 2D_TARGET_IS PMo%: CLS
fi$ = ""
FOR i% = 1 TO ni%
    a$ = TEXT$(ima%(i%))
    IF LEN(a$) > 7: ' image à insérer
        fi$ = a$
        PICTURE 1000: HIDE 1000: FILE_LOAD 1000,fi$: CLIPBOARD_COPY 1000: DELETE 1000
        CLIPBOARD_PASTE img%
        x% = POSITION(ima%(i%)+3): y% = POSITION(ima%(i%)+4)
        2D_IMAGE_PASTE img%,x%,y%
    END_IF
NEXT i%
txt% = 0
FOR n% = 1 TO nt%
    i% = db%(n%)
    a$ = TEXT$(i%+1)
    IF a$ <> ""
        txt% = txt%+1
        fnt$ = TEXT$(i%+2): sz% = POSITION(i%+3)
        x% = POSITION(i%+9): y% = POSITION(i%+10)
        PRINT_TARGET_IS Pmo%: FONT_NAME Pmo%,fnt$: FONT_SIZE Pmo%,sz%
        wt% = TEXT_WIDTH(a$,PMo%): ht% = TEXT_HEIGHT(a$,PMo%)
        IF CHECKED(i%+11) = 1 THEN x% = (wp%-wt%)/2: POSITION i%+9,x%: ' centré H
        IF CHECKED(i%+12) = 1 THEN y% = (hp%-ht%)/2: POSITION i%+10,y%: ' centré V
        r% = COLOR_PIXEL_RED(i%+7,5,5): g% = COLOR_PIXEL_GREEN(i%+7,5,5)
        b% = COLOR_PIXEL_BLUE(i%+7,5,5): coul% = 65536*b%+256*g%+r%: ' format BGR
        attr% = 0: IF CHECKED(i%+4) = 1 THEN attr% = 1: ' gras
        IF CHECKED(i%+5) = 1 THEN attr% = attr%+2: ' italiques
        IF CHECKED(i%+6) = 1 THEN attr% = attr%+4: ' souligné
        ang% = 0: IF CHECKED(i%+15) = 1 THEN ang% = 45: ' inclinaison
        IF CHECKED(i%+16) = 1 THEN ang% = 90
        Text2Pic(PMo%,a$,x%,y%,fnt$,sz%,attr%,coul%,ang%)
    END_IF
NEXT n%
RETURN
' ==============================================================================
Apercu:
wp% = POSITION(11)*3.7: hp% = POSITION(13)*3.7: ' dimensions en pixels à l'écran
mg% = POSITION(22)*3.7: mh% = POSITION(23)*3.7: ' marges gauche et haut en pixels
eh% = POSITION(25)*3.7: ev% = POSITION(26)*3.7: ' espacement H et V en pixels
2D_TARGET_IS PA4%: CLS: 2D_PEN_DOT: 2D_PEN_COLOR 96,96,96
x% = mg%: y% = mh%: nr% = 0
WHILE (y%+hp%) < HEIGHT(PA4%)
    nr% = nr%+1: nc% = 0
    2D_RECTANGLE x%,y%,x%+wp%,y%+hp%: nc% = nc%+1: x% = x%+wp%+eh%
    WHILE (x%+wp%) < WIDTH(PA4%)
        2D_RECTANGLE x%,y%,x%+wp%,y%+hp%: nc% = nc%+1: x% = x%+wp%+eh%
    END_WHILE
    x% = mg%: y% = y%+hp%+ev%
END_WHILE
IF txt% > 0 OR fi$ <> "": ' texte ou image'
    CLS
    ' Transfert de l'étiquette type dans l'image de la feuille A4
    j% = 0: IF gr% = 1 THEN j% = 1: GOSUB Gril: ' effacement de la grille
    CLIPBOARD_COPY PMo%: ' modèle préparé
    IF j% = 1 THEN GOSUB Gril: ' rétablissement de la grille sur le specimen
    CLIPBOARD_PASTE img%
    2D_TARGET_IS PA4%
    y% = mh%
    FOR j% = 1 TO nr%
        x% = mg%
        FOR i% = 1 TO nc%: 2D_IMAGE_PASTE img%,x%,y%: x% = x%+wp%+eh%: NEXT i%
        y% = y%+hp%+ev%
    NEXT j%
END_IF
SHOW Feu%
RETURN
'===============================================================================
Apercf:
HIDE Feu%
RETURN
' ==============================================================================
Imprime:
FILE_SAVE PA4%,fm$: ' temporaire
Pr_init(0,"")
Pr_Image(fm$,0,0,Pr_lt%,Pr_ht%,0)
Pr_Impr()
FILE_DELETE fm$
RETURN
' ==============================================================================
Gril:
IF gr% = 0
    2D_TARGET_IS PMo%: 2D_PEN_COLOR 164,164,164
    FOR j% = pas% TO HEIGHT(PMo%) STEP pas%
        2D_LINE 0,j%,WIDTH(PMo%),j%
    NEXT j%
    FOR i% = pas% TO WIDTH(PMo%) STEP pas%
        2D_LINE i%,0,i%,HEIGHT(PMo%)
    NEXT i%
    gr% = 1
ELSE
    GOSUB Exec: gr% = 0
END_IF
RETURN
' ==============================================================================
SUB Winbord()
' Dimensions des bordures de fenêtres Windows
' wbh%: bordure haut, wbb%: bordures bas et latérales
' à appeler juste après la définition des caractéristiques du Form 0
IF VARIABLE("wbh%") = 0 THEN DIM wbh%: ' bordure haut
IF VARIABLE("wbb%") = 0 THEN DIM wbb%: ' bordure bas et latérales
PICTURE 971: FULL_SPACE 971
wbb% = (WIDTH(0)-WIDTH(971))/2: ' bordures latérales (chacune)
wbh% = HEIGHT(0)-HEIGHT(971)-wbb%: ' bordure haut (bas = latérale)
DELETE 971
END_SUB
' ==============================================================================
SUB DimJpgBmp(f$)
  ' Image JPG ou BMP exclusivement, dimensions dans wi% et hi%
  DIM_LOCAL fm$: fm$ = "Z:\Provy.bmp"
  PICTURE 1099: HIDE 1099: FILE_LOAD 1099,f$: FILE_SAVE 1099,fm$: DELETE 1099
  FILEBIN_OPEN_READ 1,fm$
      FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
  FILEBIN_CLOSE 1
  FILE_DELETE fm$
END_SUB
' ==============================================================================
SUB Text2Pic(p%,txt$,x%,y%,fnt$,sz%,attr%,coul%,ang%)
' Affichage du texte txt$ (1 ligne) sur l'objet p%, en position x%,y%
' police fnt$, taille sz% (maximum 63), attributs attr% (= B=1, I=2, U=4, S=8)
' couleur coul% au format BGR (=(256*B + G)*256 + R).
' angle d'inclinaison ang% en degrés (rotation sens trigonométrique)
DIM_LOCAL hnd%,pos%,res%
res% = attr%
attr% = attr% + sz%*24 + ang%*65536
HIDE p%: ' sinon affichage du texte perturbé ou absent
hnd% = HANDLE_CANVAS(p%)
pos% = x% + 65536*y%
res% = DLL_CALL6("WriteTextOverPicture",hnd%,pos%,ADR(txt$),ADR(fnt$),attr%,coul%)
SHOW p%
END_SUB
'===============================================================================
SUB TextM2Pic(p%,txt$,x%,y%,fnt$,sz%,attr%,coul%)
' Affichage du texte txt$ sur l'objet p%, en position x%,y%
' police fnt$, taille sz% (maximum 63), attributs attr% (= B=1, I=2, U=4, S=8)
' couleur coul% au format BGR (=(256*B + G)*256 + R).
' Le texte peut faire plusieurs lignes, séparées par des RC/AL= &hOD0A
IF LABEL("L2pz") = 0 THEN LABEL L2pz
DIM_LOCAL a$,hnd%,ht%,k%,pos%,res%,crlf$ : crlf$ = CHR$(13)+CHR$(10)
FONT_SIZE p%,sz%
ht% = .65*TEXT_HEIGHT("ABCjkl",p%): ' hauteur texte
attr% = attr% + sz%*24
HIDE p%: ' sinon, affichage du texte perturbé ou absent
hnd% = HANDLE_CANVAS(p%)
k% = INSTR(txt$,crlf$): ' si multiligne
L2pz:
IF k% > 0
    a$ = LEFT$(txt$, k%-1): txt$ = RIGHT_POS$(txt$,k%+2)
    pos% = x% + 65536*y%
    res% = DLL_CALL6("WriteTextOverPicture",hnd%,pos%,ADR(a$),ADR(fnt$),attr%,coul%)
    y% = y% + ht%: k% = INSTR(txt$,crlf$): GOTO L2pz
END_IF
pos% = x% + 65536*y%
res% = DLL_CALL6("WriteTextOverPicture",hnd%,pos%,ADR(txt$),ADR(fnt$),attr%,coul%)
SHOW p%
END_SUB
' ==============================================================================
SUB Pr_init(orient%,prn$)
' Initialisation imprimante ('début d'impression')
' orient% = 0 Portrait, = 1 Paysage
' prn$ = "": imprimante par défaut
'            sinon nom de l'imprimante (pour essais)
'            par exemple "Microsoft XPS Document Writer" impression virtuelle
'            dans un fichier .XPS
' Dans les paramètres des fonctions, le positionnement initial doit être fait en
' valeurs absolues: distances par rapport aux bords gauche et haut de la feuille
' A4, sans tenir compte des marges non imprimables.
' Les couleurs sont à exprimer au format BGR (en non pas RGB): B*256*256+G*256+R
' DLL_ON "C:\PANORAMIC\KGF\KGF.dll"
IF VARIABLE("phnd%") = 0 THEN DIM phnd%
IF VARIABLE("chnd%") = 0 THEN DIM chnd%
IF VARIABLE("inip%") = 0 THEN DIM inip%
IF VARIABLE("Pr_res%") = 0 THEN DIM Pr_res%
IF VARIABLE("Pr_px%") = 0 THEN DIM Pr_px%: ' pixels par mm (600 dpi)
IF VARIABLE("Pr_lt%") = 0 THEN DIM Pr_lt%: ' largeur totale
IF VARIABLE("Pr_ht%") = 0 THEN DIM Pr_ht%: ' hauteur totale
IF VARIABLE("Pr_mg%") = 0 THEN DIM Pr_mg%: ' marge gauche
IF VARIABLE("Pr_mh%") = 0 THEN DIM Pr_mh%: ' marge haut
IF VARIABLE("Pr_lu%") = 0 THEN DIM Pr_lu%: ' largeur utile
IF VARIABLE("Pr_hu%") = 0 THEN DIM Pr_hu%: ' hauteur utile
IF prn$ <> "": ' pour essais sans impression réelle
    Pr_res%=DLL_CALL4("PrinterManager",10,ADR(phnd%),ADR(chnd%),ADR(prn$))
END_IF
' Orientation portrait (0) ou paysage (1)
Pr_res% = DLL_CALL4("PrinterManager",4,ADR(phnd%),ADR(chnd%),orient%): ' orientation
Pr_res% = DLL_CALL4("PrinterManager",1,ADR(phnd%),ADR(chnd%),0): ' init
' Dimensions sans les marges, en pixels:
' ==========
' ATTENTION: Les dimensions sont actualisées en fonction de l'option orientation !
' ==========
Pr_lt% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),3,0,0): ' largeur totale
Pr_ht% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),4,0,0): ' hauteur totale
IF orient% = 0
    Pr_px% = Pr_ht%/297: ' pixels par mm, à l'impression en 600 dpi
ELSE
    Pr_px% = Pr_lt%/297: ' idem (paysage)
END_IF
' Marges non imprimables: décalage en pixels à soustraire gauche et haut:
Pr_mg% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),1,0,0): ' marge gauche
Pr_mh% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),2,0,0): ' marge haut
' Dimensions utiles, en pixels:
IF Pr_mg% = 0 OR Pr_mh%= 0: ' cas imprimante virtuelle (PDFCreator)
    Pr_mg% = 75: Pr_mh% = 75: ' forçage comme imprimante réelle
    Pr_lu% = Pr_lt% - 2*Pr_mg%: Pr_hu% = Pr_ht% - 2*Pr_mh%
ELSE
    Pr_lu% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),7,0,0): ' largeur utile
    Pr_hu% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),8,0,0): ' hauteur utile
END_IF
' Couleur trait noir, épaisseur = 1, arrière-plan transparent:
inip% = -2
Pr_res% = DLL_CALL6("PrinterFunction",6,ADR(phnd%),ADR(chnd%),0,inip%,1)
inip% = 1
END_SUB
' ==============================================================================
SUB Pr_Image(f$,x%,y%,w%,h%,u%)
' Impression de l'image f$ en x%,y%, dimensions w% x h% (sera redimensionnée pour
' tenir dans le cadre donné).
' u% = 0: unités pixels, u% = 1, unités millimètres
' ******** NB: coordonnées d'impression absolues (pixels): de 0,0 à 4962,7013 ********
' ATTENTION :
' =========
' les coordonnées prises en compte ont pour origine le début de la zone imprimable.
' Il faut donc soustraire les marges pour partir de l'angle supérieur gauche de la feuille.
IF inip% = 0 THEN EXIT_SUB: ' imprimante non initialisée (Sub Pr_Init)
IF u% = 1: ' unités en mm, conversion en pixels
    x% = x%*Pr_mmpix: y% = y%*Pr_mmpix: w% = w%*Pr_mmpix: h% = h%*Pr_mmpix
END_IF
x% = x%-Pr_mg%: y% = y%-Pr_mh%: ' sinon, marges ajoutées d'office
Pr_res% = DLL_call6("PrinterFunction",4,ADR(phnd%),ADR(chnd%),0,x%,y%): ' positionnement
Pr_res% = DLL_call6("PrinterFunction",7,ADR(phnd%),ADR(chnd%),ADR(f$),w%,h%)
END_SUB
' ==============================================================================
SUB Pr_Impr()
' Lancement de l'impression réelle ('fin d'impression')
IF inip% = 0 THEN EXIT_SUB: ' imprimante non initialisée (Sub Pr_Init)
Pr_res% = DLL_CALL4("PrinterManager",3,ADR(phnd%),ADR(chnd%),0)
inip% = 0
' DLL_OFF
END_SUB
' ==============================================================================

Il s'agit d'impression sur format A4 obligatoirement.
Le programme est lancé avec des valeurs implicites (étiquettes 'Laser' Avery), mais il faut lui fournir les paramètres de la planche
A4 désirée: dimensions en mm d'une étiquette, des marges haut et gauche, et des espacements horizontaux et verticaux entre étiquettes.

Après validation, l'étiquette modèle est représentée en haut.
On peut garnir cette étiquette avec 10 éléments texte différents, plus une image.
Chaque élément texte a son emplacement et ses caractéristiques propres (police, taille, couleur, enrichissements). L'emplacement x,y est donné en pixels, on peut s'aider par la superposition d'une grille de 20 pixels (arbitraire) sur l'image.

Le bouton 'Appliquer' permet de visualiser l'état actuel sur l'étiquette modèle (validation des éléments).
Le bouton 'Aperçu' affiche une image de la planche A4 en taille réelle avec les étiquettes en place (seulement leur contour s'il n'y a pas d'éléments validés par 'Appliquer'). Cet affichage grandeur nature peut peut-être être tronqué, si on a un écran trop petit.

Il est possible d'insérer une (petite) image Jpg ou Bmp à un emplacement donné, si elle est dépasse les limites elle sera tronquée.
Ça peut être une image de fond, aux dimensions de l'étiquette, les textes seront écrits sur cette image en fond transparent (grâce à une fonction de la dll de klaus)

Pour l'impression de la planche j'ai fait appel à la dll de notre ami Klaus, il faut donc mettre son chemin à jour en tête du programme.
L'impression se faisant sur la totalité de la feuille, ce qui dépasserait éventuellement les marges non imprimables serait donc perdu.

29/8 ajout de la possibilité d'incliner les textes à 45° ou 90°
30/8 possibilité de mettre deux images superposées


Dernière édition par JL35 le Mar 30 Aoû 2016 - 21:16, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5522
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Planches d'étiquettes   Lun 29 Aoû 2016 - 0:38

Ligne 257
Code:

FILE_SAVE PA4%,fm$; ' temporaire


Remplacer le point-virgule par un deux-points  tongue
Code:

FILE_SAVE PA4%,fm$ : ' temporaire

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Planches d'étiquettes   Lun 29 Aoû 2016 - 15:21

Bien vu papydall ! Embarassed  c'est une faute courante chez moi (ils sont l'un à côté de l'autre sur le clavier...)

PS J'ai corrigé ci-dessus ma minuscule erreur qui n'a pas échappé à ton oeil d'aigle survolant le désert panoramicien.

J'en ai profité pour ajouter la possibilité d'incliner les textes individuellement de 45° ou 90° (puisque la dll de Klaus offre cette possibilité, autant en profiter).


Dernière édition par JL35 le Mar 30 Aoû 2016 - 22:08, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Planches d'étiquettes   Mar 30 Aoû 2016 - 21:21

Ajouté la possibilité d'intégrer deux images (ou plus) superposées.
Je pense par exemple à une image de fond et une petite photo (carte de visite).
Il y a possibilité de 8 lignes de texte indépendantes  et 2 images, mais c'est modulable facilement dans le programme.
Par exemple:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5522
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Planches d'étiquettes   Mar 30 Aoû 2016 - 22:58

J’aurais préféré Docteur ès Panoramic, mais bon je me contente d’être Ingénieur Panoramicien.  tongue

Je réclame mon titre d’ingénieur Panoramicien ! affraid
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé




MessageSujet: Re: Planches d'étiquettes   

Revenir en haut Aller en bas
 
Planches d'étiquettes
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Système d'étiquettes

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