JL35
Nombre de messages : 7098 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Planches d'étiquettes Dim 28 Aoû 2016 - 17: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 - 20:16, édité 2 fois | |
|