JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Encore du dessin Lun 2 Jan 2017 - 15:32 | |
| Après quelques déboires en essayant de mettre les nouvelles fonctions souris de Jack dans une sub, finalement j'en ai fait un programme à part entière. Le but est de dessiner dans un picture (ici au format A4, ou inférieur, suivant le moniteur), pour faire par exemple des cartes de voeux, des menus, etc. J'ai utilisé les dernières fonctions de Panoramic pour gérer la souris, rudement pratiques dans ce genre d'application pour éviter le recours à des Timers qui causent bien des problèmes de synchronisme. Merci Jack pour ce cadeau de fin d'année ! Le programme est entièrement Panoramic et ne fait appel à aucune ressource externe, le seul paramètre à vérifier est fm$, ligne 7, chemin d'un fichier temporaire (C:\TEMP\...). Je n'ai pas mis de fonction d'impression, mais ça peut se faire facilement facilement ailleurs avec le fichier-image résultat sauvegardé. (et on peut le rajouter soi-même si on veut en faisant appel à KGF.dll, mais ça alourdit pas mal, c'est pour ça que je ne l'ai pas mis). Il y a un bouton d'aide succincte ('?' en haut à gauche). - Code:
-
' Dessin sur A4 LABEL Chfig,Posit,Clic,Clim,Fclic,Desfi,Desfi1,cas3,cas5,Chcol,Deplace,Rszt,Chpol LABEL Valpo,Valtx,Chimg,Red1,Red2,Redima,Annul,Grille,Grill1,Reini,Lirsav,Aide,Quit DIM lb%,wp%,hp%,i%,j%,x1%,y1%,x2%,y2%,x%,y%,p%,fig%,sp%,sq%,pic%,pi%,co%,tr%,tg%,tb% DIM bd%,ps%,reg%,tg,an,rx%,ry%,fm$,sfig%,gr%,wb%,wh%,tab$,wt%,ht%,pb%,pp%,wi%,hi% DIM ft%,wf%,edt%,szt%,mmt%,lst%,pit%,fi%,od%,sd%,im%,a$,b$,rt%,gt%,bt%,fg%,bts% DIM sp1%,sp2%,pg% fm$ = "C:\TEMP\Provy.bmp" lb% = 90: ' largeur de la boîte à outils à gauche hp% = 1100: IF SCREEN_Y < 1162 THEN hp% = SCREEN_Y-62 wp% = hp%*210/297: ' picture proportions A4 BORDER_SMALL 0 wb% = WIDTH(0)-WIDTH_CLIENT(0): wh% = HEIGHT(0)-HEIGHT_CLIENT(0): ' bordures WIDTH 0,lb%+wp%+wb%: HEIGHT 0,hp%+wh%: COLOR 0,180,255,255 FONT_NAME 0,"Arial": FONT_BOLD 0 tab$ = "Page: "+STR$(wp%)+" x "+STR$(hp%)+STRING$(10," "): CAPTION 0,tab$ p% = 1 : PICTURE p%: LEFT p%,lb%: WIDTH p%,wp%: HEIGHT p%,hp%: 2D_TARGET_IS p% i%=p%+1: PROGRESS_BAR i%: TOP i%,HEIGHT(p%)-18: LEFT i%,LEFT(p%): WIDTH i%,WIDTH(p%) HIDE i%: pb%=i% i%=i%+1: BUTTON i%: WIDTH i%,25: HEIGHT i%,15: LEFT i%,1: CAPTION i%,"?": ON_CLICK i%,Aide
i%=i%+1: BUTTON i%: TOP i%,20: LEFT i%,5: CAPTION i%,"Ouvrir": bts%=i% i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+30: LEFT i%,LEFT(i%-1): CAPTION i%,"Enregistrer" ON_CLICK bts%,Lirsav: ON_CLICK i%,Lirsav i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+30: LEFT i%,LEFT(i%-1): CAPTION i%,"Quitter": ON_CLICK i%,Quit
i%=i%+1: ALPHA i%: TOP i%,TOP(i%-1)+40: CAPTION i%,"Ep. Trait:" i%=i%+1: SPIN i%: TOP i%,TOP(i%-1)-4: LEFT i%,50: WIDTH i%,35: sp% = i% MIN i%,1: MAX i%,20: POSITION i%,1 i%=i%+1: ALPHA i%: TOP i%,TOP(i%-2)+25: CAPTION i%,"Couleur:" i%=i%+1: PICTURE i%: TOP i%,TOP(i%-1)-3: LEFT i%,50: WIDTH i%,35: HEIGHT i%,21: COLOR i%,0,0,0 pic% = i%
i%=i%+1: PICTURE i%: TOP i%,TOP(i%-1)+25: LEFT i%,5: WIDTH i%,lb%-10: HEIGHT i%,160: pi%=i% j%=WIDTH(i%)/2: 2D_TARGET_IS i%: ON_CLICK pi%,Chcol: ' palette de 16 couleurs 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 0,0,j%,20 2D_FILL_COLOR 128,128,128: 2D_RECTANGLE j%,0,2*j%,20 2D_FILL_COLOR 192,192,192: 2D_RECTANGLE 0,20,j%,40 2D_FILL_COLOR 255,255,255: 2D_RECTANGLE j%,20,2*j%,40 2D_FILL_COLOR 128,0,0: 2D_RECTANGLE 0,40,j%,60 2D_FILL_COLOR 255,0,0: 2D_RECTANGLE j%,40,2*j%,60 2D_FILL_COLOR 0,128,128: 2D_RECTANGLE 0,60,j%,80 2D_FILL_COLOR 0,255,255: 2D_RECTANGLE j%,60,2*j%,80 2D_FILL_COLOR 0,128,0: 2D_RECTANGLE 0,80,j%,100 2D_FILL_COLOR 0,255,0: 2D_RECTANGLE j%,80,2*j%,100 2D_FILL_COLOR 128,0,128: 2D_RECTANGLE 0,100,j%,120 2D_FILL_COLOR 255,0,255: 2D_RECTANGLE j%,100,2*j%,120
2D_FILL_COLOR 0,0,128: 2D_RECTANGLE 0,120,j%,140 2D_FILL_COLOR 0,0,255: 2D_RECTANGLE j%,120,2*j%,140 2D_FILL_COLOR 128,64,0: 2D_RECTANGLE 0,140,j%,160 2D_FILL_COLOR 255,255,0: 2D_RECTANGLE j%,140,2*j%,160 i%=i%+1: CONTAINER_OPTION i%: TOP i%,TOP(i%-1)+170: WIDTH i%,lb%-3: HEIGHT i%,210: co%=i% CAPTION i%,"---- Figure : ---": COLOR i%,255,255,180 i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,18: LEFT i%,5: CAPTION i%,"Libre" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Trait" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Rectangle" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,15: CAPTION i%,"Id. plein" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Ellipse" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,15: CAPTION i%,"Id. pleine" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Remplir" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Texte" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Image" i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Grille" MARK_ON co%+2: fig% = 2: ' trait FOR j% = co%+1 TO co%+10: ON_CLICK j%,Chfig: NEXT j% i%=i%+1: ALPHA i%: TOP i%,TOP(co%)+HEIGHT(co%)+10: CAPTION i%,"Dépl: pix" i%=i%+1: SPIN i%: TOP i%,TOP(i%-1)-3: LEFT i%,28: WIDTH i%,40: POSITION i%,5: sq% = i% j% = lb%/4-2 i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+25: LEFT i%,2: WIDTH i%,j%: CAPTION i%,CHR$(231): bd%=i% i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+j%+1: WIDTH i%,j%: CAPTION i%,CHR$(232) i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+j%+1: WIDTH i%,j%: CAPTION i%,CHR$(233) i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+j%+1: WIDTH i%,j%: CAPTION i%,CHR$(234) FOR j%=bd% TO bd%+3: FONT_NAME j%,"Wingdings": ON_CLICK j%,Deplace: NEXT j% i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+35: LEFT i%,0: WIDTH i%,lb% CAPTION i%,"Annul dernier": ON_CLICK i%,Annul ' === FORM Textes === ft%=i%+1: wf%=240: FORM ft%: HIDE ft%: BORDER_SMALL ft%: TOP ft%,TOP(bd%)+50 LEFT ft%,0: WIDTH ft%,wf%: HEIGHT ft%,300: CAPTION ft%," - TEXTE -" COLOR ft%,164,255,255: FONT_BOLD ft%: ON_RESIZE ft%,Rszt: ON_CLOSE ft%,Reini i%=ft%+1: ALPHA i%: PARENT i%,ft%: TOP i%,4: LEFT i%,5: CAPTION i%,"Police:" i%=i%+1: EDIT i%: PARENT i%,ft%: TOP i%,1: LEFT i%,40: WIDTH i%,130: edt% = i% TEXT i%,"Arial": ON_CLICK i%,Chpol i%=i%+1: SPIN i%: PARENT i%,ft%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+5: szt%=i% WIDTH i%,45: MIN i%,6: MAX i%,255: POSITION i%,12: ON_CHANGE i%,Valpo i%=i%+1: CHECK i%: PARENT i%,ft%: TOP i%,25: LEFT i%,40: CAPTION i%,"Gras" i%=i%+1: CHECK i%: PARENT i%,ft%: TOP i%,25: LEFT i%,85: CAPTION i%,"Italique" i%=i%+1: CHECK i%: PARENT i%,ft%: TOP i%,25: WIDTH i%,65: LEFT i%,152: CAPTION i%,"Souligné" FOR j% = szt%+1 TO i%: ON_CLICK j%,Valpo: NEXT j% i%=i%+1: MEMO i%: PARENT i%,ft%: TOP i%,47: LEFT i%,0: WIDTH i%,wf%-wb%: mmt%=i% HEIGHT i%,HEIGHT(ft%)-100: FONT_NAME i%,TEXT$(edt%): FONT_SIZE i%,POSITION(szt%) i%=i%+1: LIST i%: PARENT i%,ft%: HIDE i%: TOP i%,TOP(mmt%): WIDTH i%,200: ' liste polices HEIGHT i%,HEIGHT(mmt%): FONT_NAMES_LOAD i%: ON_CLICK i%,Valpo: lst%=i% COLOR lst%,255,255,180 FOR j% = COUNT(lst%) TO 1 STEP -1: ' suppression des polices '@...' inutiles IF LEFT$(ITEM_READ$(lst%,j%),1) = "@" THEN ITEM_DELETE lst%,j% NEXT j% i%=i%+1: PICTURE i%: PARENT i%,ft%: HIDE i%: pit%=i% ' === FORM Images === fi%=i%+1: FORM fi%: HIDE fi%: BORDER_SMALL fi%: TOP fi%,TOP(ft%) LEFT fi%,0: WIDTH fi%,340: HEIGHT fi%,260: FONT_BOLD fi% CAPTION fi%," - IMAGE -": COLOR fi%,164,255,255: ON_CLOSE fi%,Reini i%=fi%+1: ALPHA i%: PARENT i%,fi%: TOP i%,3: LEFT i%,2: CAPTION i%,"Image:" i%=i%+1: EDIT i%: PARENT i%,fi%: TOP i%,1: LEFT i%,40: WIDTH i%,WIDTH(fi%)-60 ON_CLICK i%,Chimg: ' fi%+2 pp% = 200: ' dimensions aperçu image i%=i%+1: PICTURE i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+25: WIDTH i%,pp%: HEIGHT i%,pp% STRETCH_ON i%: pg% = i% i%=i%+1: ALPHA i%: PARENT i%,fi%: TOP i%,TOP(pg%)+10: LEFT i%,pp%+15: a$=CHR$(10) CAPTION i%,"Redimensionner:"+a$+"(proportionnel)"+a$+a$+" X" i%=i%+1: SPIN i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+36: LEFT i%,LEFT(i%-1)-8: WIDTH i%,52 sp1% = i%: ON_CHANGE sp1%,Red1 i%=i%+1: SPIN i%: PARENT i%,fi%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+62: WIDTH i%,52 sp2%=i%: ON_CHANGE sp2%,Red2 i%=i%+1: BUTTON i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+30: LEFT i%,pp%+30 CAPTION i%,"Redim.": ON_CLICK i%,Redima i%=i%+1: ALPHA i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+80: LEFT i%,pp%+7 CAPTION i%,"Clic dans le dessin"+CHR$(10)+"pour insérer l'image" COLOR i%,255,255,0
i%=i%+1: OPEN_DIALOG i%: od% = i% i%=i%+1: SAVE_DIALOG i%: sd% = i% i%=i%+1: IMAGE i%: im% = i% ' === FORM Grille === fg%=i%+1: FORM fg%: HIDE fg%: BORDER_SMALL fg%: TOP fg%,TOP(ft%) LEFT fg%,0: WIDTH fg%,120: HEIGHT fg%,120: FONT_BOLD fg%: COLOR fg%,190,255,255 ON_CLOSE fg%,Grill1 i%=fg%+1: ALPHA i%: PARENT i%,fg%: TOP i%,5: LEFT i%,1 CAPTION i%,"Grille: pix." i%=i%+1: SPIN i%: PARENT i%,fg%: TOP i%,2: LEFT i%,35: WIDTH i%,48: POSITION i%,100 i%=i%+1: BUTTON i%: PARENT i%,fg%: TOP i%,TOP(i%-1)+28: LEFT i%,15: CAPTION i%,"OK" ON_CLICK i%,Grille i%=i%+1: BUTTON i%: PARENT i%,fg%: TOP i%,TOP(i%-1)+28 LEFT i%,LEFT(i%-1): CAPTION i%,"Supprimer" ON_CLICK i%,Grille
2D_TARGET_IS p%: 2D_FILL_OFF ON_MOUSE_MOVE p%,Posit ON_MOUSE_DOWN p%,Clic ' ============================================================================== END: ' ========================================================================= ' ============================================================================== Chfig: FOR i% = co%+1 TO co%+9 IF CHECKED(i%) = 1 THEN EXIT_FOR: ' figure courante NEXT i% sfig% = fig%: fig% = i%-co% IF fig% < 8 HIDE ft%: HIDE fi%: HIDE fg% ELSE IF fig% = 8 THEN SHOW ft%: TO_FOREGROUND ft%: ' insertion texte IF fig% = 9 THEN SHOW fi%: TO_FOREGROUND fi%: ' insertion image IF fig% = 10 THEN SHOW fg%: TO_FOREGROUND fg%: ' dessin grille END_IF RETURN ' ============================================================================== Posit: x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%) CAPTION 0,tab$+"X= "+STR$(x%)+" Y= "+STR$(y%)+" pixels." RETURN ' ============================================================================== Clic: x1% = MOUSE_X_POSITION(p%): y1% = MOUSE_Y_POSITION(p%) 2D_PEN_DOT: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0: 2D_FILL_OFF: CLIPBOARD_COPY p% IF fig%>6 IF fig% = 7: ' remplir 2D_FLOOD x1%,y1%,tr%,tg%,tb%: OFF_MOUSE_UP p% ELSE IF fig% = 8: ' insertion texte GOSUB Valtx: ' Insertion texte TO_FOREGROUND ft% ELSE: ' insertion image 2D_IMAGE_PASTE im%,x1%,y1%: ' insertion image TO_FOREGROUND fi% END_IF END_IF ELSE ON_MOUSE_MOVE p%,Clim: ON_MOUSE_UP p%,Fclic END_IF RETURN ' ============================================================================== Clim: a$ = tab$+"X1= "+STR$(x1%)+" Y1= "+STR$(y1%) a$ = a$+" -> X= "+STR$(x%)+" Y= "+STR$(y%)+" pixels." CAPTION 0,a$ GOSUB Desfi RETURN ' ============================================================================== Fclic: OFF_MOUSE_MOVE p% 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(sp%): 2D_PEN_COLOR tr%,tg%,tb% IF fig% = 4 THEN 2D_FILL_COLOR tr%,tg%,tb%: 2D_FILL_ON: ' rectangle plein GOSUB Desfi IF fig% = 6 THEN 2D_FLOOD x2%,y2%,tr%,tg%,tb%: ' ellipse pleine OFF_MOUSE_UP p% ON_MOUSE_MOVE p%,Posit RETURN ' ============================================================================== Desfi: x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%) reg% = 0: IF SCANCODE = 160 THEN reg% = 1: SCANCODE = 0 Desfi1: CLIPBOARD_PASTE p% SELECT fig% CASE 1: 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(sp%): 2D_PEN_COLOR tr%,tg%,tb% 2D_LINE x1%,y1%,x%,y%: x1% = x%: y1% = y% CLIPBOARD_COPY p% CASE 2: IF reg% = 1: ' touche Maj enfoncée i% = x%-x1%: j% = y%-y1% IF i%<>0 AND j%<>0 tg = ABS(j%/i%) IF tg<.4 y% = y1%: ' ligne horizontale ELSE IF tg>2.35: ' ligne verticale x% = x1% ELSE: ' ligne à 45° IF x% > x1% IF y% > y1% y% = x%-x1%+y1%: ' vers bas à droite ELSE y% = y1%-x%+x1%: ' vers haut à droite END_IF ELSE IF y%>y1% x% = x1%-y%+y1% : ' vers bas à gauche ELSE x% = x1%-y1%+y%: ' vers haut à gauche END_IF END_IF END_IF END_IF END_IF END_IF 2D_LINE x1%,y1%,x%,y%: ' Ligne droite CASE 3: ' rectangle (ou carré si Maj enfoncé) cas3: IF reg% = 1 THEN y% = y1%+(x%-x1%): ' carré 2D_RECTANGLE x1%,y1%,x%,y% CASE 4: GOTO cas3: ' plein CASE 5: ' ellipse (ou cercle si Maj enfoncé) cas5: rx% = (x%-x1%)/2: ry% = (y%-y1%)/2: ' rayons H et V IF reg% = 1 THEN ry% = rx%: ' cercle x2% = x1%+rx%: y2% = y1%+ry%: ' centre IF ry% = rx% 2D_CIRCLE x2%,y2%,rx% ELSE 2D_POLY_FROM x2%+rx%,y2% FOR an = 0 TO 2*PI STEP PI/180 2D_POLY_TO x2%+rx%*COS(an),y2%+ry%*SIN(an) NEXT an END_IF CASE 6: GOTO cas5: ' ellipse pleine CASE 7: ' remplir CASE 8: GOSUB Valtx: ' texte (déplacement du texte) CASE 9: 2D_IMAGE_PASTE im%,x1%,y1%: ' déplacement de l'image END_SELECT 2D_FILL_OFF RETURN ' ============================================================================== Chcol: x% = MOUSE_X_POSITION(pi%): y% = MOUSE_Y_POSITION(pi%) tr% = COLOR_PIXEL_RED(pi%,x%,y%): tg% = COLOR_PIXEL_GREEN(pi%,x%,y%) tb% = COLOR_PIXEL_BLUE(pi%,x%,y%): COLOR pic%,tr%,tg%,tb% 2D_PEN_COLOR tr%,tg%,tb%: 2D_FILL_COLOR tr%,tg%,tb% FONT_COLOR mmt%,tr%,tg%,tb%: IF fig% = 8 THEN TO_FOREGROUND ft% RETURN ' ============================================================================== Deplace: ps% = POSITION(sq%): ' pas de déplacement j% = NUMBER_CLICK: ' sq%+1 à sq%+4: gauche, droite, haut, bas IF j% = sq%+1 x1% = x1%-ps%: x% = x%-ps% ELSE IF j% = sq%+2 x1% = x1%+ps%: x% = x%+ps% ELSE IF j% = sq%+3 y1% = y1%-ps%: y% = y%-ps% ELSE y1% = y1%+ps%: y% = y%+ps% END_IF END_IF END_IF 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(sp%): 2D_PEN_COLOR tr%,tg%,tb% GOSUB Desfi1 RETURN ' ============================================================================== Chimg: a$ = FILE_NAME$(od%) b$ = UPPER$(FILE_EXTRACT_EXTENSION$(a$)) IF b$<>".BMP" AND b$<>".JPG" THEN MESSAGE "Doit être .BMP ou .JPG": RETURN TEXT fi%+2,a$: ' fichier image IF b$ = ".JPG" b$ = fm$: FILE_LOAD pit%,a$: FILE_SAVE pit%,b$: a$ = b$ END_IF FILE_LOAD im%,a$: ' -> Image FILEBIN_OPEN_READ 9,a$: FILEBIN_POSITION 9,18: wi%=FILEBIN_READ(9)+256*FILEBIN_READ(9) FILEBIN_POSITION 9,22: hi%=FILEBIN_READ(9)+256*FILEBIN_READ(9): FILEBIN_CLOSE 9 IF wi%>hi% WIDTH pg%,pp%: HEIGHT pg%,pp%*hi%/wi% ELSE HEIGHT pg%,pp%: WIDTH pg%,pp%*wi%/hi% END_IF FILE_LOAD pg%,a$ POSITION sp1%,wi%: POSITION sp2%,hi% RETURN ' ============================================================================== Red1: i% = POSITION(sp1%): POSITION sp2%,i%*hi%/wi% RETURN Red2: i% = POSITION(sp2%): POSITION sp1%,i%*wi%/hi% RETURN ' ============================================================================== Redima: i% = POSITION(sp1%): j% = POSITION(sp2%) a$ = TEXT$(fi%+2) RedimImg(a$,i%,j%,fm$) FILE_LOAD im%,fm$ RETURN ' ============================================================================== Rszt: ' ajustement manuel de la boîte 'Texte' WIDTH mmt%,WIDTH(ft%)-wb%: HEIGHT mmt%,HEIGHT(ft%)-85: ' memo de saisie RETURN ' ============================================================================== Chpol: SHOW lst% RETURN ' ============================================================================== Valpo: HIDE lst% IF CLICKED(edt%) = 1 THEN TEXT edt%,ITEM_INDEX$(lst%) FONT_NAME mmt%,TEXT$(edt%): FONT_SIZE mmt%,POSITION(szt%) FONT_BOLD_OFF mmt%: FONT_ITALIC_OFF mmt%: FONT_UNDERLINE_OFF mmt% IF CHECKED(szt%+1) = 1 THEN FONT_BOLD mmt% IF CHECKED(szt%+2) = 1 THEN FONT_ITALIC mmt% IF CHECKED(szt%+3) = 1 THEN FONT_UNDERLINE mmt% RETURN ' ============================================================================== Valtx: ' transfert du texte TO_FOREGROUND ft% WIDTH pit%,900: HEIGHT pit%,500 FONT_NAME pit%,TEXT$(edt%): FONT_SIZE pit%,POSITION(szt%): FONT_COLOR pit%,tr%,tg%,tb% FONT_BOLD_OFF pit%: FONT_ITALIC_OFF pit%: FONT_UNDERLINE_OFF pit% IF CHECKED(szt%+1) = 1 THEN FONT_BOLD pit% IF CHECKED(szt%+2) = 1 THEN FONT_ITALIC pit% IF CHECKED(szt%+3) = 1 THEN FONT_UNDERLINE pit% PRINT_TARGET_IS pit%: 2D_TARGET_IS pit%: COLOR pit%,250,255,255: CLS 2D_FILL_COLOR 250,255,255: 2D_TARGET_IS p% wt% = 0: ht% = 0 FOR i% = 1 TO COUNT(mmt%) a$ = ITEM_READ$(mmt%,i%): PRINT_LOCATE 0,ht%: PRINT a$ j% = TEXT_WIDTH(a$,pit%): IF j%>wt% THEN wt%=j%: ' j% = largeur maxi texte ht% = ht%+TEXT_HEIGHT(a$,pit%): ' y% = hauteur totale texte NEXT i% PRINT_TARGET_IS 0 WIDTH pit%,wt%: HEIGHT pit%,ht% MIN pb%,0: MAX pb%,ht%: SHOW pb% FOR y% = 0 TO HEIGHT(pit%)-1 POSITION pb%,y%: ' progress_bar FOR x% = 0 TO WIDTH(pit%)-1 rt% = COLOR_PIXEL_RED(pit%,x%,y%) IF rt%<>250 gt% = COLOR_PIXEL_GREEN(pit%,x%,y%): bt% = COLOR_PIXEL_BLUE(pit%,x%,y%) 2D_PEN_COLOR rt%,gt%,bt%: 2D_POINT x1%+x%,y1%+y% END_IF NEXT x% ' DISPLAY NEXT y% HIDE pb% RETURN ' ============================================================================== Annul: CLIPBOARD_PASTE p% IF fig% = 8 THEN TO_FOREGROUND ft% IF fig% = 9 THEN TO_FOREGROUND fi% RETURN ' ============================================================================== Grille: j% = NUMBER_CLICK IF j% = fg%+3: ' tracé de la grille IF gr% = 0 FILE_SAVE p%,fm$ 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 1: 2D_PEN_DOT ps% = POSITION(fg%+2): ' pas de la grille FOR i% = ps% TO WIDTH(p%) STEP ps% 2D_LINE i%,0,i%,HEIGHT(p%) NEXT i% FOR j% = ps% TO HEIGHT(p%) STEP ps% 2D_LINE 0,j%,WIDTH(p%),j% NEXT j% gr% = 1 END_IF ELSE: ' supprimer la grille (bouton ou fermer) Grill1: FILE_LOAD p%,fm$: gr% = 0 HIDE fg%: MARK_ON co%+sfig%: ' retour choix précédent FILE_DELETE fm$ END_IF RETURN ' ============================================================================== Reini: MARK_ON co%+2 RETURN ' ============================================================================== Lirsav: j% = NUMBER_CLICK IF j% = bts%: ' lecture FILTER od%,"*.BMP;*.JPG" a$ = FILE_NAME$(od%) FILE_LOAD pit%,a$: FILE_SAVE pit%,fm$ FILEBIN_OPEN_READ 1,fm$ FILEBIN_POSITION 1,18: x% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_POSITION 1,22: y% = FILEBIN_READ(1)+256*FILEBIN_READ(1) FILEBIN_CLOSE 1 FILE_LOAD im%,fm$: FILE_DELETE fm$ 2D_IMAGE_PASTE im%,0,0: ' image dans le picture principal CAPTION 0,a$+" ( "+STR$(x%)+" x "+STR$(y%)+" pixels)" ELSE: ' sauvegarde FILTER sd%,"*.BMP" a$ = FILE_NAME$(sd%) FILE_SAVE p%,a$: CAPTION 0,a$ END_IF RETURN ' ============================================================================== Aide: b$ = CHR$(13)+CHR$(10) a$ = "- DESSIN -"+b$+b$ a$=a$+"Dessin sur format A4."+b$ a$=a$+"Choisir l'épaisseur de trait et la couleur du dessin en cliquant dans la palette"+b$ a$=a$+"de 16 couleurs. La couleur active s'affiche dans le rectangle 'Couleur'."+b$+b$ a$=a$+"Figures disponibles :"+b$ a$=a$+" (choisir l'option, cliquer l'emplacement de départ de la figure, glisser, relâcher)."+b$ a$=a$+"- Libre: dessin à main levée, le tracé suit le déplacement de la souris."+b$ a$=a$+"- Trait: tracé d'une droite."+b$ a$=a$+"- Rectangle: tracé d'un rectangle ou carré (vide ou plein de la couleur courante)."+b$ a$=a$+"- Ellipse: tracé d'une ellipse ou cercle, vide ou pleine (le point de départ"+b$ a$=a$+" cliqué est un coin du rectangle enveloppe)."+b$ a$=a$+"- Remplissage: remplir une figure fermée de la couleur courante (cliquer un point"+b$ a$=a$+" de la zone à remplir)."+b$ a$=a$+"- Texte: saisie et insertion d'un texte au clic dans la zone de dessin."+b$ a$=a$+" A noter: on peut agrandir à volonté la zone de saisie du texte."+b$ a$=a$+"- Image: insertion d'une image (jpg, bmp) au clic dans la zone de dessin."+b$ a$=a$+"- Grille: tracé provisoire d'une grille repère, de largeur choisie."+b$+b$ a$=a$+"Usage de la touche 'Maj', enfoncée pendant le tracé d'une des figures suivantes :"+b$ a$=a$+"- Trait: la droite tracée sera verticale, horizontale, ou inclinée à 45°."+b$ a$=a$+"- Rectangle: le tracé sera un carré."+b$ a$=a$+"- Ellipse: le tracé sera un cercle."+b$+b$ a$=a$+"Les coordonnées de la souris en pixels sont affichées en permanence dans le bandeau"+b$ a$=a$+"du haut."+b$+b$ a$=a$+"Le tracé provisoire se fait en pointillés pendant l'appui, en suivant le mouvement de"+b$ a$=a$+"la souris. Le tracé définitif (avec couleur et épaisseur du trait définis) se fait au"+b$ a$=a$+"relâchement du bouton de la souris."+b$ a$=a$+"Il est possible à ce moment de déplacer la figure d'une quantité donnée de pixels dans"+b$ a$=a$+"toutes les directions à l'aide des boutons flèches, ou d'annuler le dernier tracé (bouton"+b$ a$=a$+"'Annul dernier'). Une seule annulation est possible."+b$+b$ a$=a$+"Insertion de texte : elle se fait avec 'fond transparent', pixel par pixel, donc pas très"+b$ a$=a$+"rapide, mais à évolution visible."+b$+b$ a$=a$+"On peut enregistrer pour usage ultérieur (réutilisation, impression) le résultat dans un"+b$ a$=a$+"fichier au format BMP (bouton 'Enregistrer'), ou recharger une image précédemment"+b$ a$=a$+"sauvegardée (bouton 'Ouvrir')."+b$ MESSAGE a$ RETURN ' ============================================================================== Quit: TERMINATE RETURN ' ============================================================================== SUB RedimImg(f$,w%,h%,fr$) ' Redimensionne l'image f$ (JPG,BMP) en w%xh%. Si h%=0: redimension proportionnelle ' résultat dans fr$ (BMP) ou clipboard si fr$ = "" ' L'image résultante doit pouvoir tenir en entier dans l'écran DIM_LOCAL n2d%,fo%,p%,w0%,h0%,r%,fm$,wi%,hi%: n2d% = NUMBER_2D_TARGET fm$ = "C:\Temp\Ryry.bmp" p% = 900 IF h% = 0 PICTURE p%: HIDE p%: FILE_LOAD p%,f$: FILE_SAVE p%,fm$: DELETE p% FILEBIN_OPEN_READ 1,fm$: ' dimensions réelles de l'image f$ 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$ h% = w%*hi%/wi% END_IF fo%=900: FORM fo%: BORDER_HIDE fo%: WIDTH fo%,w%: HEIGHT fo%,h%: TO_FOREGROUND fo% p%=fo%+1: PICTURE p%: PARENT p%,fo%: FULL_SPACE p%: STRETCH_ON p%: FILE_LOAD p%,f$ IMAGE p%+1 2D_TARGET_IS fo%: 2D_IMAGE_COPY p%+1,0,0,w%,h%: 2D_TARGET_IS n2d%: DELETE fo% CLIPBOARD_COPY p%+1: IF fr$<>"" THEN FILE_SAVE p%+1,fr$ DELETE p%+1 END_SUB ' =============================================================================== Edit 2/1 23h00 correction de petits bugsEdit 3/1 petits bugs, et ajout de la possibilité de redimensionner les images avant insertion
Dernière édition par JL35 le Mar 3 Jan 2017 - 20:44, édité 2 fois | |
|