Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Menus et Cartes | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Menus et Cartes Mer 31 Déc 2014 - 17:19 | |
| Le dernier de l'année, tant pis si ça passe un peu inaperçu... La représentation d'une page A4, soit entière pour les grands moniteurs, soit par moitié supérieure ou inférieure, au choix, à assembler au moment de l'impression. Pour fabriquer en particulier des menus (pas panoramic, pour manger !) et cartes de voeux (à plier) ou des affichettes ou autres. Le programme contient plusieurs sub qui peuvent intéresser: - une sub Dessin pour insérer toutes sortes de figures ou dessiner à main levée. - une sub Texte, idem pour du texte - une sub Image, idem pour des images On fabrique l'objet à insérer dans une fenêtre à part, on clique dans la page au point d'insertion, et à partir de là on peut: - l'annuler purement et simplement (seulement le dernier objet inséré). - le déplacer dans tous les sens. - l'agrandir ou le réduire. Il est possible de pivoter l'image de 180° par quart de page, pour les cas de pages A4 à replier en 4. Cette rotation peut également se faire au moment de l'impression, dans le cas d'assemblage de deux demi-pages. Une fois la page dessinée, on peut l'archiver et/ou l'imprimer. Le fonctionnement est simple, il y a un mode d'emploi assez succinct mais suffisant à mon avis. Le programme fait appel à KGF.dll (merci Klaus) et à IrfanView pour les traitements d'images. Pour des raisons de facilité de transport d'un pc à l'autre, j'ai tout regroupé dans un seul répertoire qui s'appelle C:\MENU chez moi, et qui contient tout: le programme bas lui-même (et l'exécutable si compilé), l'éditeur Panoramic, KGF.dll, une version portable d'IrfanView, et un sous-répertoire FICHIERS qui contient les fichiers de travail et les fichiers résultats (au format BMP). Donc tous les chemins mènent à Rome à ce répertoire, c'est plus simple. Donc à vérifier, ou modifier, en tête du programme. Le programme fait environ 1600 lignes, je vais donc le passer ici en deux morceaux (sinon ça ne passera pas), à recoller à l'arrivée: 1ère partie: - Code:
-
LABEL Fin,Echelles,Nouveau,Ouvrir,Ouvrir1,Enreg,Enreg1,Grille,Axes,Imprimer LABEL Colle,Colle1,Cpact,Clact,Dess1,Txte1,Imag1,Decale LABEL R180NE,R180NO,R180SE,R180SO,Rot180,Rtotal LABEL Form0,Form1,Impch,Impopt,Impass,Impr,Impq,Cachmenu,Ayde DIM rmn$,a$,b$,i%,j%,k%,x%,y%,wf,hf,r,wp%,hp%,dtx%,gri%,axe%,p%,od%,sd%,im%,ecm% DIM irfan$,kgf$,rtmp$,fpr$,fs$,wc%,pp%,re%,ge%,be%,f1$,f2$,fa$,wr%,hr%,wi%,hi% DIM m0%,hid% ' ========================= ' ======================== PARAMÈTRES À ACTUALISER ============================= ' ========================= rmn$ = "C:\MENU\": ' répertoire général contenant toutes les données de travail irfan$ = rmn$+"i_view32.exe": ' IrfanView kgf$ = rmn$+"KGF.dll" rtmp$ = rmn$+"FICHIERS\": ' répertoire de manoeuvre, fichiers résultats fpr$ = rtmp$+"Fpr.bmp": ' fichier d'impression fs$ = rtmp$+"Savpic.bmp": ' sauvegarde image actuelle (grille) fa$ = rtmp$+"Pbas.bmp": ' pour impression ' ============================================================================== IF SCREEN_Y > 1024 hp% = SCREEN_Y-108: HEIGHT 0,hp%+69: wp% = hp%*210/297 r = 7013/hp%: ' rapport de réduction imprimante/écran (inutilisé) a$ = " - TOTAL A4 = 210 x 297 mm, "+STR$(wp%)+" x "+STR$(hp%)+" pixels." pp% = 0: ' A4 pleine page ELSE hp% = SCREEN_Y-108: HEIGHT 0,hp%+69: wp% = 2*hp%*210/297 r = 4962/wp% a$ = " - DEMI PAGE A4 = 210 x 148.5 mm, "+STR$(wp%)+" x "+STR$(hp%)+" pixels." pp% = 1: ' 1/2 page A4 haut (ou pp%=2 bas) END_IF WIDTH 0,wp%+41: BORDER_SMALL 0: COLOR 0,180,255,255 CAPTION 0,a$: ON_CLOSE 0,Fin
PICTURE 1: LEFT 1,24: WIDTH 1,wp%: HEIGHT 1,hp%: p% = 1: ' picture de travail PICTURE 2: WIDTH 2,24: HEIGHT 2,hp%+10: ' règle V PICTURE 3: TOP 3,HEIGHT(p%): LEFT 3,LEFT(p%): WIDTH 3,WIDTH(p%): HEIGHT 3,12: ' règle H
MAIN_MENU 10 SUB_MENU 20: PARENT 20,10: CAPTION 20,"Fichier" SUB_MENU 21: PARENT 21,20: CAPTION 21,"Nouveau": ON_CLICK 21,Nouveau SUB_MENU 22: PARENT 22,20: CAPTION 22,"Ouvrir": ON_CLICK 22,Ouvrir SUB_MENU 23: PARENT 23,20: CAPTION 23,"Enregistrer": ON_CLICK 23,Enreg SUB_MENU 24: PARENT 24,20: CAPTION 24,"Imprimer": ON_CLICK 24,Imprimer SUB_MENU 25: PARENT 25,20: CAPTION 25,"Quitter": ON_CLICK 25,Fin
SUB_MENU 30: PARENT 30,10: CAPTION 30,"Edit" SUB_MENU 31: PARENT 31,30: CAPTION 31,"Coller (clic l'emplacement)": ON_CLICK 31,Colle SUB_MENU 32: PARENT 32,30: CAPTION 32,"Copier toute la page": ON_CLICK 32,Cpact SUB_MENU 33: PARENT 33,30: CAPTION 33,"Coller toute la page": ON_CLICK 33,Clact
SUB_MENU 40: PARENT 40,10: CAPTION 40,"Outils" SUB_MENU 41: PARENT 41,40: CAPTION 41,"Dessin": ON_CLICK 41,Dess1 SUB_MENU 42: PARENT 42,40: CAPTION 42,"Insertion de Texte": ON_CLICK 42,Txte1 SUB_MENU 43: PARENT 43,40: CAPTION 43,"Insertion d'Image": ON_CLICK 43,Imag1 SUB_MENU 44: PARENT 44,40: CAPTION 44,"Décalage global page": ON_CLICK 44,Decale SUB_MENU 45: PARENT 45,40: CAPTION 45,"Rotation 180° quart NE": ON_CLICK 45,R180NE SUB_MENU 46: PARENT 46,40: CAPTION 46,"Rotation 180° quart NO": ON_CLICK 46,R180NO SUB_MENU 47: PARENT 47,40: CAPTION 47,"Rotation 180° quart SE": ON_CLICK 47,R180SE SUB_MENU 48: PARENT 48,40: CAPTION 48,"Rotation 180° quart SO": ON_CLICK 48,R180SO SUB_MENU 49: PARENT 49,40: CAPTION 49,"Rotation totale 180°": ON_CLICK 49,Rtotal dtx% = 0 IF pp%=0 HIDE 49 ELSE HIDE 45: HIDE 46: HIDE 47: HIDE 48 END_IF SUB_MENU 50: PARENT 50,10: CAPTION 50,"Grille/Axes/Échelles" SUB_MENU 51: PARENT 51,50: CAPTION 51,"Afficher la grille": ON_CLICK 51,Grille: gri%=0 SUB_MENU 52: PARENT 52,50: CAPTION 52,"Afficher les axes": ON_CLICK 52,Axes: axe%=0 SUB_MENU 53: PARENT 53,50: CAPTION 53,"Échelles en pixels": ON_CLICK 53,Echelles
SUB_MENU 60: PARENT 60,10: CAPTION 60,"Format" SUB_MENU 61: PARENT 61,60: CAPTION 61,"A4 pleine page": ON_CLICK 61,Form0 SUB_MENU 62: PARENT 62,60: CAPTION 62,"A4 demi-page": ON_CLICK 62,Form1
SUB_MENU 70: PARENT 70,10: CAPTION 70,"?": ON_CLICK 70,Ayde
FORM 90: HIDE 90: WIDTH 90,550: HEIGHT 90,440: BORDER_SMALL 90: COLOR 90,190,255,255 CAPTION 90," - IMPRESSION -": FONT_BOLD 90: ON_CLOSE 90,Impq CONTAINER_OPTION 91: PARENT 91,90: WIDTH 91,250: HEIGHT 91,50: COLOR 91,255,255,200 OPTION 92: PARENT 92,91: TOP 92,10: LEFT 92,15: WIDTH 92,160: CAPTION 92,"Imprimer la page actuelle" OPTION 93: PARENT 93,91: TOP 93,28: LEFT 93,15: WIDTH 93,160: CAPTION 93,"Assembler deux 1/2 pages:" MARK_ON 92: ON_CLICK 92,Impopt: ON_CLICK 93,Impopt CONTAINER 110: PARENT 110,90: TOP 110,TOP(91)+HEIGHT(91)+5: LEFT 110,2: WIDTH 110,WIDTH(91) HEIGHT 110,160: COLOR 110,255,255,180 ALPHA 94: PARENT 94,110: TOP 94,5: LEFT 94,5: CAPTION 94,"Demi-page haut :" EDIT 95: PARENT 95,110: TOP 95,TOP(94)+15: LEFT 95,3: WIDTH 95,WIDTH(110)-6 ON_CLICK 95,Impch ALPHA 96: PARENT 96,110: TOP 96,TOP(95)+22: LEFT 96,5: CAPTION 96,"Demi-page bas :" EDIT 97: PARENT 97,110: TOP 97,TOP(96)+15: LEFT 97,3: WIDTH 97,WIDTH(110)-6 ON_CLICK 97,Impch CHECK 101: PARENT 101,110: TOP 101,TOP(97)+25: LEFT 101,15: WIDTH 101,200 CAPTION 101,"Imprimer la ligne de séparation": MARK_ON 101 CHECK 102: PARENT 102,110: TOP 102,TOP(101)+25: LEFT 102,15: WIDTH 102,200 CAPTION 102,"Retourner la 1/2 page bas" BUTTON 103: PARENT 103,110: TOP 103,TOP(102)+25: LEFT 103,80: HEIGHT 103,20 CAPTION 103,"Assembler": ON_CLICK 103,Impass BUTTON 98: PARENT 98,90: TOP 98,TOP(110)+HEIGHT(110)+20: LEFT 98,LEFT(103) CAPTION 98,"Imprimer": ON_CLICK 98,Impr BUTTON 99: PARENT 99,90: TOP 99,TOP(98)+140: LEFT 99,LEFT(98): CAPTION 99,"Quitter" ON_CLICK 99,Impq PICTURE 100: PARENT 100,90: TOP 100,10: LEFT 100,LEFT(91)+WIDTH(91)+5: WIDTH 100,276 HEIGHT 100,390: STRETCH_ON 100 ALPHA 108: PARENT 108,90: LEFT 108,15: TOP 108,TOP(98)+25: COLOR 108,255,255,128 a$ = " L'imprimante doit être prête."+CHR$(13)+CHR$(10) a$=a$+" L'impression démarre immédiatement "+CHR$(13)+CHR$(10) a$=a$+" sans dialogue imprimante.": CAPTION 108,a$ LIST 105: PARENT 105,90: TOP 105,TOP(100): LEFT 105,LEFT(100): HEIGHT 105,HEIGHT(100) WIDTH 105,200: COLOR 105,255,255,190: HIDE 105: FONT_SIZE 105,10: ON_CLICK 105,Impch
FORM 120: HIDE 120: BORDER_SMALL 120: TOP 120,60: LEFT 120,150: HEIGHT 120,68 WIDTH 120,350: COLOR 120,255,0,0: ON_CLOSE 120,Enreg1 CAPTION 120," - ENREGISTRER SOUS : -" EDIT 121: PARENT 121,120: TOP 121,5: LEFT 121,5: WIDTH 121,WIDTH(120)-66 FONT_NAME 121,"Arial": FONT_SIZE 121,10: TEXT 121,rtmp$ BUTTON 122: PARENT 122,120: TOP 122,TOP(121): WIDTH 122,40: LEFT 122,WIDTH(120)-58 CAPTION 122,"OK": ON_CLICK 122,Enreg1
FORM 130: : HIDE 130: BORDER_SMALL 130: TOP 130,60: LEFT 130,150: HEIGHT 130,600 WIDTH 130,200: COLOR 130,0,255,0: ON_CLOSE 130,Ouvrir1 CAPTION 130," - "+rtmp$+" -" LIST 131: PARENT 131,130:: TOP 131,5: LEFT 131,5: WIDTH 131,WIDTH(130)-26 HEIGHT 131,HEIGHT(130)-44: FONT_NAME 131,"Arial": FONT_SIZE 131,10 COLOR 131,255,255,190: ON_CLICK 131,Ouvrir1
od% = 140: OPEN_DIALOG od% sd% = od%+1: SAVE_DIALOG sd% im% = sd%+1: IMAGE im% m0% = im%+1: MEMO m0%: HIDE m0%
ecm% = 0: GOSUB Echelles ' ============================================================================== END: ' ========================================================================= ' ============================================================================== Fin: TIMER_OFF_ALL IF FILE_EXISTS(fpr$)=1 THEN FILE_DELETE fpr$ IF FILE_EXISTS(fs$)=1 THEN FILE_DELETE fs$ IF FILE_EXISTS(fa$)=1 THEN FILE_DELETE fa$ TERMINATE ' ============================================================================== Echelles: HEIGHT 2,hp%+10 TOP 3,HEIGHT(p%) re% = 192: ge% = 192: be% = 192: ' couleur fonds d'échelles re% = 255: ge% = 255: be% = 164 IF ecm% = 0: ' échelles en pixels -> centimètres 2D_TARGET_IS 2: CLS: COLOR 2,re%,ge%,be%: PRINT_TARGET_IS 2 2D_FILL_COLOR re%,ge%,be% FOR i% = 5 TO 295 STEP 5: ' Échelle verticale à gauche y%=i%*wp%/210 IF BIN_AND(i%,1)=0 2D_PEN_WIDTH 2: 2D_LINE 12,y%,30,y% PRINT_LOCATE -1,y%-7: PRINT RIGHT$(" "+STR$(i%/10),2) ELSE 2D_PEN_WIDTH 1: 2D_LINE 14,y%,30,y% END_IF NEXT i% 2D_TARGET_IS 3: CLS: COLOR 3,re%,ge%,be%: PRINT_TARGET_IS 3 2D_FILL_COLOR re%,ge%,be% FOR i% = 0 TO 210 STEP 5: ' Échelle horizontale en bas x%=i%*wp%/210 IF BIN_AND(i%,1)=0 2D_PEN_WIDTH 2: 2D_LINE x%,0,x%,10 PRINT_LOCATE x%-15,1: PRINT RIGHT$(" "+STR$(i%/10),2) ELSE 2D_PEN_WIDTH 1: 2D_LINE x%,0,x%,5 END_IF NEXT i% ecm% = 1: CAPTION 53,"Échelles en pixels" ELSE: ' échelles en centimètres -> pixels 2D_TARGET_IS 2: CLS: COLOR 2,re%,ge%,be%: PRINT_TARGET_IS 2 2D_FILL_COLOR re%,ge%,be% FOR y% = 50 TO hp% STEP 50: ' Échelle verticale à gauche IF INT(y%/100) = y%/100 2D_PEN_WIDTH 2: 2D_LINE 5,y%,30,y% PRINT_LOCATE -1,y%-14: PRINT RIGHT$(" "+STR$(y%),4) ELSE 2D_PEN_WIDTH 1: 2D_LINE 14,y%,30,y% END_IF NEXT y% 2D_TARGET_IS 3: COLOR 3,re%,ge%,be%: PRINT_TARGET_IS 3 2D_FILL_COLOR re%,ge%,be% FOR x% = 0 TO wp% STEP 50: ' Échelle horizontale en bas IF INT(x%/100)=x%/100 2D_PEN_WIDTH 2: 2D_LINE x%,0,x%,10 PRINT_LOCATE x%-24,1: PRINT RIGHT$(" "+STR$(x%),4) ELSE 2D_PEN_WIDTH 1: 2D_LINE x%,0,x%,7 END_IF NEXT x% ecm% = 0: CAPTION 53,"Échelles en centimètres" END_IF RETURN ' ============================================================================== Nouveau: IF dtx%<>0 THEN RETURN 2D_TARGET_IS p%: CLS RETURN ' ============================================================================== Ouvrir: IF dtx%<>0 THEN RETURN EXECUTE_WAIT "CMD.exe /C DIR "+rtmp$+"*.bmp /B | clip" CLEAR 131: CLEAR m0%: CLIPBOARD_PASTE m0% IF COUNT(m0%)>0 FOR i%=1 TO COUNT(m0%): ITEM_ADD 131,ITEM_READ$(m0%,i%): NEXT i% END_IF EXECUTE_WAIT "CMD.exe /C DIR "+rtmp$+"*.jpg /B | clip" CLEAR m0%: CLIPBOARD_PASTE m0% IF COUNT(m0%)>0 FOR i%=1 TO COUNT(m0%): ITEM_ADD 131,ITEM_READ$(m0%,i%): NEXT i% END_IF SORT 131 SHOW 130 RETURN ' --------------------------- Ouvrir1: IF ITEM_INDEX(131)=0 THEN HIDE 130: RETURN a$ = rtmp$+ITEM_INDEX$(131) ' a$ = FILE_NAME$(od%): IF LEN(a$)<4 THEN RETURN b$ = UPPER$(RIGHT$(a$,4)) IF b$<>".BMP" AND b$<>".JPG" EXECUTE_WAIT irfan$ + " " + a$ + " /convert=" + fpr$ a$ = fpr$ END_IF ImgDim(a$) IF wi% <> wp% EXECUTE_WAIT irfan$+" "+a$+" /resize=("+STR$(wp%)+",0) /aspectratio /convert="+fpr$ a$ = fpr$ END_IF HIDE 130 FILE_LOAD p%,a$ IF FILE_EXISTS(fpr$)=1 THEN FILE_DELETE fpr$ RETURN ' ============================================================================== Enreg: IF dtx%<>0 THEN RETURN SHOW 120 RETURN ' ----------------------- Enreg1: IF CLICKED(122)=0 THEN HIDE 120: RETURN: ' on_close a$ = TEXT$(121) ' a$ = FILE_NAME$(sd%): IF LEN(a$)<4 THEN RETURN b$ = UPPER$(RIGHT$(a$,4)) IF b$<>".BMP" FILE_SAVE p%,fpr$ EXECUTE_WAIT irfan$ + " " + fpr$ + " /convert=" + a$ ELSE FILE_SAVE p%,a$ END_IF HIDE 120 IF FILE_EXISTS(fpr$) = 1 THEN FILE_DELETE fpr$ RETURN ' ============================================================================== Grille: IF gri% = 0 IF dtx%<>0 THEN RETURN FILE_SAVE p%,fs$ Grille_Pict(p%,wp%/21): ' grille en cm ' Marges non imprimables: i% = 75/r: ' marges non imprimables (75 pixels) 2D_LINE 0,i%,wp%,i% 2D_LINE 0,hp%-i%,wp%,hp%-i% 2D_LINE i%,0,i%,hp% 2D_LINE wp%-i%,0,wp%-i%,hp% gri% = 1 CAPTION 51,"Supprimer la grille" ELSE FILE_LOAD p%,fs$: FILE_DELETE fs$: gri% = 0 CAPTION 51,"Afficher la grille" END_IF RETURN ' ============================================================================== Axes: IF axe% = 0 IF gri% = 1 THEN RETURN 2D_TARGET_IS p%: 2D_PEN_COLOR 164,164,164: 2D_PEN_WIDTH 1: 2D_PEN_DOT 2D_LINE wp%/2,0,wp%/2,hp%: IF pp%=0 THEN 2D_LINE 0,hp%/2,wp%,hp%/2 axe%=1 CAPTION 52,"Supprimer les axes" ELSE 2D_TARGET_IS p%: 2D_PEN_COLOR 255,255,255: 2D_PEN_WIDTH 1 2D_LINE wp%/2,0,wp%/2,hp%: IF pp%=0 THEN 2D_LINE 0,hp%/2,wp%,hp%/2 axe%=0 CAPTION 52,"Afficher les axes" END_IF RETURN ' ============================================================================== Imprimer: IF dtx%<>0 THEN RETURN HEIGHT 100,390: IF pp%>0 THEN HEIGHT 100,195 CLIPBOARD_COPY p%: CLIPBOARD_PASTE 100 FILE_SAVE p%,fpr$ MARK_ON 92: HIDE 110 SHOW 90 RETURN ' ============================================================================== Impch: i% = NUMBER_CLICK IF i% = 105 IF ITEM_INDEX(105) = 0 THEN HIDE 105: RETURN a$ = ITEM_INDEX$(105) TEXT j%,rtmp$+a$ HIDE 105 ELSE EXECUTE_WAIT "CMD.exe /C DIR "+rtmp$+"*.bmp /B | clip" a$=CLIPBOARD_STRING_PASTE$: CLEAR 105: k%=INSTR(a$,CHR$(13)+CHR$(10)) WHILE k%>0 ITEM_ADD 105,LEFT$(a$,k%-1): a$=RIGHT_POS$(a$,k%+2): k%=INSTR(a$,CHR$(13)+CHR$(10)) END_WHILE ITEM_ADD 105,a$ SHOW 105 j%=i% END_IF RETURN ' ============================================================================== Impopt: IF CHECKED(92) = 1: ' imprimer la page actuelle HIDE 110 ELSE: ' assembler les demi-pages pour impression SHOW 110 END_IF RETURN ' ============================================================================== Impass: f1$ = TEXT$(95): f2$ = TEXT$(97) IF f1$="" OR f2$="" THEN RETURN IF FILE_EXISTS(f1$)=0 OR FILE_EXISTS(f2$)=0 THEN RETURN ImgDim(f2$): ' -> wi%, hi%, dimensions de l'image du bas IF CHECKED(102) = 1 ' rotation 180° de la page du bas (les 2 moitiés séparément) a$ = " /crop=(0,0,"+STR$(wi%/2)+","+STR$(hi%)+")" a$=a$+" /rotate_l /rotate_l": ' 2 fois 90° EXECUTE_WAIT irfan$+" "+f2$+a$+" /convert="+fa$ a$ = " /crop=("+STR$(wi%/2)+",0,"+STR$(wi%/2)+","+STR$(hi%)+")" a$=a$+" /rotate_l /rotate_l" EXECUTE_WAIT irfan$+" "+f2$+a$+" /convert="+fs$ EXECUTE_WAIT irfan$+" /panorama=(1,"+fa$+","+fs$+") /convert="+fpr$ FILE_DELETE fa$: FILE_DELETE fs$ f2$ = fpr$ END_IF EXECUTE_WAIT irfan$+" /panorama=(2,"+f1$+","+f2$+") /convert="+fpr$: ' assemblage IF CHECKED(101) = 1 ' Imprimer la ligne de séparation (pour massicotage éventuel) PICTURE 1000: LEFT 1000,-2000: WIDTH 1000,wi%: HEIGHT 1000,2*hi% FILE_LOAD 1000,fpr$ 2D_TARGET_IS 1000: 2D_PEN_DOT: 2D_PEN_COLOR 128,128,128: 2D_LINE 0,hi%,wi%,hi% FILE_SAVE 1000,fpr$ 2D_TARGET_IS p%: DELETE 1000 END_IF HEIGHT 100,390 FILE_LOAD 100,fpr$: ' Aperçu avant impression RETURN ' ============================================================================== Impr: IF CHECKED(92) = 1 FILE_SAVE p%,fpr$ END_IF IF FILE_EXISTS(fpr$) = 0 THEN RETURN DLL_ON kgf$ Pr_Init(0): ' init, orientation portrait Pr_Image(fpr$,0,0,Pr_lt%,Pr_ht%): ' totalité de la page Pr_Impr() DLL_OFF ' WAIT 500: FILE_DELETE fpr$: ' suppression du fichier d'impression RETURN ' ============================================================================== Impq: HIDE 90 IF FILE_EXISTS(fpr$) = 1 THEN FILE_DELETE fpr$ RETURN ' ============================================================================== Colle: IF dtx%<>0 THEN RETURN dtx% = 5: ON_CLICK p%,Colle1 RETURN ' ============================================================================== Colle1: IF dtx% = 5 IF gri% = 1 THEN GOSUB Grille: ' suppression grille CLIPBOARD_PASTE im% x%=MOUSE_X_LEFT_DOWN(p%): y%=MOUSE_Y_LEFT_DOWN(p%) 2D_TARGET_IS p%: 2D_IMAGE_PASTE im%,x%,y% dtx% = 0: OFF_CLICK p% END_IF RETURN ' ============================================================================== Cpact: IF dtx%<>0 THEN RETURN CLIPBOARD_COPY p% RETURN ' ============================================================================== Clact: IF dtx%<>0 THEN RETURN CLIPBOARD_PASTE p% RETURN ' ============================================================================== Dess1: IF dtx% <> 0 THEN RETURN IF gri% = 1 THEN GOSUB Grille hid% = 1: GOSUB Cachmenu dtx% = 1: Dessin(wp%+35,140,p%,1): dtx% = 0 hid% = 0: GOSUB Cachmenu RETURN ' ============================================================================== Txte1: IF dtx% <> 0 THEN RETURN IF gri% = 1 THEN GOSUB Grille hid% = 1: GOSUB Cachmenu dtx% = 2: Texte(wp%+35,140,p%): dtx% = 0 hid% = 0: GOSUB Cachmenu RETURN ' ============================================================================== Imag1: IF dtx% <> 0 THEN RETURN IF gri% = 1 THEN GOSUB Grille hid% = 1: GOSUB Cachmenu dtx% = 3: Imagin(wp%+35,140,p%): dtx% = 0 hid% = 0: GOSUB Cachmenu RETURN ' ============================================================================== Decale: IF dtx% <> 0 THEN RETURN IF gri% = 1 THEN GOSUB Grille hid% = 1: GOSUB Cachmenu dtx% = 4: Picshift(wp%+35,140,p%): dtx% = 0 hid% = 0: GOSUB Cachmenu RETURN ' ============================================================================== R180NE: x%=wp%/2: y%=0: wr%=wp%/2: hr%=hp%/2: GOTO Rot180 R180NO: x%=0: y%=0: wr%=wp%/2: hr%=hp%/2: GOTO Rot180 R180SE: x%=wp%/2: y%=hp%/2: wr%=wp%/2: hr%=hp%/2: GOTO Rot180 R180SO: x%=0: y%=hp%/2: wr%=wp%/2: hr%=hp%/2: GOTO Rot180 Rot180: ' rotation de 180° par quarts de page IF dtx%<>0 THEN RETURN CLIPBOARD_COPY p% a$ = "/crop=("+STR$(x%)+","+STR$(y%)+","+STR$(wr%)+","+STR$(hr%)+")" a$ = a$+" /rotate_l /rotate_l": ' 2 fois 90° EXECUTE_WAIT irfan$+" /clippaste "+a$+" /clipcopy /killmesoftly" CLIPBOARD_PASTE im% 2D_TARGET_IS p%: 2D_IMAGE_PASTE im%,x%,y% RETURN
Rtotal: ' ' rotation de la demi-page, moitié par moitié (quarts de page) IF dtx%<>0 THEN RETURN x%=0: y%=0: wr%=wp%/2: hr%=hp%: ' GOTO Rot180 CLIPBOARD_COPY p%: 2D_TARGET_IS p% a$ = "/crop=("+STR$(x%)+","+STR$(y%)+","+STR$(wr%)+","+STR$(hr%)+")" a$ = a$+" /rotate_l /rotate_l": ' 2 fois 90° EXECUTE_WAIT irfan$+" /clippaste "+a$+" /clipcopy /killmesoftly" CLIPBOARD_PASTE im%: 2D_IMAGE_PASTE im%,x%,y%: ' moitié gauche x% = wp%/2 CLIPBOARD_COPY p% a$ = "/crop=("+STR$(x%)+","+STR$(y%)+","+STR$(wr%)+","+STR$(hr%)+")" a$ = a$+" /rotate_l /rotate_l": ' 2 fois 90° EXECUTE_WAIT irfan$+" /clippaste "+a$+" /clipcopy /killmesoftly" CLIPBOARD_PASTE im%: 2D_IMAGE_PASTE im%,x%,y%: ' moitié droite RETURN
' ============================================================================== Form0: ' A4 pleine page IF pp% = 0 THEN RETURN HEIGHT 0,SCREEN_Y-35: hp% = HEIGHT(0)-69: HEIGHT p%,hp%: wp% = hp%*210/297 WIDTH p%,wp%: WIDTH 0,wp%+41 r = 7013/hp%: ' rapport de réduction imprimante/écran (inutilisé) a$ = " - TOTAL A4 = 210 x 297 mm, "+STR$(wp%)+" x "+STR$(hp%)+" pixels." CAPTION 0,a$ 2D_TARGET_IS p%: CLS pp% = 0: WIDTH 3,WIDTH(p%): ecm% = 0: GOSUB Echelles: ' A4 pleine page HIDE 49: SHOW 45: SHOW 46: SHOW 47: SHOW 48 RETURN ' ============================================================================== Form1: ' A4 demi page supérieure ou inférieure IF pp%=1 THEN RETURN hp% = SCREEN_Y-108: wp% = hp%*420/297 WIDTH p%,wp%: HEIGHT p%,hp%: HEIGHT 0,hp%+69: WIDTH 0,wp%+41 r = 4962/wp% a$ = " - DEMI PAGE A4 = 210 x 148.5 mm, "+STR$(wp%)+" x "+STR$(hp%)+" pixels." CAPTION 0,a$ 2D_TARGET_IS p%: CLS pp% = 1: WIDTH 3,WIDTH(p%): ecm% = 0: GOSUB Echelles HIDE 45: HIDE 46: HIDE 47: HIDE 48: SHOW 49 RETURN ' ============================================================================== Cachmenu: IF hid% = 1: ' cacher le menu hide 20: hide 30: hide 40: hide 50: hide 60: hide 70 ELSE show 20: show 30: show 40: show 50: show 60: show 70 END_IF RETURN ' ============================================================================== Ayde: IF dtx% <> 0 THEN RETURN dtx% = 10: Aide(100,80,"Debaid"): dtx% = 0 RETURN ' ============================================================================== ' ============================================================================== SUB Grille_Pict(obj%,wg%) ' Dessin d'une grille sur un picture obj%, de pas wg% pixels DIM_LOCAL i% 2D_TARGET_IS obj%: 2D_PEN_COLOR 255,0,255: 2D_PEN_WIDTH 1: 2D_PEN_SOLID FOR i% = wg% TO WIDTH(obj%)*4 STEP wg% 2D_LINE i%,0,i%,HEIGHT(obj%)*4 NEXT i% FOR i% = wg% TO HEIGHT(obj%)*4 STEP wg% 2D_LINE 0,i%,WIDTH(obj%)*4,i% NEXT i% 2D_PEN_DOT: 2D_PEN_COLOR 0,128,128: ' axes 2D_LINE WIDTH(obj%)/2,0,WIDTH(obj%)/2,HEIGHT(obj%) 2D_LINE 0,HEIGHT(obj%)/2,WIDTH(obj%),HEIGHT(obj%)/2 END_SUB ' ============================================================================== SUB Dessin(xa%,ya%,p%,r) ' Boîte à outils affichée en xa%,ya% pour dessiner sur le picture p% ' r = facteur de correction des coordonnées ' cas du stretch_on dans un picture: r = Largeur picture/Largeur réelle image ' (r = 1 si picture = image) IF r = 0 THEN r = 1: ' si paramètre absent DIM_LOCAL f%,t%,i%,j%,k%,x%,y%,a$,tr%,tg%,tb%,n2t%,fig%,trac%,term%,ret%,an,pi,cpt DIM_LOCAL co%,x1%,y1%,x2%,y2%,x3%,y3%,sx1%,fsv$,btg%,cap$,ad%,ps%,rm% pi = 4*ATN(1) fsv$ = rtmp$+"Savpre.bmp" IF FILE_EXISTS(fsv$) = 1 THEN FILE_DELETE fsv$ IF LABEL("Desfin")=0 THEN LABEL Desfin IF LABEL("Desopt")=0 THEN LABEL Desopt IF LABEL("Desanu")=0 THEN LABEL Desanu IF LABEL("Descou")=0 THEN LABEL Descou IF LABEL("Destim")=0 THEN LABEL Destim IF LABEL("Destra")=0 THEN LABEL Destra IF LABEL("Deslib")=0 THEN LABEL Deslib IF LABEL("Desrec")=0 THEN LABEL Desrec IF LABEL("Desron")=0 THEN LABEL Desron IF LABEL("Desell")=0 THEN LABEL Desell IF LABEL("Deseto")=0 THEN LABEL Deseto IF LABEL("Despol")=0 THEN LABEL Despol IF LABEL("Desrem")=0 THEN LABEL Desrem IF LABEL("Desshi")=0 THEN LABEL Desshi DATA "Pal16": ' palette 16 couleurs DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000" DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF" n2t% = NUMBER_2D_TARGET ON_CLICK p%,Desrem f% = 850: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE FORM f%: TOP f%,ya%: LEFT f%,xa%: HEIGHT f%,390: WIDTH f%,132: BORDER_SMALL f% COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Desfin CAPTION f%,"- OUTILS DESSIN -" i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Trait:" i%=f%+2: PICTURE i%: PARENT i%,f%: TOP i%,0: LEFT i%,32: WIDTH i%,35: HEIGHT i%,23 COLOR i%,0,0,0 i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,3: LEFT i%,35: WIDTH i%,WIDTH(i%-1)-5 HEIGHT i%,18: COLOR i%,255,0,0 i%=f%+4: SPIN i%: PARENT i%,f%: LEFT i%,75: WIDTH i%,40: font_size i%,9 MIN i%,1: MAX i%,20: POSITION i%,1 i%=f%+5: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17 HEIGHT i%,63: 2D_TARGET_IS i%: ON_CLICK i%,Descou RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE FOR j% = 1 TO 4 FOR i% = 1 TO 4 READ a$ tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2)) 2D_FILL_COLOR tr%,tg%,tb% 2D_RECTANGLE x%,y%,x%+28,y%+15: x%=x%+29 NEXT i% y%=y%+16: x% = 0 NEXT j% tr% = 0: tg% = 0: tb% = 0: COLOR f%+3,tr%,tg%,tb% co%=f%+6: CONTAINER_OPTION co%: PARENT co%,f%: TOP co%,TOP(co%-1)+65 WIDTH co%,WIDTH(f%)-18: LEFT co%,0: HEIGHT co%,185: COLOR co%,255,255,180 i%=co%+1:OPTION i%: PARENT i%,co%: TOP i%,10: LEFT i%,4: CAPTION i%,"Trait" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,25: LEFT i%,4: CAPTION i%,"Libre" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,40: LEFT i%,4: CAPTION i%,"Rectangle vide" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,55: LEFT i%,4: CAPTION i%,"Rectangle plein" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,70: LEFT i%,4: CAPTION i%,"Cercle vide" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,85: LEFT i%,4: CAPTION i%,"Cercle plein" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,100: LEFT i%,4: CAPTION i%,"Ellipse vide" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,115: LEFT i%,4: CAPTION i%,"Ellipse pleine" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,130: LEFT i%,4: CAPTION i%,"Étoile" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,145: LEFT i%,4: CAPTION i%,"Polygone:" i%=i%+1:OPTION i%: PARENT i%,co%: TOP i%,160: LEFT i%,4: CAPTION i%,"Remplir": rm%=i% MARK_ON co%+1 FOR j%=co%+1 TO rm%: ON_CLICK j%,Desopt: NEXT j% i%=i%+1: SPIN i%: PARENT i%,f%: TOP i%,TOP(co%)+143: LEFT i%,LEFT(co%)+75: WIDTH i%,40: HEIGHT i%,20 POSITION i%,5 i%=rm%+2: CONTAINER i%: PARENT i%,f%: TOP i%,TOP(co%)+HEIGHT(co%) LEFT i%,0: WIDTH i%,WIDTH(co%): HEIGHT i%,60: COLOR i%,255,255,180: ad%=i% i%=i%+1: BUTTON i%: PARENT i%,ad%: TOP i%,8: LEFT i%,5: WIDTH i%,25: CAPTION i%,CHR$(231) i%=i%+1: BUTTON i%: PARENT i%,ad%: TOP i%,TOP(i%-1): LEFT i%,30: WIDTH i%,25: CAPTION i%,CHR$(232) i%=i%+1: BUTTON i%: PARENT i%,ad%: TOP i%,TOP(i%-1): LEFT i%,55: WIDTH i%,25: CAPTION i%,CHR$(233) i%=i%+1: BUTTON i%: PARENT i%,ad%: TOP i%,TOP(i%-1): LEFT i%,80: WIDTH i%,25: CAPTION i%,CHR$(234) FOR j% = i%-3 TO i%: FONT_NAME j%,"Wingdings": NEXT j% i%=i%+1: BUTTON i%: PARENT i%,ad%: TOP i%,TOP(i%-1)+25: LEFT i%,5: WIDTH i%,30: CAPTION i%,"Z +" i%=i%+1: BUTTON i%: PARENT i%,ad%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+30: WIDTH i%,30: CAPTION i%,"Z -" FOR j% = ad%+1 TO ad%+6: ON_CLICK j%,Desshi: NEXT j% i%=i%+1: SPIN i%: PARENT i%,ad%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+32: WIDTH i%,40 POSITION i%,5 i%=ad%+8: BUTTON i%: PARENT i%,f%: WIDTH i%,60: HEIGHT i%,20: TOP i%,HEIGHT(f%)-55 CAPTION i%,"Annuler": ON_CLICK i%,Desanu i%=i%+1:BUTTON i%: PARENT i%,f%: WIDTH i%,55: HEIGHT i%,20: TOP i%,TOP(i%-1): LEFT i%,60 CAPTION i%,"Quitter": ON_CLICK i%,Desfin 2D_TARGET_IS p%: 2D_PEN_DOT t%=i%+1: TIMER t%: PARENT t%,f%: TIMER_INTERVAL t%,40: ON_TIMER t%,Destim trac% = 0: term% = 0: btg% = 0 fig% = 1: ret% = 0: cap$ = CAPTION$(0) CLIPBOARD_COPY p% WHILE ret%=0: WAIT 100: END_WHILE: EXIT_SUB ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desopt: fig% = 1: ' trait IF CHECKED(co%+2) = 1 fig% = 2: ' tracé libre FILE_SAVE p%,fsv$: ' sauvegarde préalable ELSE IF CHECKED(co%+3) = 1 OR CHECKED(co%+4) = 1 fig% = 3: ' rectangle vide ou plein ELSE IF CHECKED(co%+5) = 1 OR CHECKED(co%+6) = 1 fig% = 4: ' cercle vide ou plein ELSE IF CHECKED(co%+7) = 1 OR CHECKED(co%+8) = 1 fig% = 5: ' ellipse vide ou pleine ELSE IF CHECKED(co%+9) = 1 fig% = 6: ' étoile ELSE IF CHECKED(co%+10) = 1 fig% = 7: ' polygone ELSE IF CHECKED(rm%) = 1 fig% = 10: ' remplissage END_IF END_IF END_IF END_IF END_IF END_IF END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destim: IF CHECKED(rm%)=1 THEN RETURN: ' remplissage cpt = cpt+1: IF cpt>1000 THEN cpt = 2 x% = MOUSE_X_POSITION(p%)/r: y% = MOUSE_Y_POSITION(p%)/r: ' position actuelle souris a$ = "X= "+STR$(x%)+" pixels Y= "+STR$(y%)+" pixels" CAPTION 0,a$ 2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4) IF MOUSE_LEFT_DOWN(p%) = 1: ' bouton gauche enfoncé x1% = x%: y1% = y%: ' origine trac% = 1 IF fig% = 2 AND btg% = 0 THEN FILE_SAVE p%,fsv$: ' sauvegarde préalable btg% = 1 END_IF IF MOUSE_LEFT_UP(p%) = 1: ' relâche, tracé final btg% = 0 IF x1% = -1 THEN RETURN TIMER_OFF t% ' clipboard_paste p%: term% = 1: 2D_PEN_SOLID SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron CASE 5: GOSUB Desell CASE 6: GOSUB Deseto CASE 7: GOSUB Despol CASE 10: GOSUB Desrem END_SELECT CLIPBOARD_COPY p%: term% = 0 trac% = 0: 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255 TIMER_ON t% END_IF IF trac% = 1 ' tracé provisoire, en continu IF x1% = -1 THEN RETURN x2% = x%: y2% = y%: ' position actuelle IF x2%=x3% AND y2%=y3% THEN RETURN: ' position inchangée 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255: 2D_PEN_WIDTH 1 SELECT fig% CASE 1: GOSUB Destra CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron CASE 5: GOSUB Desell CASE 6: GOSUB Deseto CASE 7: GOSUB Despol END_SELECT x3% = x%: y3% = y% END_IF TO_FOREGROUND f% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Destra: IF cpt = 1 THEN RETURN: ' init CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fsv$: ' sauvegarde préalable 2D_LINE x1%,y1%,x2%,y2% IF term% = 1 THEN sx1%=x1%: x1% = -1 RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Deslib: 2D_PEN_SOLID: 2D_PEN_COLOR tr%,tg%,tb%: 2D_PEN_WIDTH POSITION(f%+4) 2D_LINE x1%,y1%,x2%,y2%: x1%=x2%: y1%=y2% IF term% = 1 THEN sx1%=x1%: x1% = -1 RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desrec: CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fsv$: ' sauvegarde préalable 2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1% IF term% = 1 IF CHECKED(co%+4) = 1: ' rectangle plein 2D_FILL_COLOR tr%,tg%,tb%: 2D_RECTANGLE x1%,y1%,x2%,y2% END_IF sx1%=x1%: x1% = -1 END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desron: CLIPBOARD_PASTE p%: IF term% = 1 THEN FILE_SAVE p%,fsv$: ' sauvegarde préalable k% = SQR((y2%-y1%)*(y2%-y1%) + (x2%-x1%)*(x2%-x1%)): ' rayon du cercle 2D_POLY_FROM x1%+k%,y1% FOR an = 0 TO 8*ATN(1)+.1 STEP .1 2D_POLY_TO x1%+k%*COS(an), y1%+k%*SIN(an) NEXT an IF term% = 1 IF CHECKED(co%+6) = 1: ' cercle plein 2D_FILL_COLOR tr%,tg%,tb%: 2D_CIRCLE x1%,y1%,k% END_IF sx1%=x1%: x1% = -1 END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desell: CLIPBOARD_PASTE p% IF term% = 1 FILE_SAVE p%,fsv$: ' sauvegarde préalable IF CHECKED(co%+7) = 1: ' ellipse vide i%=(x2%-x1%)/2: j%=(y2%-y1%)/2: x%=x1%+i%: y%=y1%+j% 2D_POLY_FROM x%+i%,y% FOR an = 0 TO 2*pi STEP pi/180 2D_POLY_TO x%+i%*COS(an),y%+j%*SIN(an) NEXT an ELSE: ' ellipse pleine k% = HANDLE_CANVAS(p%) DLL_ON "gdi32.dll" i% = DLL_CALL5("Ellipse",k%,x1%,y1%,x2%,y2%) DLL_OFF 2D_FLOOD (x1%+x2%)/2,(y1%+y2%)/2,tr%,tg%,tb%: ' coloriage de l'ellipse END_IF sx1%=x1%: x1%=-1 ELSE ' 2D_LINE x1%,y1%,x2%,y1%:2D_POLY_TO x2%,y2%:2D_POLY_TO x1%,y2%:2D_POLY_TO x1%,y1% i%=(x2%-x1%)/2: j%=(y2%-y1%)/2: x%=x1%+i%: y%=y1%+j% 2D_POLY_FROM x%+i%,y% FOR an = 0 TO 2*pi STEP pi/180 2D_POLY_TO x%+i%*COS(an),y%+j%*SIN(an) NEXT an END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Deseto: CLIPBOARD_PASTE p% k% = SQR((y2%-y1%)*(y2%-y1%) + (x2%-x1%)*(x2%-x1%)): ' rayon du cercle enveloppe IF term% = 1 FILE_SAVE p%,fsv$: ' sauvegarde préalable 2D_POLY_FROM x1%+k%,y1% FOR an = 0 TO 4*pi STEP 4*pi/5 2D_POLY_TO x1%+k%*COS(an),y1%+k%*SIN(an) NEXT an sx1%=x1%: x1%=-1 ELSE 2D_POLY_FROM x1%+k%,y1% FOR an = 0 TO 4*pi STEP 4*pi/5 2D_POLY_TO x1%+k%*COS(an),y1%+k%*SIN(an) NEXT an END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Despol: CLIPBOARD_PASTE p% k% = SQR((y2%-y1%)*(y2%-y1%) + (x2%-x1%)*(x2%-x1%)): ' rayon du cercle enveloppe j% = POSITION(rm%+1): ' nombre de côtés IF term% = 1 FILE_SAVE p%,fsv$: ' sauvegarde préalable 2D_POLY_FROM x1%+k%,y1% FOR an = 0 TO 2*pi+.1 STEP 2*pi/j% 2D_POLY_TO x1%+k%*COS(an),y1%+k%*SIN(an) NEXT an sx1%=x1%: x1%=-1 ELSE 2D_POLY_FROM x1%+k%,y1% FOR an = 0 TO 2*pi+.1 STEP 2*pi/j% 2D_POLY_TO x1%+k%*COS(an),y1%+k%*SIN(an) NEXT an END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desrem: IF CHECKED(rm%)=0 THEN RETURN FILE_SAVE p%,fsv$: ' sauvegarde préalable x% = MOUSE_X_LEFT_DOWN(p%)/r: y% = MOUSE_Y_LEFT_DOWN(p%)/r 2D_FLOOD x%,y%,tr%,tg%,tb% sx1%=x1%: x1% = -1 CLIPBOARD_COPY p% RETURN ' ============================================================================== Desshi: ' décalage de la dernière figure tracée IF FILE_EXISTS(fsv$)=0 THEN RETURN TIMER_OFF t% ps% = POSITION(ad%+7): ' pas de déplacement FILE_LOAD p%,fsv$: ' raz CLIPBOARD_COPY p%: 2D_TARGET_IS p%: i% = NUMBER_CLICK x1% = sx1%: term% = 1: 2D_PEN_SOLID IF i% = ad%+1: ' gauche x1%=x1%-ps%: x2%=x2%-ps% ELSE IF i%=ad%+2: ' droite x1%=x1%+ps%: x2%=x2%+ps% ELSE IF i%=ad%+3: ' haut y1%=y1%-ps%: y2%=y2%-ps% ELSE IF i%=ad%+4: ' bas y1%=y1%+ps%: y2%=y2%+ps% ELSE IF i%=ad%+5: ' zoom plus x2%=x2%+ps%: y2%=y2%+ps% ELSE: ' zoom moins x2%=x2%-ps%: y2%=y2%-ps% END_IF END_IF END_IF END_IF END_IF ' FILE_LOAD p%,fsv$ SELECT fig% CASE 1: GOSUB Destra ' CASE 2: GOSUB Deslib CASE 3: GOSUB Desrec CASE 4: GOSUB Desron CASE 5: GOSUB Desell CASE 6: GOSUB Deseto CASE 7: GOSUB Despol ' CASE 10: GOSUB Desrem END_SELECT CLIPBOARD_COPY p%: term% = 0 trac% = 0: 2D_PEN_DOT: 2D_PEN_COLOR 0,0,255 TIMER_ON t% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desanu: IF FILE_EXISTS(fsv$) = 1 THEN FILE_LOAD p%,fsv$: CLIPBOARD_COPY p% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Descou: x%=MOUSE_X_LEFT_DOWN(f%+5): y%=MOUSE_Y_LEFT_DOWN(f%+5) tr%=COLOR_PIXEL_RED(f%+5,x%,y%): tg%=COLOR_PIXEL_GREEN(f%+5,x%,y%) tb%=COLOR_PIXEL_BLUE(f%+5,x%,y%): COLOR f%+3,tr%,tg%,tb% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Desfin: ret% = 1 TIMER_OFF t%: DELETE t%: WAIT 100: OFF_CLICK p%: 2D_TARGET_IS n2t% IF FILE_EXISTS(fsv$)=1 THEN FILE_DELETE fsv$ DELETE f%: CAPTION 0,cap$ ret% = 1 RETURN END_SUB
Dernière édition par JL35 le Mer 31 Déc 2014 - 17:24, édité 2 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Menus et Cartes Mer 31 Déc 2014 - 17:20 | |
| 2ème partie: - Code:
-
' ============================================================================== SUB Texte(xa%,ya%,p%) ' boîte à outils affichée en xa%,ya% pour apposer du texte sur le picture p% DIM_LOCAL f%,i%,j%,k%,x%,y%,tr%,tg%,tb%,a$,ret%,lp%,n2t%,n2p%,p1%,wt%,ht%,fst$,co% DIM_LOCAL r%,g%,b%,mm%,lc%,ld%,sh%,ps%,sx%,sy%,pal%,ap% fst$ = rtmp$+"Savpre.bmp" IF FILE_EXISTS(fst$) = 1 THEN FILE_DELETE fst$ DATA "Pal16": ' palette 16 couleurs DATA "000000","000080","0000FF","008000","008080","00FF00","00FFFF","800000" DATA "800080","808000","808080","C0C0C0","FF0000","FF00FF","FFFF00","FFFFFF" n2t% = NUMBER_2D_TARGET: n2p% = NUMBER_PRINT_TARGET IF LABEL("Texfin")=0 THEN LABEL Texfin IF LABEL("Texpol")=0 THEN LABEL Texpol IF LABEL("Texpom")=0 THEN LABEL Texpom IF LABEL("Texcou")=0 THEN LABEL Texcou IF LABEL("Texenr")=0 THEN LABEL Texenr IF LABEL("Texins")=0 THEN LABEL Texins IF LABEL("Texanu")=0 THEN LABEL Texanu IF LABEL("Texdim")=0 THEN LABEL Texdim IF LABEL("Texshi")=0 THEN LABEL Texshi IF LABEL("Texinss")=0 THEN LABEL Texinss IF LABEL("Texcen")=0 THEN LABEL Texcen f% = 950: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE FORM f%: TOP f%,ya%: LEFT f%,xa%: HEIGHT f%,524: WIDTH f%,352: BORDER_SMALL f% COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Texfin CAPTION f%,"- OUTILS TEXTE -" i%=f%+1: EDIT i%: PARENT i%,f%: TOP i%,0: LEFT i%,0: WIDTH i%,130 TEXT i%,"Arial": ON_CLICK i%,Texpol: ' Police i%=f%+2: SPIN i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(i%-1)+2: WIDTH i%,45 MIN i%,6: MAX i%,255: POSITION i%,12: ' Taille caractères ON_CHANGE f%+2,Texenr i%=f%+3: PICTURE i%: PARENT i%,f%: TOP i%,1: LEFT i%,LEFT(f%+2)+47: WIDTH i%,25 HEIGHT i%,20: COLOR i%,0,0,0: ' Témoin de couleur i%=f%+4: CHECK i%: PARENT i%,f%: TOP i%,3: LEFT i%,LEFT(f%+3)+28: CAPTION i%,"G" i%=f%+5: CHECK i%: PARENT i%,f%: TOP i%,3: WIDTH i%,25: LEFT i%,LEFT(f%+4)+25: CAPTION i%,"I" i%=f%+6: CHECK i%: PARENT i%,f%: TOP i%,3: WIDTH i%,25: LEFT i%,LEFT(f%+5)+25: CAPTION i%,"S" FOR j%=f%+4 TO f%+6: ON_CLICK j%,Texenr: NEXT j% i%=f%+7: CHECK i%: PARENT i%,f%: TOP i%,3: WIDTH i%,54: LEFT i%,LEFT(i%-1)+25: CAPTION i%,"Centré" ON_CLICK i%,Texcen i%=i%+1: PICTURE i%: PARENT i%,f%: TOP i%,25: LEFT i%,0: WIDTH i%,WIDTH(f%)-17 HEIGHT i%,16: 2D_TARGET_IS i%: ON_CLICK i%,Texcou: pal%=i%: ' palette de 16 couleurs RESTORE: READ a$: WHILE a$<>"Pal16": READ a$: END_WHILE FOR j% = 1 TO 16 READ a$ tr%=HEX(LEFT$(a$,2)): tg%=HEX(MID$(a$,3,2)): tb%=HEX(RIGHT$(a$,2)) 2D_FILL_COLOR tr%,tg%,tb% 2D_RECTANGLE x%,y%,x%+20,y%+15: x%=x%+21 NEXT j% tr% = 0: tg% = 0: tb% = 0: ' couleur de base (noir) i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,TOP(pal%)+30: LEFT i%,2: CAPTION i%,"Aperçu:" i%=i%+1: EDIT i%: PARENT i%,f%: TOP i%,TOP(pal%)+20: LEFT i%,50: WIDTH i%,WIDTH(f%)-68 HEIGHT i%,40: COLOR i%,255,255,190: ap%=i% FONT_SIZE i%,12: FONT_BOLD_OFF i%: TEXT i%,"ABC xyz 01234" mm%=i%+1: MEMO mm%: PARENT mm%,f%: TOP mm%,TOP(ap%)+45: WIDTH mm%,WIDTH(f%)-16 HEIGHT mm%,HEIGHT(f%)-205: FONT_BOLD_OFF mm%: ' memo de saisie du texte FONT_NAME mm%,"Arial": FONT_SIZE mm%,10 lp%=mm%+1: LIST lp%: PARENT lp%,f%: TOP lp%,TOP(f%+1)+20: WIDTH lp%,130: HEIGHT lp%,HEIGHT(f%)-130 HIDE lp%: FONT_NAMES_LOAD lp%: COLOR lp%,255,255,190: ON_CLICK lp%,Texpom FOR j%=COUNT(lp%) TO 1 STEP -1: ' liste des polices IF LEFT$(ITEM_READ$(lp%,j%),1)="@" THEN ITEM_DELETE lp%,j% NEXT j%: ' Polices p1%=lp%+1: PICTURE p1%: PARENT p1%,f%: LEFT p1%,-2000 i%=p1%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(mm%)+HEIGHT(mm%): LEFT i%,20: WIDTH i%,100 CAPTION i%,"Dimensions ->": ON_CLICK i%,Texdim i%=i%+1: LIST i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+100: WIDTH i%,200: HEIGHT i%,25 ld% = i% co%=i%+1: CONTAINER_OPTION co%: PARENT co%,f%: TOP co%,TOP(i%)+25 LEFT co%,50: WIDTH co%,220: HEIGHT co%,30: COLOR co%,255,255,190 i%=co%+1: OPTION i%: PARENT i%,co%: TOP i%,10: LEFT i%,10: CAPTION i%,"Fond blanc" WIDTH i%,150: MARK_ON i% i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1): LEFT i%,105 CAPTION i%,"Fond transparent"
i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,HEIGHT(f%)-60: LEFT i%,10: WIDTH i%,25: CAPTION i%,CHR$(231): sh%=i% i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,35: WIDTH i%,25: CAPTION i%,CHR$(232) i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,60: WIDTH i%,25: CAPTION i%,CHR$(233) i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,85: WIDTH i%,25: CAPTION i%,CHR$(234) FOR j% = i%-3 TO i%: FONT_NAME j%,"Wingdings": ON_CLICK j%,Texshi: NEXT j% i%=i%+1: SPIN i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+30: WIDTH i%,40 POSITION i%,5 i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,WIDTH(f%)/2 CAPTION i%,"Annuler": ON_CLICK i%,Texanu i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+80 CAPTION i%,"Quitter": ON_CLICK i%,Texfin ON_CLICK p%,Texins: ' clic sur le point d'insertion du texte (picture principal) x% = -1: y% = -1 ret% = 0: WHILE ret% = 0: WAIT 100: END_WHILE OFF_CLICK p%: 2D_TARGET_IS n2t%: PRINT_TARGET_IS n2p% DELETE f% IF FILE_EXISTS(fst$) = 1 THEN FILE_DELETE fst$ EXIT_SUB ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texpol: SHOW lp% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texpom: TEXT f%+1,ITEM_INDEX$(lp%) HIDE lp% FONT_NAME mm%,TEXT$(f%+1) FONT_NAME ap%,TEXT$(f%+1) RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texcou: x%=MOUSE_X_LEFT_DOWN(pal%): y%=MOUSE_Y_LEFT_DOWN(pal%) tr%=COLOR_PIXEL_RED(pal%,x%,y%): tg%=COLOR_PIXEL_GREEN(pal%,x%,y%) tb%=COLOR_PIXEL_BLUE(pal%,x%,y%): COLOR f%+3,tr%,tg%,tb% FONT_COLOR ap%,tr%,tg%,tb% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texenr: FONT_BOLD_OFF ap%: FONT_ITALIC_OFF ap%: FONT_UNDERLINE_OFF ap% IF CHECKED(f%+4) = 1 THEN FONT_BOLD ap% IF CHECKED(f%+5)=1 THEN FONT_ITALIC ap% IF CHECKED(f%+6)=1 THEN FONT_UNDERLINE ap% FONT_SIZE ap%,POSITION(f%+2) RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texdim: IF COUNT(mm%) = 0 THEN RETURN FONT_NAME p1%,TEXT$(f%+1): FONT_SIZE p1%,POSITION(f%+2) FONT_BOLD_OFF p1%: FONT_ITALIC_OFF p1%: FONT_UNDERLINE_OFF p1%: ' init IF CHECKED(f%+4) = 1 THEN FONT_BOLD p1% IF CHECKED(f%+5) = 1 THEN FONT_ITALIC p1% IF CHECKED(f%+6) = 1 THEN FONT_UNDERLINE p1% i% = 0 FOR j% = 1 TO COUNT(mm%) k% = TEXT_WIDTH(ITEM_READ$(mm%,j%),p1%): IF k%>i% THEN i%=k% NEXT j% j% = COUNT(mm%)*TEXT_HEIGHT("Abcxyz",p1%): ' hauteur totale a$ = STR$(i%)+" x "+STR$(j%)+" pixels = " wi%=210*i%/wp%: hi%=210*j%/wp% a$ = a$+STR$(wi%/10)+" x "+STR$(hi%/10)+" cm." CLEAR ld%: ITEM_ADD ld%,a$ RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texcen: IF COUNT(mm%)=0 THEN RETURN IF CHECKED(f%+7) = 1 GOSUB Texdim: ' -> i% = largeur maxi, j% = hauteur FOR j% = 1 TO COUNT(mm%) a$ = TRIM$(ITEM_READ$(mm%,j%)) k%=TEXT_WIDTH(a$,p1%) WHILE k%<i%: a$=" "+a$+" ": k%=TEXT_WIDTH(a$,p1%): END_WHILE ITEM_DELETE mm%,j%: ITEM_INSERT mm%,j%,RTRIM$(a$) NEXT j% ELSE: ' décentrage (alignement à gauche) FOR i% = 1 TO COUNT(mm%) a$ = TRIM$(ITEM_READ$(mm%,i%)) ITEM_DELETE mm%,i%: ITEM_INSERT mm%,i%,a$ NEXT i% END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texins: ' Insertion du texte au clic souris IF COUNT(mm%) = 0 THEN RETURN: ' pas de texte sx% = MOUSE_X_POSITION(p%): sy% = MOUSE_Y_POSITION(p%) FILE_SAVE p%,fst$: ' sauvegarde préalable Texinss: x% = sx%: y% = sy% IF CHECKED(co%+1) = 1: ' impression directe (fond blanc opaque) FONT_NAME p%,TEXT$(f%+1): FONT_SIZE p%,POSITION(f%+2) FONT_BOLD_OFF p%: FONT_ITALIC_OFF p%: FONT_UNDERLINE_OFF p%: ' init IF CHECKED(f%+4) = 1 THEN FONT_BOLD p% IF CHECKED(f%+5) = 1 THEN FONT_ITALIC p% IF CHECKED(f%+6) = 1 THEN FONT_UNDERLINE p% PRINT_TARGET_IS p%: FONT_COLOR p%,tr%,tg%,tb% 2D_TARGET_IS p%: 2D_FILL_COLOR 255,255,255 ht%=TEXT_HEIGHT("ABCxyz",p%) FOR k% = 1 TO COUNT(mm%) a$ = ITEM_READ$(mm%,k%) IF a$ <> "" THEN PRINT_LOCATE x%,y%: PRINT a$ y% = y% + ht% NEXT k% ELSE: ' texte fond transparent (pixel par pixel) FONT_NAME p1%,TEXT$(f%+1): FONT_SIZE p1%,POSITION(f%+2) FONT_BOLD_OFF p1%: FONT_ITALIC_OFF p1%: FONT_UNDERLINE_OFF p1%: ' init IF CHECKED(f%+4) = 1 THEN FONT_BOLD p1% IF CHECKED(f%+5) = 1 THEN FONT_ITALIC p1% IF CHECKED(f%+6) = 1 THEN FONT_UNDERLINE p1% PRINT_TARGET_IS p1%: FONT_COLOR p1%,tr%,tg%,tb% FOR k% = 1 TO COUNT(mm%) a$ = ITEM_READ$(mm%,k%) IF a$ <> "" wt%=TEXT_WIDTH(a$,p1%): ht%=TEXT_HEIGHT(a$,p1%) WIDTH p1%,wt%: HEIGHT p1%,ht% 2D_TARGET_IS p1%: 2D_FILL_COLOR 254,254,254: PRINT_LOCATE 0,0: PRINT a$ 2D_TARGET_IS p% FOR j% = 0 TO ht%-1 FOR i% = 0 TO wt%-1 r% = COLOR_PIXEL_RED(p1%,i%,j%) IF r% <> 254 g% = COLOR_PIXEL_GREEN(p1%,i%,j%) b% = COLOR_PIXEL_BLUE(p1%,i%,j%) 2D_PEN_COLOR r%,g%,b%: 2D_POINT x%+i%,y%+j% END_IF NEXT i% DISPLAY NEXT j% END_IF y% = y% + ht% NEXT k% END_IF TO_FOREGROUND f% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texshi: IF x%=-1 OR y%=-1 OR COUNT(mm%)=0 THEN RETURN ps% = POSITION(sh%+4): ' pas du déplacement CLIPBOARD_COPY p% 2D_TARGET_IS p% i% = NUMBER_CLICK IF i%=sh%: ' décalage vers la gauche sx% = sx%-ps% ELSE IF i%=sh%+1: ' décalage vers la droite sx%=sx%+ps% ELSE IF i%=sh%+2: ' décalage vers le haut sy%=sy%-ps% ELSE: ' décalage vers le bas sy%=sy%+ps% END_IF END_IF END_IF FILE_LOAD p%,fst$ GOSUB Texinss RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texanu: IF FILE_EXISTS(fst$) = 1 THEN FILE_LOAD p%,fst$: CLIPBOARD_COPY p% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Texfin: ret% = 1 RETURN END_SUB ' ============================================================================== SUB Imagin(xa%,ya%,p%) ' boîte à outils, affichée en xa%,ya%, pour apposer une image sur le picture p% DIM_LOCAL f%,i%,j%,k%,x%,y%,tr%,tg%,tb%,a$,ret%,lp%,n2t%,p1%,wt%,ht%,fsi$,opn%,img% DIM_LOCAL fcl$,wi%,hi%,fi$,sh%,ps%,sx%,sy%,adi%,pic%,rc$ fi$ = rtmp$+"Ifxwz.txt" fsi$ = rtmp$+"Savpre.bmp" fcl$ = rtmp$+"Savcol.bmp" IF FILE_EXISTS(fsi$) = 1 THEN FILE_DELETE fsi$ rc$ = CHR$(13)+CHR$(10) n2t% = NUMBER_2D_TARGET: 2D_TARGET_IS p% IF LABEL("Imgfin")=0 THEN LABEL Imgfin IF LABEL("Imgchx")=0 THEN LABEL Imgchx IF LABEL("Imgins")=0 THEN LABEL Imgins IF LABEL("Imganu")=0 THEN LABEL Imganu IF LABEL("Imgchw")=0 THEN LABEL Imgchw IF LABEL("Imgshi")=0 THEN LABEL Imgshi IF LABEL("Imginss")=0 THEN LABEL Imginss IF LABEL("Imgcol")=0 THEN LABEL Imgcol f% = 750: WHILE OBJECT_EXISTS(f%)=1: f%=f%+1: END_WHILE FORM f%: TOP f%,ya%: LEFT f%,xa%: HEIGHT f%,180: WIDTH f%,352: BORDER_SMALL f% COLOR f%,180,255,255: FONT_BOLD f%: FONT_NAME f%,"Arial": ON_CLOSE f%,Imgfin CAPTION f%,"- OUTILS IMAGE -" i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: CAPTION i%,"Image:" i%=f%+2: EDIT i%: PARENT i%,f%: TOP i%,0: LEFT i%,40: WIDTH i%,250: ON_CLICK i%,Imgchx: ' Image TEXT i%," (parcourir)": FONT_BOLD_OFF i%: FONT_ITALIC i% i%=f%+3: BUTTON i%: PARENT i%,f%: TOP i%,0: WIDTH i%,40: LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+5 CAPTION i%,"Coller": ON_CLICK i%,Imgcol i%=i%+1: PICTURE i%: PARENT i%,f%: TOP i%,TOP(i%-1)+25: LEFT i%,5: WIDTH i%,120: HEIGHT i%,90 STRETCH_ON i%: pic%=i% i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,28: LEFT i%,140: CAPTION i%,"Dimensions:" i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,28: LEFT i%,LEFT(i%-1)+80: WIDTH i%,100 COLOR i%,255,255,0: adi%=i% i%=adi%+1: ALPHA i%: PARENT i%,f%: TOP i%,65: LEFT i%,140 CAPTION i%,"Redim.: W= H=" i%=adi%+2: SPIN i%: PARENT i%,f%: TOP i%,TOP(i%-1)-3: LEFT i%,LEFT(i%-1)+60: WIDTH i%,50 i%=adi%+3: SPIN i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+70: WIDTH i%,50 ON_CHANGE adi%+2,Imgchw i%=adi%+4: ALPHA i%: PARENT i%,f%: TOP i%,TOP(i%-1)+25: LEFT i%,LEFT(adi%+2): COLOR i%,255,255,0
i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,HEIGHT(f%)-60: LEFT i%,10: WIDTH i%,25 CAPTION i%,CHR$(231): sh%=i% i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,35: WIDTH i%,25: CAPTION i%,CHR$(232) i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,60: WIDTH i%,25: CAPTION i%,CHR$(233) i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,85: WIDTH i%,25: CAPTION i%,CHR$(234) FOR j% = i%-3 TO i%: FONT_NAME j%,"Wingdings": ON_CLICK j%,Imgshi: NEXT j% i%=i%+1: SPIN i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+30: WIDTH i%,40 POSITION i%,5
i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,HEIGHT(f%)-60: LEFT i%,WIDTH(f%)/2 CAPTION i%,"Annuler": ON_CLICK i%,Imganu i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+80 CAPTION i%,"Quitter": ON_CLICK i%,Imgfin i%=i%+1: OPEN_DIALOG i%: opn% = i% i%=i%+1: IMAGE i%: img% = i% ON_CLICK p%,Imgins: ' clic sur le point d'insertion de l'image (picture principal) x%=-1: y%=-1 ret% = 0: WHILE ret% = 0: WAIT 100: END_WHILE OFF_CLICK p%: 2D_TARGET_IS n2t% DELETE f%: IF OBJECT_EXISTS(opn%)=1 THEN DELETE opn% IF OBJECT_EXISTS(img%)=1 THEN DELETE img% IF FILE_EXISTS(fsi$) = 1 THEN FILE_DELETE fsi$ IF FILE_EXISTS(fcl$) = 1 THEN FILE_DELETE fcl$ EXIT_SUB ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imgchx: a$ = FILE_NAME$(opn%): IF LEN(a$)<4 THEN RETURN TEXT f%+2,a$: FONT_ITALIC_OFF f%+2: FONT_BOLD f%+2 EXECUTE_WAIT irfan$ + " " + a$ + " /info=" + fi$ + " /fullinfo" FILE_OPEN_READ 9, fi$ WHILE FILE_EOF(9) = 0: FILE_READLN 9, a$ IF LEFT$(a$,16) = "Image dimensions" a$=MID$(a$,20,50): wi%=VAL(LEFT$(a$,INSTR(a$," ")-1)) a$=MID$(a$,INSTR(a$," ")+3,50): hi%=VAL(LEFT$(a$,INSTR(a$," ")-1)) EXIT_WHILE END_IF END_WHILE FILE_CLOSE 9: FILE_DELETE fi$ i% = 10*wi%*21/wp%: j% = 10*hi%*21/wp%: ' en cm a$ = " "+STR$(wi%)+" x "+ STR$(hi%)+" pixels " a$=a$+rc$+"= "+STR$(i%/10)+" x "+STR$(j%/10)+" cm" CAPTION adi%,a$ POSITION adi%+2,wi%: POSITION adi%+3,hi% IF wi%>hi% WIDTH pic%,120: HEIGHT pic%,120*hi%/wi% ELSE HEIGHT pic%,90: WIDTH pic%,90*wi%/hi% END_IF FILE_LOAD pic%,TEXT$(f%+2): ' vignette RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imgins: IF TEXT$(f%+2) = "" OR LEFT$(TEXT$(f%+2),1)=" " THEN TO_FOREGROUND f%: RETURN: ' pas d'image sx% = MOUSE_X_POSITION(p%): sy% = MOUSE_Y_POSITION(p%) FILE_SAVE p%,fsi$: ' sauvegarde préalable ' insertion de l'image au clic souris (coin supérieur gauche) Imginss: x% = sx%: y% = sy% a$ = TEXT$(f%+2) i% = POSITION(adi%+2) IF i% <> wi%: ' redimensionnement demandé EXECUTE_WAIT irfan$+" "+a$+" /resize=("+STR$(i%)+",0) /aspectratio /clipcopy /killmesoftly" ELSE EXECUTE_WAIT irfan$+" "+a$+" /clipcopy /killmesoftly": ' image telle quelle -> clip END_IF CLIPBOARD_PASTE img% 2D_IMAGE_PASTE img%,x%,y% TO_FOREGROUND f% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imgchw: POSITION adi%+3,POSITION(adi%+2)*hi%/wi%: ' largeur proportionnelle à la hauteur i% = 10*POSITION(adi%+2)*21/wp%: j% = 10*POSITION(adi%+3)*21/wp% CAPTION adi%+4,"= "+STR$(i%/10)+" x "+STR$(j%/10)+" cm." RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imgcol: EXECUTE_WAIT irfan$ + " /clippaste /convert="+fcl$ EXECUTE_WAIT irfan$ + " "+fcl$+" /info=" + fi$ + " /fullinfo" FILE_OPEN_READ 9, fi$ WHILE FILE_EOF(9) = 0: FILE_READLN 9, a$ IF LEFT$(a$,16) = "Image dimensions" a$=MID$(a$,20,50): wi%=VAL(LEFT$(a$,INSTR(a$," ")-1)) a$=MID$(a$,INSTR(a$," ")+3,50): hi%=VAL(LEFT$(a$,INSTR(a$," ")-1)) EXIT_WHILE END_IF END_WHILE FILE_CLOSE 9: FILE_DELETE fi$ TEXT f%+2,fcl$ CAPTION adi%," "+STR$(wi%)+" x "+ STR$(hi%)+" " POSITION adi%+2,wi%: POSITION adi%+3,hi% IF wi%>hi% WIDTH pic%,120: HEIGHT pic%,120*hi%/wi% ELSE HEIGHT pic%,90: WIDTH pic%,90*wi%/hi% END_IF FILE_LOAD pic%,TEXT$(f%+2): ' vignette RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imgshi: IF x%=-1 OR y%=-1 THEN RETURN ps% = POSITION(sh%+4): ' pas du déplacement CLIPBOARD_COPY p% 2D_TARGET_IS p% i% = NUMBER_CLICK IF i%=sh%: ' décalage vers la gauche sx% = sx%-ps% ELSE IF i%=sh%+1: ' décalage vers la droite sx%=sx%+ps% ELSE IF i%=sh%+2: ' décalage vers le haut sy%=sy%-ps% ELSE: ' décalage vers le bas sy%=sy%+ps% END_IF END_IF END_IF FILE_LOAD p%,fsi$ GOSUB Imginss RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imganu: IF FILE_EXISTS(fsi$) = 1 THEN FILE_LOAD p%,fsi$: CLIPBOARD_COPY p% RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Imgfin: ret% = 1 RETURN END_SUB ' ============================================================================== SUB Picshift(xa%,ya%,p%) ' Décalage global vertical ou horizontal du contenu du picture p% d'une valeur ' choisie (Attention: les parties débordantes sont perdues) DIM_LOCAL n2t%,f%,i%,j%,ret%,ps%,bg%,im% IF LABEL("Pshift")=0 THEN LABEL Pshift IF LABEL("Pshifta")=0 THEN LABEL Pshifta IF LABEL("Pshiftq")=0 THEN LABEL Pshiftq n2t% = NUMBER_2D_TARGET: 2D_TARGET_IS p% f% = 1050: WHILE OBJECT_EXISTS(f%)=1: f% = f%+1: END_WHILE FORM f%: TOP f%,ya%: LEFT f%,xa%: WIDTH f%,300: HEIGHT f%,110: BORDER_SMALL f% FONT_BOLD f%: COLOR f%,200,255,255: ON_CLOSE f%,Pshiftq CAPTION f%,"DÉCALAGE GLOBAL DE LA PAGE-CIBLE" i%=f%+1: ALPHA i%: PARENT i%,f%: TOP i%,3: LEFT i%,50 CAPTION i%,"Décalage de: pixels" i%=f%+2: SPIN i%: PARENT i%,f%: TOP i%,0: LEFT i%,LEFT(i%-1)+80: WIDTH i%,40 POSITION i%,5 i%=i%+1: ALPHA i%: PARENT i%,f%: TOP i%,25: LEFT i%,30: CAPTION i%," Attention, ce qui déborde est perdu ! " COLOR i%,255,255,0 i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,45: LEFT i%,10: WIDTH i%,25: CAPTION i%,CHR$(231): bg%=i% i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,35: WIDTH i%,25: CAPTION i%,CHR$(232) i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,60: WIDTH i%,25: CAPTION i%,CHR$(233) i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,85: WIDTH i%,25: CAPTION i%,CHR$(234) FOR j% = i%-3 TO i%: FONT_NAME j%,"Wingdings": ON_CLICK j%,Pshift: NEXT j% i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,120: CAPTION i%,"Annuler" ON_CLICK i%,Pshifta i%=i%+1: BUTTON i%: PARENT i%,f%: TOP i%,TOP(i%-1): LEFT i%,200: CAPTION i%,"Quitter" ON_CLICK i%,Pshiftq IMAGE 1060: im% = 1060 ret% = 0: WHILE ret% = 0: WAIT 100: END_WHILE 2D_TARGET_IS n2t% DELETE f%: IF OBJECT_EXISTS(im%)=1 THEN DELETE im% EXIT_SUB ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Pshift: i% = NUMBER_CLICK ps% = POSITION(f%+2): ' pas du déplacement, en pixels CLIPBOARD_COPY p% 2D_TARGET_IS p% IF i%=bg%: ' décalage vers la gauche 2D_IMAGE_COPY im%,ps%,0,WIDTH(p%),HEIGHT(p%) CLS: 2D_IMAGE_PASTE im%,0,0 ELSE IF i%=bg%+1: ' décalage vers la droite 2D_IMAGE_COPY im%,0,0,WIDTH(p%)-ps%,HEIGHT(p%) CLS: 2D_IMAGE_PASTE im%,ps%,0 ELSE IF i%=bg%+2: ' décalage vers le haut 2D_IMAGE_COPY im%,0,ps%,WIDTH(p%),HEIGHT(p%) CLS: 2D_IMAGE_PASTE im%,0,0 ELSE: ' décalage vers le bas 2D_IMAGE_COPY im%,0,0,WIDTH(p%),HEIGHT(p%)-ps% CLS: 2D_IMAGE_PASTE im%,0,ps% END_IF END_IF END_IF RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Pshifta: CLIPBOARD_PASTE p%: ' annul dernier déplacement RETURN ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Pshiftq: ret% = 1 RETURN END_SUB ' ============================================================================== SUB Pr_init(orient%) ' Initialisation imprimante ('début d'impression') ' orient% = 0 Portrait, = 1 Paysage ' 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 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_mmpix") = 0 THEN DIM Pr_mmpix: ' pixels par mm IF VARIABLE("Pr_lt%") = 0 THEN DIM Pr_lt%: ' largeur totale, en pixels IF VARIABLE("Pr_ht%") = 0 THEN DIM Pr_ht%: ' hauteur totale, enpixels 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 ' 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 Pr_lt% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),3,0,0) Pr_ht% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),4,0,0) Pr_mmpix = Pr_hu%/297: ' pixels par mm, à l'impression en 600 dpi ' 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, largeur et hauteur, sans les marges, en pixels: ' ========== ' ATTENTION: Les dimensions sont actualisées en fonction de l'option orientation ! ' ========== 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 ' 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 (pixels): de 75,75 à 4811,6862 ******** 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% 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 END_SUB ' ============================================================================== SUB ImgDim(f$) ' Dimensions de l'image f$ -> wi%,hi% DIM_LOCAL a$, fi$ fi$ = rtmp$+"Infos.txt" EXECUTE_WAIT irfan$ + " "+f$+" /info=" + fi$ + " /fullinfo" FILE_OPEN_READ 9, fi$ WHILE FILE_EOF(9) = 0: FILE_READLN 9, a$ IF LEFT$(a$,16) = "Image dimensions" a$=MID$(a$,20,50): wi%=VAL(LEFT$(a$,INSTR(a$," ")-1)) a$=MID$(a$,INSTR(a$," ")+3,50): hi%=VAL(LEFT$(a$,INSTR(a$," ")-1)) EXIT_WHILE END_IF END_WHILE FILE_CLOSE 9: FILE_DELETE fi$ END_SUB ' ============================================================================== DATA "Debaid" DATA " MODE D'EMPLOI" DATA "1_ Menu 'Fichier'","2_ Menu 'Edit'","3_ Menu 'Outils'" DATA "4_ Menu Outils: Dessin","5_ Menu Outils: Textes","6_ Menu Outils: Images" DATA "7_ Menu Outils: Décalage" DATA "8_ Menu Outils: Rotations","9_ Menu 'Grilles'","10_ Menu 'Format'","F"
DATA "1_ ","","- Nouveau: création d'une nouvelle feuille","" DATA "- Ouvrir: Choix et affichage d'un fichier existant dans le" DATA " le répertoire de travail","" DATA "- Enregistrer: enregistrement du dessin actuel (choisir un format" DATA " image, de préférence BMP) dans le répertoire" DATA " de travail.","" DATA "- Imprimer: imprimer la page actuelle, ou imprimer deux demi-" DATA " pages préalablement enregistrées." DATA " L'imprimante doit être allumée et connectée" DATA " (pas de dialogue imprimante).","" DATA "- Quitter: fermer le programme.","" DATA " ATTENTION: dans les cas 'Nouveau', 'Ouvrir' et 'Quitter', si le" DATA " ---------------- dessin actuel éventuel n'a pas été enregistré au" DATA " préalable, il sera définitivement perdu." DATA "","" DATA "--------------------------------------------------------------------------------" DATA " Il est fortement conseillé d'enregistrer périodiquement la page" DATA " en cours de création, ou après chaque insertion importante, pour" DATA " éviter de perdre la totalité de son travail en cas de plantage." DATA "--------------------------------------------------------------------------------" DATA "F"
DATA "2_ ","" DATA "- 'Coller': coller le contenu du presse-papier (doit être une image)" DATA " à l'emplacement cliqué." DATA " L'image gardera ses dimensions d'origine.","" DATA "- 'Copier toute la page': copier la totalité de la page dans le presse-papier","" DATA "- 'Coller toute la page': coller le presse-papier (contenant une image)" DATA " dans la totalité de la page" DATA " ATTENTION: dans ce cas, la page prendra les dimensions de"," l'image.","F"
DATA "3_ "," ","Le menu Outils permet d'insérer dans la page trois types d'objets:" DATA "- des dessins: lignes ou figures géométriques diverses" DATA "- des textes" DATA "- des images: fichiers ou presse-papier","" DATA "Il sera possible immédiatement après insertion d'un objet de:" DATA "- déplacer cet objet pour le positionner avec précision" DATA "- dans le cas de figures dessinées, de redimensionner cet objet.","" DATA " NB: on ne peut appeler qu'un seul outil à la fois.","F"
DATA "4_ ","","Dessin: dessiner des figures élémentaires dans la page, après" DATA "avoir choisi l'épaisseur et la couleur du tracé:" DATA "- Tracé libre" DATA "- Trait rectiligne" DATA "- Rectangle vide ou plein" DATA "- Cercle vide ou plein" DATA "- Ellipse vide ou pleine" DATA "- Étoile" DATA "- Polygone (en précisant le nombre de côtés).","," DATA "1) Choisir la figure désirée dans la liste" DATA "2) Cliquer dans la feuille l'emplacement désisré" DATA "3) Sans relâcher, déplacer la souris vers la dimension voulue" DATA "4) Relâcher la souris.","" DATA "Il est possible ensuite soit d'annuler l'opération ('Annuler')," DATA "soit de déplacer ou redimensionner l'objet, en fixant l'ampleur" DATA "des déplacements (nombre de pixels).","" DATA "Fermer la fenêtre à la fin des opérations de dessin ('Quitter').","F"
DATA "5_ ","","Insertion Texte: préparer le texte dans la fenêtre affichée, choisir" DATA "- sa police de caractères: cliquer dans la case, puis sur une police" DATA "- sa taille de caractères" DATA "- sa couleur: cliquer dans une des cases de couleurs" DATA "- ses enrichissements éventuels (G=Gras, I=Italique, S=Souligné)" DATA "- son mode d'insertion: fond transparent ou non." DATA "Puis cliquer l'emplacement de l'insertion sur le dessin." DATA "NB: l'option 'fond transparent' est un peu plus longue à s'effectuer.","" DATA "L'option 'Centrer' permet de centrer toutes les lignes par rapport" DATA "à l'ensemble du texte à insérer.","" DATA "La fenêtre 'Aperçu' donne une image de texte type en fonction des" DATA "paramètres choisis (police, taille, couleur, enrichissements)." DATA "Le bouton 'Dimensions' donne les dimensions finales du texte en" DATA "pixels dans la feuille en fonction des paramètres.","" DATA "Cliquer la feuille à l'emplacement désiré du coin haut gauche" DATA "pour insérer le texte dans la feuille","" DATA "Il est possible ensuite soit d'annuler l'opération (bouton 'Annuler')," DATA "soit de déplacer le texte finement à l'aide des flèches.","" DATA "Bouton 'Quitter' pour valider et fermer la fenêtre d'insertion.","F"
DATA "6_ ","","Insertion Image: choisir une image (parcourir) ou une image du" DATA "presse-papier 'Coller'). Ses dimensions en pixels sont affichées, ainsi" DATA "qu'une imagette la représentant." DATA "On peut la redimensionner pour l'adapter à ses besoins (fixer la" DATA "valeur W : largeur, en pixels)." DATA "Pour l'insérer, cliquer dans la feuille l'emplacement de son insertion.","" DATA "Comme pour les dessins ou textes, il est possible de la repositionner" DATA "finement à l'aide des boutons flèches.","" DATA "On peut ensuite, soit annuler l'opération (bouton 'Annuler'), soit" DATA "insérer une autre image, ou 'Quitter'.","F"
DATA "7_ ","","Décalage global de la page affichée:","" DATA "L'appui sur un des boutons flèches provoque un décalage de la" DATA "totalité du contenu de la page dans le sens de la flèche.","" DATA "On peut fixer la quantité de déplacement, en pixels." DATA "Ceci peut être utilisé entre autres pour centrer le contenu dans la page.","" DATA "Attention: si au cours du déplacement une partie du dessin déborde" DATA "de la feuille, ce qui a débordé est définitivement perdu.","F"
DATA "8_ ","","Rotations de 180 degrés:" DATA "Mise à l'envers de la partie sélectionnée (pour le cas de cartes," DATA "menus etc. à replier en 2 ou 4).","" DATA "1) Rotation par quart de page (cas de la feuille A4 plein format):" DATA "NE= haut/droite, NO= haut/gauche, SE= bas/droite, S0= bas/gauche","" DATA "2) Rotation totale de la page affichée (Format demi A4)" DATA "- la rotation se fait séparément pour la moitié droite et la moitié" DATA " gauche." DATA "NB: il est recommandé, et plus simple, de ne faire cette rotation," DATA " si nécessaire, qu'au moment de l'impression, où elle sera proposée.","" DATA "Pour annuler, il suffit de refaire une rotation de 180°.","F"
DATA "9_ ","Menu 'Grilles/Axes/Échelles':","" DATA "- Grille: affichage ou effacement d'une grille quadrillée en" DATA " centimètres, des axes H et V, et des limites de la zone imprimable.","" DATA "- Axes: tracé ou effacement des deux axes horizontal et vertical.","" DATA "- Échelles: basculement de l'affichage des échelles gauche et bas en" DATA " pixels ou en centimètres.","F"
DATA "10_","Choix du format d'affichage à l'écran :","" DATA "- Format A4 pleine page, toute la page A4 affichée à l'écran, pour les" DATA " écrans suffisamment grands (affichage grandeur nature)." DATA " Si l'écran est trop petit, l'image sera agrandie à l'impression" DATA " où elle perdra en définition.","" DATA "- Format demi-page, supérieure ou inférieure, recommandé. Chaque" DATA " demi-page sera enregistrée sous un nom spécifique, les deux demi-" DATA " pages étant assemblées au moment de l'impression.","" DATA "Il sera possible au moment de l'impression d'assembler deux demi-" DATA "pages supérieures ou deux demi-pages inférieures identiques" DATA "(cas des menus ou cartes avec encart sur feuilles séparées).","F" ' ------------------------------------------------------------------------------ SUB Aide(x%,y%,a$) ' Affichage d'une aide à l'écran, en x%,y% ' Les données sont sous forme de Datas dans le programme principal, le paramètre ' a$ donnant le libellé de la ligne à rechercher. Les Datas sont dans l'ordre: ' - le nom repère (paramètre a$) qui pointe le début des datas ' - le 'Caption' (titre) de la fenêtre d'aide ' - les noms des différents chapitres, numérotés de "1_ " à "n_ " ' exemple: DATA "1_ Premier chapitre","2_ Deuxième chapitre",etc., la série ' se terminant par "F" ' - les chapitres successifs, avec leur numéro correspondant ' exemple: DATA "1_ ","Premier chapitre","Texte du chapitre...","...","..." ' chaque chapitre se terminant par "F". ' NB: en-tête rubrique 3 caract., par ex "1_ ", "8_ ", mais "10_" (sans espace) DIM_LOCAL ar$, aru$, rubx%, fid%, ata%: ata% = 0 IF LABEL("Sortaid") = 0 THEN LABEL Sortaid IF LABEL("A_Rub") = 0 THEN LABEL A_Rub fid% = 1100: WHILE OBJECT_EXISTS(fid%) = 1: fid% = fid%+1000: END_WHILE FORM fid%: TOP fid%,y%: LEFT fid%,x%: HEIGHT fid%,680: WIDTH fid%,600 BORDER_SMALL fid%: COLOR fid%,190,255,255: FONT_NAME fid%, "Comic Sans MS" ON_CLOSE fid%,Sortaid LIST fid%+1: PARENT fid%+1,fid%: WIDTH fid%+1,150: HEIGHT fid%+1,HEIGHT(fid%)-35 COLOR fid%+1,255,255,128: ON_CLICK fid%+1,A_Rub: ' liste des rubriques, à gauche MEMO fid%+2: PARENT fid%+2,fid%: TOP fid%+2,20: LEFT fid%+2,WIDTH(fid%+1) WIDTH fid%+2,WIDTH(fid%)-WIDTH(fid%+1)-16: HEIGHT fid%+2,HEIGHT(fid%+1)-42 COLOR fid%+2,205,255,205: FONT_SIZE fid%+2,10: ' rubriques successives, à droite ALPHA fid%+3: PARENT fid%+3,fid%: LEFT fid%+3,LEFT(fid%+2)+40: ' titre FONT_SIZE fid%+3,12 BUTTON fid%+4: PARENT fid%+4,fid%: TOP fid%+4,HEIGHT(fid%)-59: LEFT fid%+4,330 CAPTION fid%+4,"OK": ON_CLICK fid%+4,Sortaid: ' sortie de l'aide RESTORE: READ ar$: WHILE ar$<>a$: READ ar$: END_WHILE READ ar$: CAPTION fid%,ar$ READ ar$: WHILE ar$<>"F": ITEM_ADD fid%+1,ar$: READ ar$: END_WHILE rubx% = 0: GOSUB A_Rub: ' affichage préalable de la 1ère rubrique WHILE ata% = 0: WAIT 150: END_WHILE: DELETE fid%: EXIT_SUB ' ------------------------------------------------------------------------------ Sortaid: ata% = 1: ' feu vert pour sortir RETURN ' ------------------------------------------------------------------------------ A_Rub: ' affichage d'une rubrique rubx% = ITEM_INDEX(fid%+1): IF rubx% = 0 THEN rubx% = 1: ' initial aru$ = ITEM_READ$(fid%+1,rubx%) CAPTION fid%+3, aru$ aru$ = LEFT$(aru$,3) RESTORE: READ ar$: WHILE ar$<>aru$: READ ar$: END_WHILE CLEAR fid%+2 READ ar$: WHILE ar$<>"F": ITEM_ADD fid%+2,ar$: READ ar$: END_WHILE RETURN END_SUB ' ============================================================================== J'ai édité ci-dessus, le forum avait encore bouffé des antislash... Je précise que pour IrfanView on peut très bien utiliser une version normale sous Program Files, il suffit de changer le chemin au début du programme. et... BONNE ANNÉE À TOUS | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Jeu 1 Jan 2015 - 4:12 | |
| Ton programme n' est pas passé inaperçu !!!... Je l' ai vu... Je testerai un peu plus tard mais l' idée est très intéressante. (Jicehel avait raison... ) | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Menus et Cartes Jeu 1 Jan 2015 - 11:32 | |
| + 1 mais là je vais manger et oui encore | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Menus et Cartes Jeu 1 Jan 2015 - 18:53 | |
| Ca se confirme JL35... J'espère que tu auras encore plein de bonnes idées en 2015. Bonne année à tous qu'elle vous apporte santé, bonheur, bonne humeur, bonnes iées et pleins de super programmes. Merci JL35 pour ce nouvel utilitaire | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Menus et Cartes Jeu 1 Jan 2015 - 20:29 | |
| Merci à vous et bonne année également ! Ça arrive sans doute un peu tard pour les fêtes, je me suis servi de ce programme pour faire mes menus de Noël (rien d'original, c'est fait rapido), ça rend pas mal, c'est facile à utiliser, avec dans mon cas impression sur du papier Avery 200g préplié pour cartes/faire-part. Je conseille quand même de faire une sauvegarde de temps en temps, pour ne pas perdre tout le boulot en cas de plantage imprévu. J'en ai éliminé pas mal, mais l'expérience montre qu'il reste toujours des cas auxquels on n'a pas pensé (le plus délicat a été le timer dans la sub Dessin qui m'a causé quelques soucis). Image de la feuille imprimée, à replier (1 et 4: couverture, 2 et 3 pages intérieures): -> | |
| | | Contenu sponsorisé
| Sujet: Re: Menus et Cartes | |
| |
| | | | Menus et Cartes | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |