JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin sur A4 Mer 22 Jan 2014 - 22:38 | |
| Merci ygeronimi pour tes encouragements du... 3 mai 2013 ! J'ai mis le temps pour me réveiller (comme la belle au bois dormant ), et j'ai fait une nouvelle version, très semblable à la précédente, toujours pour dessiner sur une page au format A4, en y ajoutant la possibilité de déplacer pixel par pixel un objet qu'on vient de dessiner, ou d'importer, pour le positionner avec précision dans la page. Je précise bien que cette opération n'est possible que sur le dernier objet dessiné. On peut aussi afficher une grille ponctuellement, pour aider le repérage. La taille de la fenêtre affichée est modulable, en modifiant le paramètre fact (pixels par mm sur la page). Pour avoir une image de page grandeur nature il faut une valeur de 3.7, ce qui correspond à un écran d'au moins 1200 pixels. Pour un écran de 1024 pixels, plus courant, il faut descendre aux environs de 3.1 Bien entendu, plus c'est grand, meilleure est la précision du dessin. Pour ceux que ça intéresse, il suffit de lire l'Aide' du menu, tout y est. Ressource externe nécessaire: KGF.dll de l'ami Klaus (traitement d'images et impression). Utilisation: n'importe quelle page A4 de présentation, confection de cartes, menus, avec pliage, etc. Attention, ce n'est pas du dessin vectoriel, les objets dessinés ne sont pas déplaçables (sauf immédiatement après dessin), ni redimensionnables, ils sont partie indissociable du tout. - Code:
-
' Dessin.bas LABEL timeur, Ligne, Rectplein, Rectvide, Cercplein, Cercvide, Libre, Remplir LABEL Texte, Images, Coultrac, Coulfond, New, Opn, Secours, Carte, Enr, Ens, Impr, Impr1 LABEL Quit, Anul, Hlp, Dtxt, Dimg, chimg, chimg1, vfont, Red1, Red2, Red3, Red4, Reda LABEL Txtf, Imagfi, Imgf, Init, Chor, Razor, Timon, Timoff, Track, Trackp LABEL Trait_e, Trait_t, Applic LABEL Copyzon, Pastzon, Dimtext, Desfig, Deplace, Grille, Inipara, Rotimage
DIM w0%, h0%, wp%, hp%, mg, lb, hb, i%, j%, c, cr, cg, cb, tr, tg, tb, lc, hc, fact DIM x,y,x1,y1,x2,y2,x3,y3,xa,ya,truc,f$,fm$,fp$, fig, a, r, pi, pas, kg$, m$, rps$ DIM pic, o1, o2, o3, oct, ocf, nti%, ra, wn, hn, pr%, pg%, pb%, yt%, wip%, hip% DIM na, nva, img(10), a$, b$, wi%, hi%, font$, fsz%, txt$, lc%, hc%, hnd%, cnv% DIM orien%, igtr%, igrz%, igcp%, w%, h%, ctt%, grid%, ma%, fsv$, dep%, modi% DIM sx1, sx2, sy1, sy2, ga%, lu%, co%, picm%, fsc$, cz%, tpt%, wtt% DATA 0,0,0,0,0,128,0,128,0,0,128,128,128,0,0,128,0,128,128,64,0,192,192,192 DATA 128,128,128,0,0,255,0,255,0,0,255,255,255,0,0,255,0,255,255,255,0,255,255,255 ' ====================== CHEMINS A AJUSTER ===================================== kg$ = "C:\PANORAMIC\KLAUS\DLLs\KGF.dll": ' DLL Klaus, à ajuster <=+=+=+=+=+=+=+= ' rps$ = "Z:\": ' répertoire de manoeuvre (fichiers temporaires) <=+=+=+=+=+=+=+=+ rps$ = "C:\Temp\": ' répertoire de manoeuvre (fichiers temporaires) <=+=+=+=+=+= ' ============================================================================== fp$ = rps$ + "Imgprn.bmp": ' fichier d'impression fsv$ = rps$ + "Savpic.bmp" fsc$ = rps$ + "Secours.bmp": ' sauvegarde de secours ' ============================================================================== ' Paramètre fact à moduler par tâtonnements, en fonction de la définition verticale ' de l'écran, plus elle est faible, plus il faut le réduire. ' 3.7 correspond à une image A4 grandeur nature, sur un écran de 1200 pixels verticaux ' (une valeur de 3.1 devrait convenir à un écran de 1024 pixels, à ajuster). fact = 3.7: ' pixels par mm, à l'écran (écran de 1920x1200) ' ============================================================================== pi = 4*ATN(1) orien% = 0: ' orientation 'portrait' tr = 0: tg = 0: tb = 0: ' couleur initiale de tracé (noir) cr = 0: cg = 0: cb = 0: ' couleur initiale de fond (blanc) f$ = "" na = 1: nva = 5: ' profondeur d'annulations mg = 100: ' marge gauche (zone des commandes) COLOR 0, 128,255,255: BORDER_SMALL 0: ON_CLOSE 0,Quit ' ------------------------------------------------------------------------------ pic = 160: PICTURE pic: TOP pic, 5: LEFT pic, mg: ' image de la feuille A4 ' ------------------------------------------------------------------------------ igtr% = 138: IMAGE igtr%: ' tampon pour transfert des images igrz% = 139: IMAGE igrz%: ' page initiale, pour RAZ igcp% = 490: IMAGE igcp%: ' pour copie de zone
GOSUB Init MAIN_MENU 1 SUB_MENU 2: PARENT 2, 1: CAPTION 2, "Fichier" SUB_MENU 21: PARENT 21, 2: CAPTION 21, "Nouveau" SUB_MENU 22: PARENT 22, 2: CAPTION 22, "Ouvrir un fichier" SUB_MENU 27: PARENT 27, 2: CAPTION 27, "Ouvrir la sauvegarde" SUB_MENU 23: PARENT 23, 2: CAPTION 23, "Enregistrer" SUB_MENU 24: PARENT 24, 2: CAPTION 24, "Enregistrer sous..." SUB_MENU 25: PARENT 25, 2: CAPTION 25, "Imprimer" SUB_MENU 26: PARENT 26, 2: CAPTION 26, "Quitter" ON_CLICK 21, New: ON_CLICK 22, Opn: ON_CLICK 27, Secours ON_CLICK 23, Enr: ON_CLICK 24, Ens: ON_CLICK 25, Impr: ON_CLICK 26, Quit SUB_MENU 3: PARENT 3, 1: CAPTION 3, "Edition" SUB_MENU 31: PARENT 31, 3: CAPTION 31, "Annuler dernier" SUB_MENU 32: PARENT 32, 3: CAPTION 32, "RAZ tout" SUB_MENU 33: PARENT 33, 3: CAPTION 33,"Tracer les axes H et V" ON_CLICK 31, Anul: ON_CLICK 32, Razor: ON_CLICK 33,Carte SUB_MENU 4: PARENT 4, 1: CAPTION 4, "Aide": ON_CLICK 4, Hlp
PICTURE 8: TOP 8,4: LEFT 8,4: WIDTH 8,15: HEIGHT 8,10 PICTURE 9: TOP 9,14: LEFT 9,4: WIDTH 9,15: HEIGHT 9,10: ' témoin d'activité du Timer ' ------------------------------------------------------------------------------ CONTAINER_OPTION 10: TOP 10,30: LEFT 10,5: HEIGHT 10,50: WIDTH 10,mg-10 COLOR 10,255,255,180: CAPTION 10,"Orientation :" OPTION 11: PARENT 11,10: TOP 11,15: LEFT 11,10: CAPTION 11,"Portrait" OPTION 12: PARENT 12,10: TOP 12,30: LEFT 12,10: CAPTION 12,"Paysage" MARK_ON 11: ON_CLICK 11, Chor: ON_CLICK 12, Chor ' ------------------------------------------------------------------------------ ALPHA 49: LEFT 49,30: CAPTION 49,"Marges non"+chr$(10)+"imprimables -->" o1 = 50: lb = mg-10: hb = 25 CONTAINER_OPTION o1: TOP o1,TOP(10)+55: LEFT o1,2: HEIGHT o1,210: WIDTH o1,mg-5: CAPTION o1,"Type d'objet" COLOR o1,255,255,180 OPTION o1+1: PARENT o1+1,o1: TOP o1+1,15: LEFT o1+1,5: WIDTH o1+1,mg-20: CAPTION o1+1,"Ligne" OPTION o1+2: PARENT o1+2,o1: TOP o1+2,31: LEFT o1+2,5: WIDTH o1+2,mg-20: CAPTION o1+2,"Rect. vide" OPTION o1+3: PARENT o1+3,o1: TOP o1+3,47: LEFT o1+3,5: WIDTH o1+3,mg-20: CAPTION o1+3,"Rect. plein" OPTION o1+4: PARENT o1+4,o1: TOP o1+4,63: LEFT o1+4,5: WIDTH o1+4,mg-20: CAPTION o1+4,"Cercle vide" OPTION o1+5: PARENT o1+5,o1: TOP o1+5,79: LEFT o1+5,5: WIDTH o1+5,mg-20: CAPTION o1+5,"Cercle plein" OPTION o1+6: PARENT o1+6,o1: TOP o1+6,95: LEFT o1+6,5: WIDTH o1+6,mg-20: CAPTION o1+6,"Remplir" OPTION o1+7: PARENT o1+7,o1: TOP o1+7,111: LEFT o1+7,5: WIDTH o1+7,mg-20: CAPTION o1+7,"Tracé libre" OPTION o1+8: PARENT o1+8,o1: TOP o1+8,127: LEFT o1+8,5: WIDTH o1+8,mg-20: CAPTION o1+8,"Texte" OPTION o1+9: PARENT o1+9,o1: TOP o1+9,143: LEFT o1+9,5: WIDTH o1+9,mg-20: CAPTION o1+9,"Image" OPTION o1+10: PARENT o1+10,o1: TOP o1+10,165: LEFT o1+10,5: WIDTH o1+10,mg-20: CAPTION o1+10,"Copier zone" OPTION o1+11: PARENT o1+11,o1: TOP o1+11,183: LEFT o1+11,5: WIDTH o1+11,mg-20: CAPTION o1+11,"Coller zone" ON_CLICK o1+8, Dtxt: ON_CLICK o1+9, Dimg MARK_ON o1+1: fig = 1: ' Ligne ' ------------------------------------------------------------------------------ o2 = 70 CONTAINER o2: TOP o2,TOP(o1)+215: LEFT o2,LEFT(o1): HEIGHT o2,75: WIDTH o2,mg-5: CAPTION o2,"Largeur du tracé" COLOR o2,255,255,180 SPIN o2+1: PARENT o2+1,o2: TOP o2+1,15: LEFT o2+1,10: WIDTH o2+1,45 MIN o2+1,1: MAX o2+1,20: POSITION o2+1,1: ON_CHANGE o2+1,Trait_e ALPHA o2+2: PARENT o2+2,o2: TOP o2+2,17: LEFT o2+2,60: CAPTION o2+2,"pixels" o3 = o2+3 PICTURE o3: PARENT o3,o2: TOP o3,40: LEFT o3,5: WIDTH o3,WIDTH(o2)-10: HEIGHT o3,30 2D_TARGET_IS o3: 2D_PEN_COLOR 0,0,0: 2D_PEN_SOLID: 2D_LINE 15,5,80,5 2D_PEN_DASH: 2D_LINE 15,15,80,15 2D_PEN_DOT: 2D_LINE 15,25,80,25 2D_PEN_SOLID: 2D_PEN_COLOR 255,0,0: 2D_PEN_WIDTH 7: 2D_LINE 0,5,8,5: tpt% = 0: ' type trait (solide) ON_CLICK o3,Trait_t ' ------------------------------------------------------------------------------ oct = 81: x1 = 5: y1 = TOP(o2)+HEIGHT(o2)+20: lc = 30: hc = 15 ALPHA oct-1: TOP oct-1,y1-16: LEFT oct-1,2 COLOR oct-1, 255,255,180: CAPTION oct-1,"Couleur du tracé " PICTURE oct: TOP oct, y1: LEFT oct, x1: WIDTH oct, lc*2: HEIGHT oct, hc*8 2D_TARGET_IS oct FOR j% = 0 TO 7 FOR i% = 0 TO 1 READ cr: READ cg: READ cb: 2D_FILL_COLOR cr,cg,cb 2D_RECTANGLE i%*lc,j%*hc,i%*lc+lc,j%*hc+hc NEXT i% NEXT j% ON_CLICK oct, Coultrac PICTURE oct+1: TOP oct+1, y1: LEFT oct+1, 10+2*lc: WIDTH oct+1, 25: HEIGHT oct+1, 8*hc COLOR oct+1, 0,0,0 ' ------------------------------------------------------------------------------ ocf = 85: x1 = 5: y1 = y1+8*hc+35 ALPHA ocf-1: TOP ocf-1, y1-30: LEFT ocf-1, 2 COLOR ocf-1,255,255,180: CAPTION ocf-1,"Couleur de "+CHR$(10)+"remplissage " PICTURE ocf: TOP ocf, y1: LEFT ocf, x1: WIDTH ocf, lc*2: HEIGHT ocf, hc*8 2D_TARGET_IS ocf RESTORE FOR j% = 0 TO 7 FOR i% = 0 TO 1 READ cr: READ cg: READ cb: 2D_FILL_COLOR cr,cg,cb 2D_RECTANGLE i%*lc,j%*hc,i%*lc+lc,j%*hc+hc NEXT i% NEXT j% ON_CLICK ocf, Coulfond PICTURE ocf+1: TOP ocf+1,y1: LEFT ocf+1,LEFT(oct+1): WIDTH ocf+1,25: HEIGHT ocf+1,8*hc 2D_TARGET_IS ocf+1: 2D_PEN_COLOR 0,0,0: ' 2D_RECTANGLE 0,0,lc,lc-15
CHECK ocf+2: TOP ocf+2,TOP(ocf)+HEIGHT(ocf)+5: LEFT ocf+2,30: WIDTH ocf+2,50 CAPTION ocf+2,"Grille": grid% = 0: ON_CLICK ocf+2,Grille
CONTAINER 400: TOP 400,TOP(ocf+2)+30: LEFT 400,3: WIDTH 400,mg-8: HEIGHT 400,65 COLOR 400,255,255,180 ALPHA 401: PARENT 401,400: TOP 401,2: LEFT 401,2 CAPTION 401,"Déplacement de "+CHR$(10)+"1 pixel :" BUTTON 402: PARENT 402,400: TOP 402,TOP(401)+15: LEFT 402,45: WIDTH 402,22: HEIGHT 402,22 BUTTON 403: PARENT 403,400: TOP 403,TOP(402)+24: LEFT 403,LEFT(402):WIDTH 403,22: HEIGHT 403,22 BUTTON 404: PARENT 404,400: TOP 404,TOP(402)+11: LEFT 404,LEFT(402)-22: WIDTH 404,22: HEIGHT 404,22 BUTTON 405: PARENT 405,400: TOP 405,TOP(404): LEFT 405,LEFT(402)+22: WIDTH 405,22: HEIGHT 405,22 FOR i% = 402 TO 405: FONT_NAME i%,"Wingdings": ON_CLICK i%,Deplace: NEXT i% CAPTION 402,CHR$(233): CAPTION 403,CHR$(234): CAPTION 404,CHR$(231): CAPTION 405,CHR$(232)
picm% = 495: PICTURE picm%: HIDE picm%: ' picture de manoeuvre ' ------------------------------------------------------------------------------ OPEN_DIALOG 90 FILTER 90,"Images *.bmp *.jpg *.gif *.ico|*.bmp;*.jpg;*.gif;*.ico" SAVE_DIALOG 91 FILTER 91,"Image *.bmp|*.bmp" ' ------------------------------------------------------------------------------ FOR i% = 1 TO 5: IMAGE 140+i%: img(i%) = 140+i%: NEXT i% : ' Pour sauvegardes
' =============== FORM TEXTES ================================================== FORM 96: TOP 96, 60: LEFT 96, 110: HEIGHT 96, 380: WIDTH 96, 680: HIDE 96 BORDER_SMALL 96: COLOR 96,255,180,180: CAPTION 96, "Police/Taille" TO_FOREGROUND 96 font_bold 96 LIST 97: PARENT 97, 96: TOP 97, 5: HEIGHT 97, 95: WIDTH 97, 150 FONT_NAMES_LOAD 97 FOR i% = COUNT(97) TO 1 STEP -1 IF LEFT$(ITEM_READ$(97, i%), 1) = "@" THEN ITEM_DELETE 97, i% NEXT i% ON_CLICK 97, vfont SPIN 98: PARENT 98, 96: TOP 98, 5: LEFT 98, 160: WIDTH 98, 50: MAX 98, 30 POSITION 98, 10: MIN 98, 6: MAX 98, 120: ON_CHANGE 98, vfont BUTTON 99: PARENT 99, 96: TOP 99, 5: LEFT 99, WIDTH(96)-100: WIDTH 99, 80 CAPTION 99, "OK": ON_CLICK 99, Texte: ON_CLOSE 96, Txtf EDIT 100: PARENT 100, 96: TOP 100,TOP(98): LEFT 100,LEFT(98)+60: WIDTH 100, 240 FONT_NAME 100, "Arial": FONT_SIZE 100, 10: font$ = "Arial": TEXT 100, font$ ALPHA 101: PARENT 101, 96: TOP 101, TOP(97)+HEIGHT(97)-12: LEFT 101,340 CAPTION 101, " Saisir ou 'coller' le texte :" MEMO 102: PARENT 102,96: TOP 102,TOP(101)+16: WIDTH 102,WIDTH(96)-16: HEIGHT 102,190 CHECK 103: PARENT 103,96: TOP 103,38: LEFT 103,160: WIDTH 103,80: CAPTION 103,"Gras" CHECK 104: PARENT 104,96: TOP 104,38: LEFT 104,210: WIDTH 104,80: CAPTION 104,"Italique" CHECK 105: PARENT 105,96: TOP 105,38: LEFT 105,270: WIDTH 105,80: CAPTION 105,"Souligné" FOR i% = 103 TO 105: ON_CLICK i%,vfont: NEXT i% PICTURE 106: TOP 106,-1000: WIDTH 106,w0%-20: HEIGHT 106,900: ' pour calcul taille texte CHECK 288: PARENT 288,96: TOP 288,38: LEFT 288,360: CAPTION 288,"Centré" CHECK 280: PARENT 280,96: TOP 280,60: LEFT 280,160: CAPTION 280,"Rotation 90°" CONTAINER_OPTION 281: PARENT 281,96: HEIGHT 281,30: TOP 281,53: LEFT 281,250 WIDTH 281,130: COLOR 281,255,200,200 OPTION 282: PARENT 282,281: TOP 282,7: LEFT 282,5: CAPTION 282,"Gauche" OPTION 283: PARENT 283,281: TOP 283,7: LEFT 283,70: CAPTION 283,"Droite" MARK_ON 282 CHECK 107: PARENT 107,96: TOP 107,80: LEFT 107,160: WIDTH 107,150 CAPTION 107,"Fond transparent" ' MARK_ON 107 BUTTON 108: PARENT 108,96: TOP 108,35: LEFT 108,420 CAPTION 108,"Appliquer": ON_CLICK 108,Applic ALPHA 110: PARENT 110,96: TOP 110,TOP(102)+HEIGHT(102)+32: WIDTH 110,240 a$ = " Après saisie, clic le bouton 'OK', puis clic l'emplacement" a$ = a$ + " (haut/gauche) sur la feuille (patience, ça peut être long !)" CAPTION 110,a$ BUTTON 290: PARENT 290,96: TOP 290,TOP(102)+HEIGHT(102)+5: LEFT 290,150: WIDTH 290,120 CAPTION 290,"Dimensions texte:": ON_CLICK 290,Dimtext ALPHA 291: PARENT 291,96: TOP 291,TOP(290)+5: LEFT 291,LEFT(290)+162 CAPTION 291,"X pixels = X mm" EDIT 292: PARENT 292,96: TOP 292,TOP(290)+1: WIDTH 292,35: LEFT 292,LEFT(290)+123 EDIT 293: PARENT 293,96: TOP 293,TOP(292): WIDTH 293,35: LEFT 293,LEFT(290)+172 EDIT 294: PARENT 294,96: TOP 294,TOP(292): WIDTH 294,35: LEFT 294,LEFT(290)+248 EDIT 295: PARENT 295,96: TOP 295,TOP(292): WIDTH 295,35: LEFT 295,LEFT(290)+297 PICTURE 296: HIDE 296 BUTTON 111: PARENT 111,96: TOP 111,60: LEFT 111,LEFT(99): WIDTH 111,80 CAPTION 111,"Annuler": ON_CLICK 111, Txtf
' =============== FORM IMAGES ================================================== FORM 115: TOP 115, 60: LEFT 115, 50: HEIGHT 115, 430: WIDTH 115, 360: HIDE 115 BORDER_SMALL 115: COLOR 115,255,180,180: CAPTION 115, "Image à insérer:" FONT_BOLD 115 EDIT 116: PARENT 116,115: TOP 116,5: WIDTH 116,WIDTH(115)-16 TEXT 116," * clic pour choisir l'image *": ON_CLICK 116, chimg ALPHA 117: PARENT 117,115: TOP 117,30 ALPHA 118: PARENT 118,115: TOP 118,52 CAPTION 118, "Redimensionner: W= H= pixels" SPIN 119: PARENT 119,115: TOP 119,50: LEFT 119,120: WIDTH 119,55 SPIN 120: PARENT 120,115: TOP 120,TOP(119): LEFT 120,200: WIDTH 120,55 ALPHA 121: PARENT 121,115: TOP 121,77: LEFT 121,260: CAPTION 121,"mm" SPIN 122: PARENT 122,115: TOP 122,75: LEFT 122,120: WIDTH 122,55 SPIN 123: PARENT 123,115: TOP 123,TOP(121): LEFT 123,200: WIDTH 123,55 MIN 119,0: MAX 119,5000: MIN 120,0: MAX 120,5000 MIN 122,0: MAX 122,1500: MIN 123,0: MAX 123,1500 ON_CHANGE 119,Red1: ON_CHANGE 120,Red2: ON_CHANGE 122,Red3: ON_CHANGE 123,Red4
ALPHA 125: PARENT 125,115: TOP 125,90: LEFT 125,5: CAPTION 125,"Correction :" ALPHA 129: PARENT 129,115: TOP 129,TOP(125)+18: LEFT 129,5: CAPTION 129,"Gamma:" TRACK_BAR 130: PARENT 130,115: TOP 130,TOP(129): LEFT 130,65: WIDTH 130,WIDTH(115)-120 HEIGHT 130,18: ON_CHANGE 130, Track MIN 130,-128: MAX 130,127: POSITION 130,0 EDIT 131: PARENT 131,115: TOP 131,TOP(130): LEFT 131,LEFT(130)+WIDTH(130): WIDTH 131,35 TEXT 131, STR$(POSITION(130)) ALPHA 132: PARENT 132,115: TOP 132,TOP(129)+20: LEFT 132,5: CAPTION 132,"Luminosité:" TRACK_BAR 133: PARENT 133,115: TOP 133,TOP(132): LEFT 133,65: WIDTH 133,WIDTH(115)-120 HEIGHT 133,18: ON_CHANGE 133, Track MIN 133,-128: MAX 133,127: POSITION 133,0 EDIT 134: PARENT 134,115: TOP 134,TOP(133): LEFT 134,LEFT(133)+WIDTH(133): WIDTH 134,35 TEXT 134, STR$(POSITION(133)) ALPHA 135: PARENT 135,115: TOP 135,TOP(132)+20: LEFT 135,5: CAPTION 135,"Contraste:" TRACK_BAR 136: PARENT 136,115: TOP 136,TOP(135): LEFT 136,65: WIDTH 136,WIDTH(115)-120 HEIGHT 136,18: ON_CHANGE 136, Track MIN 136,-128: MAX 136,127: POSITION 136,0 EDIT 137: PARENT 137,115: TOP 137,TOP(136): LEFT 137,LEFT(136)+WIDTH(136): WIDTH 137,35 TEXT 137, STR$(POSITION(136)) CHECK 140: PARENT 140,115: TOP 140,TOP(135)+30: LEFT 140,10: CAPTION 140,"Rotation 90°" ON_CLICK 140,Rotimage CONTAINER_OPTION 441: PARENT 441,115: HEIGHT 441,30: TOP 441,TOP(140)-7 LEFT 441,LEFT(140)+90: WIDTH 441,130: COLOR 441,255,200,200 OPTION 442: PARENT 442,441: TOP 442,7: LEFT 442,5: CAPTION 442,"Gauche" OPTION 443: PARENT 443,441: TOP 443,7: LEFT 443,70: CAPTION 443,"Droite" MARK_ON 442 PICTURE 150: PARENT 150,115: TOP 150,210: LEFT 150,10: WIDTH 150,240: HEIGHT 150,180 STRETCH_ON 150
BUTTON 124: PARENT 124,115: TOP 124,200: LEFT 124,265: CAPTION 124,"OK" ON_CLICK 124, Images: ON_CLOSE 115, Imgf BUTTON 151: PARENT 151,115: TOP 151,230: LEFT 151,LEFT(124): CAPTION 151,"Annuler" ON_CLICK 151, Imgf ' =============== FORM IMPRESSION ============================================== FORM 300: TOP 300,100: LEFT 300,200: HEIGHT 300,150: WIDTH 300,360: HIDE 300 COLOR 300,180,255,180: CAPTION 300, " - IMPRESSION -": BORDER_SMALL 300 FONT_BOLD 300 ALPHA 301: PARENT 301,300: TOP 301,20: LEFT 301,5 CAPTION 301,"Correction gamma éventuelle :" EDIT 302: PARENT 302,300: TOP 302,20: LEFT 302,180: WIDTH 302,40 TRACK_BAR 303: PARENT 303,300: TOP 303,40: LEFT 303,5: WIDTH 303,WIDTH(300)-25 HEIGHT 303,20: ON_CHANGE 303, Trackp MIN 303,-128: MAX 303,127: POSITION 303,0 TEXT 302, STR$(POSITION(303)) BUTTON 310: PARENT 310,300: TOP 310,80: LEFT 310,100: CAPTION 310,"Imprimer" BUTTON 311: PARENT 311,300: TOP 311,TOP(310): LEFT 311,180: CAPTION 311,"Annuler" ON_CLICK 310, Impr1: ON_CLICK 311, Impr1 ' ------------------------------------------------------------------------------ DLL_ON kg$: ' pour images et impression nti% = 170: TIMER nti%: TIMER_INTERVAL nti%,40: ON_TIMER nti%, timeur: GOSUB Timon GOSUB Init ' ============================================================================== END: ' ========================= E N D ========================================= ' ============================================================================== Init: fact = 3.7 IF orien% = 0 IF SCREEN_y < 1200 THEN fact = 3.1 wp% = 210*fact: hp% = 297*fact: w% = 210: h% = 297 ELSE wp% = 297*fact: hp% = 210*fact: w% = 297: h% = 210 END_IF w0% = wp% + mg + 25: h0% = hp% + 65 WIDTH 0, w0%: HEIGHT 0, h0%: IF HEIGHT(0)<840 THEN HEIGHT 0,840 WIDTH pic, wp%: HEIGHT pic, hp% 2D_TARGET_IS 0: 2D_RECTANGLE mg-1,4,mg+wp%+1,5+hp% 2D_TARGET_IS pic: 2D_CLEAR 2D_FILL_COLOR 148,148,148 2D_FILL_DIAGONAL_CROSS: 2D_RECTANGLE 0,0,wp%,hp% 2D_FILL_SOLID: 2D_FILL_COLOR 255,255,255: 2D_PEN_COLOR 255,255,255 ma% = 12 2D_RECTANGLE ma%+1,ma%+1,wp%-ma%,hp%-ma%: ' avec les marges non imprimables ' échelles de bordure 2D_PEN_COLOR 255,0,0: 2D_PEN_WIDTH 2 FOR x = 5 TO w%-2 STEP 5 i% = x*fact: j% = ma%: IF BIN_AND(x,1) = 1 THEN j%=j%/2+1 2D_LINE i%,0,i%,j% 2D_LINE i%,hp%-j%,i%,hp% NEXT x FOR y = 5 TO h%-2 STEP 5 i% = y*fact: j% = ma%: IF BIN_AND(y,1) = 1 THEN j%=j%/2+1 2D_LINE 0,i%,j%,i% 2D_LINE wp%-j%,i%,wp%,i% NEXT y 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 1 2D_IMAGE_COPY igrz%,0,0,wp%,hp%: ' page vierge initiale, pour raz totale modi% = 0 RETURN ' ============================================================================== Chor: ' changement d'orientation portrait/paysage IF CHECKED(11) = 1 IF orien% = 0 THEN RETURN orien% = 0 ELSE IF orien% = 1 THEN RETURN orien% = 1 END_IF GOSUB Timoff IF grid% = 1 THEN GOSUB Grille: ' suppression de la grille ' 2D_IMAGE_COPY img(na),0,0,wp%,hp% IF modi% = 1 i% = MESSAGE_CONFIRMATION_YES_NO("Ignorer le dessin en cours ?") IF i% <> 1 ' enregistrer GOSUB Enr: modi% = 0 END_IF END_IF GOSUB Init GOSUB Inipara: ' réinit paramètres textes et images GOSUB Timon RETURN ' ============================================================================== Razor: GOSUB Timoff i% = MESSAGE_CONFIRMATION_YES_NO("Effacer la page en cours ?") IF i% = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp%: ' sauvegarde page actuelle 2D_IMAGE_PASTE igrz%,0,0: ' restore la page vierge initiale END_IF HIDE 96: HIDE 115: HIDE 300 MARK_OFF o1+8: MARK_OFF o1+9: MARK_ON o1+1 GOSUB Inipara: ' réinit paramètres textes et images GOSUB Timon RETURN ' ============================================================================== Timon: HIDE 96: HIDE 115: HIDE 300 TIMER_ON nti% RETURN ' ============================================================================== Timoff: TIMER_OFF nti% COLOR 8,164,164,164: COLOR 9,164,164,164 RETURN ' ============================================================================== timeur: ctt% = ctt%+1 IF ctt% = 10 THEN COLOR 8,255,0,0: COLOR 9,255,255,255 IF ctt% = 20 THEN COLOR 8,255,255,255: COLOR 9,255,0,0: ctt% = 0 x = MOUSE_X_POSITION(pic): y = MOUSE_Y_POSITION(pic) a$ = "X= "+STR$(x)+" pixels Y= "+STR$(y)+" pixels" a$=a$+" (X= "+STR$(INT(10*x/fact)/10)+" mm Y= "+STR$(INT(10*y/fact)/10)+" mm)" CAPTION 0,f$ + " " + a$ FOR i% = o1+1 TO o1+10 IF CHECKED(i%) = 1 THEN EXIT_FOR NEXT i% fig = i%-o1: ' type d'objet choisi IF MOUSE_LEFT_DOWN(pic) = 1 IF grid% = 1 THEN GOSUB Grille: ' suppression grille éventuelle 2D_IMAGE_COPY img(na),0,0,wp%,hp%: ' sauvegarde préalable 2D_PEN_DOT: 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 1 x1 = x: y1 = y: ' origine ' IF fig = 11 THEN GOSUB Pastzon: RETURN: ' coller une zone copiée truc = 1 END_IF IF MOUSE_LEFT_UP(pic) = 1 ' relâche, tracé final 2D_IMAGE_PASTE img(na),0,0: ' restore l'image avant tracé Desfig: 2D_PEN_SOLID: wtt% = POSITION(o2+1): 2D_PEN_WIDTH wtt%: ' épaisseur trait IF wtt% = 1 AND tpt% > 0 IF tpt% = 1 2D_PEN_DASH ELSE 2D_PEN_DOT END_IF END_IF 2D_PEN_COLOR tr,tg,tb sx1 = x1: sx2 = x2: sy1 = y1: sy2 = y2 SELECT fig CASE 1: GOSUB Ligne CASE 2: GOSUB Rectvide CASE 3: GOSUB Rectplein CASE 4: GOSUB Cercvide CASE 5: GOSUB Cercplein CASE 6: GOSUB Remplir CASE 7: GOSUB Libre CASE 8: GOSUB Texte CASE 9: GOSUB Images CASE 10: GOSUB Copyzon CASE 11: GOSUB Pastzon END_SELECT IF dep% = 0 na = na + 1: IF na > nva THEN na = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp% END_IF x1 = sx1: x2 = sx2: y1 = sy1: y2 = sy2 truc = 0 FILE_SAVE pic,fsc$: ' sauvegarde de secours (pour cas de plantage) modi% = 1 END_IF IF truc = 1 ' tracé provisoire, en continu x2 = x: y2 = y: ' position actuelle IF x2=x3 AND y2=y3 THEN RETURN: ' inchangé 2D_IMAGE_PASTE img(na),0,0 SELECT fig CASE 1: GOSUB Ligne CASE 2: GOSUB Rectvide CASE 3: GOSUB Rectplein CASE 4: GOSUB Cercvide CASE 5: GOSUB Cercplein CASE 6: GOSUB Remplir CASE 7: GOSUB Libre CASE 8: ' GOSUB Texte: ' on ne vient jamais ici (?) CASE 9: ' GOSUB Images: ' idem CASE 10: GOSUB Rectvide: ' rectangle de sélection de la zone à copier CASE 11: ' GOSUB Pastzon END_SELECT x3 = x: y3 = y END_IF RETURN ' ============================================================================== Grille: ' grille, en bascule IF grid% = 0 FILE_SAVE pic, fsv$ j% = hp%*fact FOR x = 10 TO 200 STEP 10 i% = x*fact: 2D_LINE i%,0,i%,j% NEXT x j% = wp%*fact FOR y = 10 TO 290 STEP 10 i% = y*fact: 2D_LINE 0,i%,j%,i% NEXT y grid% = 1 ELSE FILE_LOAD pic, fsv$: ' restore sans grille MARK_OFF ocf+2: grid% = 0 END_iF RETURN ' ============================================================================== Ligne: IF SCANCODE = 160: ' touche shift sur ligne: vertical et horizontal IF ABS(y2-y1)<ABS(x2-x1) y2 = y1 ELSE x2 = x1 END_IF SCANCODE = 0 END_IF 2D_LINE x1,y1,x2,y2 RETURN ' ============================================================================== Rectplein: 2D_RECTANGLE x1,y1,x2,y2 RETURN ' ============================================================================== Rectvide: 2D_LINE x1,y1,x2,y1:2D_POLY_TO x2,y2:2D_POLY_TO x1,y2:2D_POLY_TO x1,y1 RETURN ' ============================================================================== Cercplein: 2D_CIRCLE x1,y1,SQR(POWER(x2-x1,2) + POWER(y2-y1,2)) RETURN ' ============================================================================== Cercvide: r = SQR(POWER(x2-x1,2) + POWER(y2-y1,2)): IF r = 0 THEN RETURN x = x1+r: y = y1 pas = 1: IF r>20 THEN pas = 10/r FOR a = pas TO 2*pi+pas STEP pas xa = x1+r*COS(a): ya = y1+r*SIN(a): 2D_LINE x,y,xa,ya: x=xa: y=ya NEXT a RETURN ' ============================================================================== Libre: GOSUB Timoff 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(o2+1) x1 = MOUSE_X_LEFT_DOWN(pic): y1 = MOUSE_Y_LEFT_DOWN(pic) 2D_IMAGE_COPY img(na),0,0,wp%,hp% WHILE MOUSE_LEFT_UP(pic)=0 x2 = MOUSE_X_POSITION(pic): y2 = MOUSE_Y_POSITION(pic) IF x2<>x1 or y2<>y1 2D_LINE x1,y1,x2,y2: x1 = x2: y1 = y2: wait 100 END_IF END_WHILE na = na + 1: IF na > nva THEN na = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp% truc = 0 GOSUB Timon RETURN ' ============================================================================== Remplir: na = na + 1: IF na > nva THEN na = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp%: ' sauvegarde préalable 2D_FLOOD x1,y1,cr,cg,cb truc = 0 RETURN ' ============================================================================== Texte: IF COUNT(102) = 0 THEN RETURN IF CHECKED(280) = 1: ' Rotation texte HIDE 96: GOSUB Timoff PRINT_TARGET_IS picm%: 2D_TARGET_IS picm%: 2D_FILL_COLOR cr,cg,cb font$ = TEXT$(100): fsz% = POSITION(98) FONT_NAME picm%, font$: FONT_SIZE picm%, fsz%: FONT_COLOR picm%, tr,tg,tb FONT_BOLD_OFF picm%: FONT_ITALIC_OFF picm%: FONT_UNDERLINE_OFF picm% IF CHECKED(103) = 1 THEN FONT_BOLD picm% IF CHECKED(104) = 1 THEN FONT_ITALIC picm% IF CHECKED(105) = 1 THEN FONT_UNDERLINE picm% y = 0: i% = 0: j% = TEXT_HEIGHT("Ay",picm%) FOR yt% = 1 TO COUNT(102) txt$ = ITEM_READ$(102, yt%) IF TEXT_WIDTH(txt$,picm%)>i% THEN i%=TEXT_WIDTH(txt$,picm%): ' largeur totale y = y + j% NEXT yt% WIDTH picm%,i%: HEIGHT picm%,y y = 0 FOR yt% = 1 TO COUNT(102) txt$ = ITEM_READ$(102, yt%): PRINT_LOCATE 0,y: PRINT txt$: y = y + j% NEXT yt% FILE_SAVE picm%, fsv$ a$ = "L": IF CHECKED(283) = 1 THEN a$ = "R" ImgRotate(fsv$,"",a$): ' rotation de l'image de 90°, résultat dans clipboard CLIPBOARD_PASTE igtr% WHILE MOUSE_LEFT_DOWN(pic) = 0: WAIT 100: END_WHILE WHILE MOUSE_LEFT_UP(pic) = 0: WAIT 100: END_WHILE x1 = MOUSE_X_POSITION(pic) y1 = MOUSE_Y_POSITION(pic) 2D_TARGET_IS pic 2D_IMAGE_COPY img(na),0,0,wp%,hp%: ' sauvegarde état précédent 2D_IMAGE_PASTE igtr%,x1,y1: ' clipboard -> picture na = na + 1: IF na > nva THEN na = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp% GOSUB Timon RETURN END_IF IF dep% = 0 HIDE 96: GOSUB Timoff font$ = TEXT$(100) fsz% = POSITION(98) IF COUNT(102) = 0 THEN GOSUB Timon: RETURN WHILE MOUSE_LEFT_DOWN(pic) = 0: WAIT 100: END_WHILE WHILE MOUSE_LEFT_UP(pic) = 0: WAIT 100: END_WHILE x1 = MOUSE_X_POSITION(pic) y1 = MOUSE_Y_POSITION(pic) 2D_IMAGE_COPY img(na),0,0,wp%,hp% END_IF IF CHECKED(107) = 1 ' Fond transparent PRINT_TARGET_IS 106 FONT_NAME 106, font$: FONT_SIZE 106, fsz%: FONT_COLOR 106, tr,tg,tb FONT_BOLD_OFF 106: FONT_ITALIC_OFF 106: FONT_UNDERLINE_OFF 106 IF CHECKED(103) = 1 THEN FONT_BOLD 106 IF CHECKED(104) = 1 THEN FONT_ITALIC 106 IF CHECKED(105) = 1 THEN FONT_UNDERLINE 106 2D_TARGET_IS 106: 2D_FILL_COLOR 254,254,254: 2D_TARGET_IS pic FOR yt% = 1 TO COUNT(102) txt$ = ITEM_READ$(102, yt%) PRINT_LOCATE 0,0: PRINT txt$ hc% = TEXT_HEIGHT(txt$,106): lc% = TEXT_WIDTH(txt$,106) FOR j% = 0 TO hc%-1 FOR i% = 0 TO lc%-1 step 1 IF COLOR_PIXEL_RED(106,i%,j%) <> 254 2D_PEN_COLOR tr,tg,tb: 2D_POINT x1+i%, y1+j% END_IF NEXT i% DISPLAY NEXT j% y1 = y1 + hc%: IF y1 > (hp%-15) THEN EXIT_FOR NEXT yt% ELSE ' Fond opaque (couleur de remplissage) PRINT_TARGET_IS pic: 2D_TARGET_IS pic: 2D_FILL_COLOR cr,cg,cb FONT_NAME pic, font$: FONT_SIZE pic, fsz%: FONT_COLOR pic, tr,tg,tb FONT_BOLD_OFF pic: FONT_ITALIC_OFF pic: FONT_UNDERLINE_OFF pic IF CHECKED(103) = 1 THEN FONT_BOLD pic IF CHECKED(104) = 1 THEN FONT_ITALIC pic IF CHECKED(105) = 1 THEN FONT_UNDERLINE pic FOR yt% = 1 TO COUNT(102) txt$ = ITEM_READ$(102, yt%) PRINT_LOCATE x1,y1: PRINT txt$ y1 = y1 + TEXT_HEIGHT(txt$,pic) NEXT yt% END_IF IF dep% = 0 na = na + 1: IF na > nva THEN na = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp% END_IF GOSUB Timon RETURN ' ============================================================================== Txtf: ' Fermeture par la croix (abandon) IF CLICKED(111) = 1 THEN MARK_ON o1+1: ' bouton Annuler HIDE 96: GOSUB Timon RETURN ' ============================================================================== Track: ga% = pOSITION(130): lu% = POSITION(133): co% = POSITION(136) TEXT 131,STR$(ga%):TEXT 134,STR$(lu%):TEXT 137,STR$(co%) IF f$ = "" THEN RETURN FILE_LOAD picm%,f$: GAMMA picm%,ga%: BRIGHTNESS picm%,lu%: CONTRAST picm%,co% CLIPBOARD_COPY picm%: CLIPBOARD_PASTE 150 RETURN ' ============================================================================== Trackp: TEXT 302,STR$(POSITION(303)) RETURN ' ============================================================================== Copyzon: ' copie d'une région pour collage ultérieur 2D_IMAGE_COPY igcp%,x1,y1,x2,y2 RETURN ' ============================================================================== Pastzon: IF CHECKED(o1+11) = 0 THEN RETURN ' collage de la zone copiée 2D_IMAGE_PASTE igcp%,x1,y1 RETURN ' ============================================================================== Dimg: GOSUB Timoff f$ = "" SHOW 115: TO_FOREGROUND 115 RETURN ' ============================================================================== chimg: f$ = FILE_NAME$(90): TEXT 116, f$ IF FILE_EXISTS(f$)=0 THEN f$="": CAPTION 117," -> Fichier non trouvé !": RETURN chimg1: ga% = 0: lu% = 0: co% = 0 POSITION 130,ga%: POSITION 133,lu%: POSITION 136,co% MARK_OFF 140 ImgSize(f$): wi% = rs_w%: hi% = rs_h%: ' largeur et hauteur d'origine de l'image WIDTH picm%,wi%: HEIGHT picm%,hi%: ' pour retouches éventuelles ra = wi%/hi% a$ = STR$(wi%)+" x "+STR$(hi%)+" pixels" a$ = a$+" (= "+STR$(INT(10*wi%/fact)/10)+" x "+STR$(INT(10*hi%/fact)/10)+" mm)" CAPTION 117, a$ i% = wi%/fact: j% = hi%/fact: ' en mm, arrondi au plus proche POSITION 119,wi%: POSITION 120,hi%: POSITION 122,i%: POSITION 123,j% WIDTH 150, 180*ra i% = DLL_Call1("LoadAnyImageFile",ADR(f$)): ' image -> clipboard CLIPBOARD_PASTE 150 RETURN ' ============================================================================== Red1: IF f$ = "" THEN RETURN OFF_CHANGE 119: OFF_CHANGE 120: OFF_CHANGE 122: OFF_CHANGE 123 i% = POSITION(119)/ra: POSITION 120, i% i% = POSITION(119)/fact: j% = POSITION(120)/fact: POSITION 122,i%: POSITION 123,j% GOTO Reda Red2: IF f$ = "" THEN RETURN OFF_CHANGE 119: OFF_CHANGE 120: OFF_CHANGE 122: OFF_CHANGE 123 i% = ra*POSITION(120): POSITION 119, i% i% = POSITION(119)/fact: j% = POSITION(120)/fact: POSITION 122,i%: POSITION 123,j% GOTO reda Red3: IF f$ = "" THEN RETURN OFF_CHANGE 119: OFF_CHANGE 120: OFF_CHANGE 122: OFF_CHANGE 123 i% = POSITION(122)/ra: POSITION 123, i% i% = fact*POSITION(122): j% = fact*POSITION(123): POSITION 119,i%: POSITION 120,j% GOTO Reda Red4: IF f$ = "" THEN RETURN OFF_CHANGE 119: OFF_CHANGE 120: OFF_CHANGE 122: OFF_CHANGE 123 i% = ra*POSITION(123): POSITION 122, i% i% = fact*POSITION(122): j% = fact*POSITION(123): POSITION 119,i%: POSITION 120,j% GOTO Reda Reda: ON_CHANGE 119,Red1: ON_CHANGE 120,Red2: ON_CHANGE 122,Red3: ON_CHANGE 123,Red4 RETURN ' ============================================================================== Images: IF dep% = 0 HIDE 115 a$ = TEXT$(116) IF FILE_EXISTS(a$) = 0 THEN GOTO Imagfi GOSUB Timoff f$ = a$ IF CHECKED(140) = 1 THEN f$ = fsc$: ' l'image a été pivotée WHILE MOUSE_LEFT_DOWN(pic) = 0: WAIT 100: END_WHILE WHILE MOUSE_LEFT_UP(pic) = 0: WAIT 100: END_WHILE x1 = MOUSE_X_POSITION(pic) y1 = MOUSE_Y_POSITION(pic) 2D_IMAGE_COPY img(na),0,0,wp%,hp%: ' sauvegarde état précédent i% = DLL_Call1("LoadAnyImageFile",ADR(f$)): ' fichier image -> clipboard IF ga%<>0 OR lu%<>0 OR co%<>0 ' corrections CLIPBOARD_PASTE picm% GAMMA picm%, ga%: BRIGHTNESS picm%,lu%: CONTRAST picm%,co% CLIPBOARD_COPY picm% END_IF w% = POSITION(119) IF w% <> 0 AND w% <> wi%: ' redimensionnement demandé h% = w%*hi%/wi%: ' proportionnel i% = DLL_Call2("ResizePicture",w%,h%): ' se fait dans le clipboard END_IF CLIPBOARD_PASTE igtr% END_IF 2D_IMAGE_PASTE igtr%,x1,y1: ' clipboard -> picture IF dep% = 0 na = na + 1: IF na > nva THEN na = 1 2D_IMAGE_COPY img(na),0,0,wp%,hp% END_IF Imagfi: GOSUB Timon RETURN ' ============================================================================== Imgf: IF CLICKED(131) = 1 THEN MARK_ON o1+1: ' bouton Annuler ' ou fermeture par la croix, abandon HIDE 115: GOSUB Timon RETURN ' ============================================================================== Coultrac: xa = MOUSE_X_LEFT_DOWN(oct): ya = MOUSE_Y_LEFT_DOWN(oct) j% = INT(ya/hc): i% = INT(xa/lc): c = 2*j% + i%: ' couleur 0 à 15 RESTORE FOR i% = 0 TO c*3: READ tr: NEXT i%: READ tg: READ tb 2D_PEN_COLOR tr,tg,tb COLOR oct+1, tr,tg,tb RETURN ' ============================================================================== Coulfond: xa = MOUSE_X_LEFT_DOWN(ocf): ya = MOUSE_Y_LEFT_DOWN(ocf) j% = INT(ya/hc): i% = INT(xa/lc): c = 2*j% + i%: ' couleur 0 à 15 RESTORE FOR i% = 0 TO c*3: READ cr: NEXT i%: READ cg: READ cb 2D_FILL_COLOR cr,cg,cb COLOR ocf+1, cr,cg,cb RETURN ' ============================================================================== New: GOSUB Timoff i% = MESSAGE_CONFIRMATION_YES_NO("Effacer le dessin en cours ?") IF i% = 1 THEN CLS MARK_ON o1+1 GOSUB Inipara: ' réinit paramètres textes et images modi% = 0 GOSUB Timon RETURN ' ============================================================================== Opn: GOSUB Timoff f$ = FILE_NAME$(90) IF f$ = "_" OR f$ = "" THEN GOSUB Timon: RETURN ImgSize(f$): IF rs_w% > rs_h% THEN orien% = 1: GOSUB Init: ' orientation paysage FILE_LOAD pic, f$: modi% = 0 2D_IMAGE_COPY img(na),0,0,wp%,hp% MARK_ON o1+1 GOSUB Inipara: ' réinit paramètres textes et images GOSUB Timon RETURN ' ============================================================================== Secours: GOSUB Timoff IF FILE_EXISTS(fsc$) = 0 MESSAGE "Sauvegarde de secours non trouvée !" ELSE ImgSize(fsc$): IF rs_w% > rs_h% THEN orien% = 1: GOSUB Init: ' orientation paysage FILE_LOAD pic, fsc$: modi% = 0 2D_IMAGE_COPY img(na),0,0,wp%,hp% MARK_ON o1+1 END_IF GOSUB Inipara: ' réinit paramètres textes et images GOSUB Timon RETURN ' ============================================================================== Carte: ' Base de cartes sur A4 (deux pliables par page) 2D_PEN_COLOR 128,128,128: 2D_PEN_wIDTH 1 2D_LINE wp%/2,0,wp%/2,hp%: 2D_LINE 0,hp%/2,wp%,hp%/2 RETURN ' ============================================================================== Enr: IF f$ = "" OR f$ = "_" THEN GOTO Ens IF UPPER$(RIGHT$(f$, 4)) <> ".BMP" THEN GOTO Ens GOSUB Timoff FILE_SAVE pic, f$: modi% = 0 GOSUB Timon RETURN ' ============================================================================== Ens: ' enregistrement au format bmp exclusivement. GOSUB Timoff m$ = FILE_NAME$(91) IF m$ = "_" OR m$= "" THEN GOSUB Timon: RETURN f$ = m$: IF INSTR(f$,".") < 1 THEN f$ = f$+".bmp" FILE_SAVE pic, f$: modi% = 0 GOSUB Timon RETURN ' ============================================================================== Impr: GOSUB Timoff SHOW 300 RETURN ' ============================================================================== Impr1: HIDE 300 IF CLICKED(311) = 1 THEN GOSUB Timon: RETURN: ' Annulé 2D_TARGET_IS pic ' Modifier le gamma général de la feuille ? IF POSITION(303) <> 0 2D_IMAGE_COPY img(na),0,0,wp%,hp%: ' sauvegarde avant gamma GAMMA pic, POSITION(303) END_IF 2D_IMAGE_COPY igtr%,13,13,wp%-12,hp%-12: FILE_SAVE igtr%, fp$ IF POSITION(303) <> 0 2D_IMAGE_PASTE img(na),0,0: ' restore l'avant gamma GAMMA pic, 0 END_IF HIDE 300 IF wp% > hp% ' Orientation 'paysage' i% = DLL_Call4("PrinterManager",4,ADR(hnd%),ADR(cnv%),1) END_IF i% = DLL_Call4("PrinterManager",1,ADR(hnd%),ADR(cnv%),0): ' init wip% = DLL_Call6("PrinterFunction",8,ADR(hnd%),ADR(cnv%),7,0,0): ' largeur utile (=4812) hip% = DLL_Call6("PrinterFunction",8,ADR(hnd%),ADR(cnv%),8,0,0): ' hauteur utile (=6863) i% = DLL_Call6("PrinterFunction",7,ADR(hnd%),ADR(cnv%),ADR(fp$),wip%,hip%) i% = DLL_Call4("PrinterManager",3,ADR(hnd%),ADR(cnv%),0): ' lancement impression i% = MESSAGE_CONFIRMATION_YES_NO("Suppression du fichier temporaire d'impression ?") IF i% = 1 THEN FILE_DELETE fp$: ' suppression du fichier image GOSUB Timon RETURN ' ============================================================================== Quit: GOSUB Timoff IF modi% = 1 i% = MESSAGE_CONFIRMATION_YES_NO("Ignorer le dessin en cours ?") IF i% <> 1 ' enregistrer GOSUB Enr modi% = 0 GOSUB Timoff END_IF END_IF DLL_OFF TERMINATE ' ============================================================================== Anul: ' annulation en boucle sur nva (=5) éléments na = na - 1: IF na < 1 THEN na = nva 2D_IMAGE_PASTE img(na),0,0 RETURN ' ============================================================================== Dtxt: GOSUB Timoff SHOW 96: TO_FOREGROUND 96 RETURN ' ============================================================================== vfont: IF ITEM_INDEX(97) > 0 THEN font$ = ITEM_INDEX$(97): TEXT 100, font$ fsz% = POSITION(98): FONT_NAME 102, font$: FONT_SIZE 102, fsz% FONT_BOLD_OFF 102: IF CHECKED(103) = 1 THEN FONT_BOLD 102 FONT_ITALIC_OFF 102: IF CHECKED(104)=1 THEN FONT_ITALIC 102 FONT_UNDERLINE_OFF 102: IF CHECKED(105)=1 THEN FONT_UNDERLINE 102 FONT_COLOR 102,tr,tg,tb RETURN ' ============================================================================== Trait_e: HIDE o3: IF POSITION(o2+1) = 1 THEN SHOW o3 RETURN ' ============================================================================== Trait_t: ' Type de trait (seulement pour épaisseur 1 pixel) 2D_TARGET_IS o3: 2D_PEN_COLOR 255,255,255 FOR i% = 5 TO 25 STEP 10: 2D_LINE 0,i%,8,i%: NEXT i% i% = MOUSE_Y_LEFT_DOWN(o3) IF i%<10 j%=5: tpt% = 0: ' trait continu ELSE IF i%<20 j%=15: tpt% = 1: ' tirets ELSE j%=25: tpt% = 2: ' pointillés END_IF END_IF 2D_PEN_COLOR 255,0,0: 2D_LINE 0,j%,8,j% 2D_TARGET_IS pic RETURN ' ============================================================================== Applic: ' application des paramètres 'texte' font$ = TEXT$(100) fsz% = POSITION(98) FONT_NAME 102, font$: FONT_SIZE 102, fsz%: FONT_COLOR 102, tr,tg,tb FONT_BOLD_OFF 102: FONT_ITALIC_OFF 102: FONT_UNDERLINE_OFF 102 IF CHECKED(103) = 1 THEN FONT_BOLD 102 IF CHECKED(104) = 1 THEN FONT_ITALIC 102 IF CHECKED(105) = 1 THEN FONT_UNDERLINE 102 IF CHECKED(288) = 1 AND COUNT(102) > 0: ' centrage FONT_NAME 296,font$: FONT_SIZE 296,POSITION(98) FONT_BOLD_OFF 296: FONT_ITALIC_OFF 296: FONT_UNDERLINE_OFF 296 IF CHECKED(103) = 1 THEN FONT_BOLD 296 IF CHECKED(104) = 1 THEN FONT_ITALIC 296 IF CHECKED(105) = 1 THEN FONT_UNDERLINE 296 j% = 0 FOR i% = 1 TO COUNT(102) a$ = ITEM_READ$(102,i%) w% = TEXT_WIDTH(a$,296) IF w%>j% THEN j%=w% NEXT i% FOR i% = 1 TO COUNT(102) a$ = ITEM_READ$(102,i%): w% = TEXT_WIDTH(a$,296) WHILE w%<j%: a$=" "+a$+" ": w% = TEXT_WIDTH(a$,296): END_WHILE ITEM_DELETE 102,i%: ITEM_INSERT 102,i%,a$ NEXT i% END_IF RETURN ' ==============================================================================- Dimtext: FONT_NAME 296,font$: FONT_SIZE 296,POSITION(98) FONT_BOLD_OFF 296: FONT_ITALIC_OFF 296: FONT_UNDERLINE_OFF 296 IF CHECKED(103) = 1 THEN FONT_BOLD 296 IF CHECKED(104) = 1 THEN FONT_ITALIC 296 IF CHECKED(105) = 1 THEN FONT_UNDERLINE 296 hc% = COUNT(102)*TEXT_HEIGHT("ABC",296): ' hauteur totale texte lc% = 0 IF COUNT(102) > 0 FOR yt% = 1 TO COUNT(102) txt$ = ITEM_READ$(102,yt%) IF TEXT_WIDTH(txt$,296)>lc% THEN lc%=TEXT_WIDTH(txt$,296) NEXT yt% END_IF TEXT 292,STR$(lc%): TEXT 293,STR$(hc%): ' dimensions texte en pixels TEXT 294,STR$(INT(10*lc%/fact)/10): tEXT 295,STR$(INT(10*hc%/fact)/10): ' idem en mm RETURN ' ============================================================================== Deplace: ' Déplacement de la dernière figure tracée d'1 pixel (boutons flèches) IF fig = 6 OR fig = 7 OR fig = 10 THEN RETURN: ' remplir ou tracé libre IF fig=8 AND CHECKED(280) = 1 THEN fig=9: ' texte pivoté GOSUB Timoff i% = NUMBER_CLICK ' a$ = "x1="+STR$(x1)+" y1="+STR$(y1): Trace(1,a$) SELECT i% CASE 402: y1 = y1-1: y2 = y2-1: ' haut CASE 403: y1 = y1+1: y2 = y2+1: ' bas CASE 404: x1 = x1-1: x2 = x2-1: ' gauche CASE 405: x1 = x1+1: x2 = x2+1: ' droite END_SELECT 2D_IMAGE_PASTE img(na-1),0,0: ' image précédente dep% = 1: GOSUB Desfig: dep% = 0 GOSUB Timon RETURN ' ============================================================================== Inipara: ' Réinitialisation des paramètres texte et image TEXT 100,"Arial": POSITION 98,10: ' fonte, taille MARK_OFF 103: MARK_OFF 104: MARK_OFF 105: MARK_OFF 288: MARK_OFF 280 POSITION 130,0: POSITION 133,0: POSITION 136,0 RETURN ' ============================================================================= Rotimage: IF CHECKED(140) = 0 ' rétablir l'image initiale (annuler la rotation) f$ = TEXT$(116): GOSUB chimg1 RETURN END_IF ' Rotation de l'image choisie (90° Gauche ou Droite) a$ = "L": IF CHECKED(443) = 1 THEN a$ = "R" ImgRotate(f$,"",a$): ' rotation dans le clipboard CLIPBOARD_PASTE igtr%: FILE_SAVE igtr%,fsc$ i% = wi%: wi% = hi%: hi% = i% WIDTH picm%,wi%: HEIGHT picm%,hi%: ' pour retouches éventuelles ra = wi%/hi% a$ = STR$(wi%)+" x "+STR$(hi%)+" pixels" a$ = a$+" (= "+STR$(INT(10*wi%/fact)/10)+" x "+STR$(INT(10*hi%/fact)/10)+" mm)" CAPTION 117, a$ i% = wi%/fact: j% = hi%/fact: ' en mm, arrondi au plus proche POSITION 119,wi%: POSITION 120,hi%: POSITION 122,i%: POSITION 123,j% POSITION 130,0: POSITION 133,0: POSITION 136,0 WIDTH 150, 180*ra CLIPBOARD_PASTE 150 RETURN ' ============================================================================== Hlp: GOSUB Timoff a$ = CHR$(10) b$ = CHR$(151) m$ = CHR$(9)+CHR$(9)+CHR$(9)+CHR$(9)+"AIDE"+a$+CHR$(9)+CHR$(9)+CHR$(9)+CHR$(9)+"==="+a$+a$ m$ = m$ + "Modification des paramètres :" + a$ m$ = m$ + STRING$(13,b$) + a$ m$ = m$ + "- Paramètre général : orientation 'Portrait' ou 'Paysage', puis pour chaque" + a$ m$ = m$ + " élément:" + a$ m$ = m$ + "- Largeur de trait: de 1 à 20 pixels" + a$ m$ = m$ + "- Type de trait (seulement si épaisseur 1 pixel): continu, tirets, pointillés"+a$ m$ = m$ + "- Couleur du trait et des textes, ou couleur du fond :" + a$ m$ = m$ + " clic la couleur désirée parmi les 16 couleurs de base." + a$+a$ m$ = m$ + "Dessin des éléments :" + a$ m$ = m$ + STRING$(9,b$) + a$ m$ = m$ + " Clic le départ, maintenir enfoncé, déplacer, relâcher à l'arrivée." + a$ m$ = m$ + "1_ Ligne : Clic le départ, maintenir, relâcher à l'arrivée." + a$ m$ = m$ + CHR$(9)+" (Ligne horizontale ou verticale: maintenir shift enfoncé)."+a$ m$ = m$ + "2_ Rectangle : Clic un coin, maintenir, relâcher au coin opposé." + a$ m$ = m$ + "3_ Cercle : Clic le centre, agrandir au diamètre désiré, relâcher." + a$ m$ = m$ + "4_ Remplir : Remplissage de figures fermées avec la couleur de fond choisie." + a$ m$ = m$ + "5_ Tracé libre : Cliquer le départ, dessiner, relâcher." + a$ m$ = m$ + "6_ Texte : Choisir les paramètres fonte et taille, enrichissements, fond"+a$ m$ = m$ + CHR$(9)+" transparent ou non, entrer ou 'coller' le texte, puis clic 'OK'."+a$ m$ = m$ + CHR$(9)+" Cliquer l'emplacement récepteur (coin supérieur gauche)." + a$ m$ = m$ + "7_ Image : Insertion d'une image quelconque, aux formats BMP, JPG, GIF"+a$ m$ = m$ + CHR$(9)+" ou ICO, à redimensionner éventuellement, ou rectifier la"+a$ m$ = m$ + CHR$(9)+" luminosité (gamma)." + a$ m$ = m$ + CHR$(9)+" Clic 'OK', puis cliquer l'emplacement (coin supérieur gauche)."+a$ m$ = m$ + "8_ Copier/Coller : Recopie d'une zone de la page dans une autre: délimiter la"+a$ m$ = m$ + CHR$(9)+" zone à copier à la souris, relâcher. Cocher 'Coller zone', puis"+a$ m$ = m$ + CHR$(9)+" cliquer le coin haut gauche de la zone de réception."+a$+a$ m$ = m$ + "Après chaque dessin d'élément (sauf remplissage et tracé libre), il est possible"+a$ m$ = m$ + "de déplacer cet élément d'1 pixel à la fois dans les quatre directions par clic"+a$ m$ = m$ + "sur les boutons flèches du bas (zone des commandes)."+a$+a$ m$ = m$ + "Il est possible à tout moment d'afficher une grille au pas de 1 cm. Cette grille"+a$ m$ = m$ + "sera automatiquement effacée au moment du dessin d'élément suivant."+a$+a$ m$ = m$ + "Menu :" + a$ m$ = m$ + STRING$(3,b$) + a$ m$ = m$ + "- Fichier : Fonctions classiques, + rappel de la dernière sauvegarde automatique,"+a$ m$ = m$ + "- Edition : Annulation de la dernière opération (5 niveaux d'annulation)," + a$ m$ = m$ + CHR$(9)+" ou Effacement total de la page." + a$ m$ = m$ + CHR$(9)+" Tracé des deux axes médians, horizontal et vertical (pliage)."+ a$ m$ = m$ + "- Aide : Affichage de ce texte." + a$ + a$ m$ = m$ + "Remarques :" + a$ m$ = m$ + STRING$(5,b$) + a$ m$ = m$ + "- Après chaque dessin d'élément, une sauvegarde de sécurité est effectuée."+a$ m$ = m$ + " Il est ainsi possible en cas de plantage ou autre motif de repartir du"+a$ m$ = m$ + " dessin qui était en cours (menu 'Fichier', 'Ouvrir la sauvegarde')."+a$ m$ = m$ + "- L'enregistrement éventuel de l'image de la page ('Fichier', 'Enregistrer')" + a$ m$ = m$ + " se fera au format BMP, pour reprise ultérieure éventuelle." + a$ m$ = m$ + "- L'impression ('Fichier', 'Imprimer') se fait de manière transparente, dès" + a$ m$ = m$ + " le clic sur le bouton 'Imprimer' (imprimante supposée prête)." + a$ m$ = m$ + "- Le petit rectangle en haut à gauche clignote quand le timer est actif"+a$ m$ = m$ + " (en attente de clic dans la page)." + a$ m$ = m$ + "- Les coordonnées du curseur sont affichées en permanence dans le bandeau"+a$ m$ = m$ + " supérieur, en pixels et en millimètres."+a$ m$ = m$ + "- Ressources externes : KGF.dll pour les images et l'impression."+a$ MESSAGE m$ GOSUB Timon RETURN ' ============================================================================== SUB ImgSize(f$) IF VARIABLE("rs_w%") = 0 THEN DIM rs_w% IF VARIABLE("rs_h%") = 0 THEN DIM rs_h% i% = DLL_Call3("AnalyzeImageFile",ADR(f$),adr(rs_w%),ADR(rs_h%)): ' -> w% x h% END_SUB ' ============================================================================== SUB Trace(n,a$) ' Debug: affichage du texte a$ au point (ou n° de ligne) n IF OBJECT_EXISTS(800) = 0 FORM 800: LEFT 800,wIDTH(0): WIDTH 800,150: HEIGHT 800,100: BORDER_SMALL 800 END_IF IF OBJECT_EXISTS(801)=0 MEMO 801: PARENT 801,800: FULL_SPACE 801: COLOR 801,255,255,0: FONT_BOLD 801 END_IF ITEM_ADD 801,STR$(n)+": "+a$ TO_FOREGROUND 800 END_SUB ' ============================================================================== SUB ImgRotate(f$,fr$,LR$) ' Rotation d'une image f$ de 90° à gauche (L) ou à droite (R) ' résultat dans le fichier fr$, ou clipboard si fr$ = "" i% = DLL_Call1("LoadAnyImageFile",ADR(f$)): ' image -> clipboard i% = DLL_Call0("LoadPicture"): ' clipboard -> image interne IF LR$ = "R" i% = DLL_Call0("Rotate90"): ' rotation 90° à droite ELSE i% = DLL_Call0("RotateM90"): ' rotation 90° à gauche END_IF i% = DLL_Call0("SavePicture"): ' récupération de l'image interne -> clipboard IF fr$ <> "" THEN i% = DLL_Call1("SaveAnyImageFile",ADR(fr$)): ' clipboard->fr$ END_SUB ' ==============================================================================
Edit 28/01 et 29/01Edit 02/02
Dernière édition par JL35 le Dim 2 Fév 2014 - 20:42, édité 2 fois | |
|