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 |
|
|
| Cartes de visite | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Cartes de visite Mar 26 Déc 2017 - 22:43 | |
| A imprimer par exemple sur du bristol léger. Avec possibilité de mettre une image de fond, qui sera automatiquement redimensionnée aux dimensions de la carte (donc avec déformation si les proportions sont différentes). L'impression se fait avec les fonctions d'impression de KGF.dll A ajuster - le répertoire de fichiers temporaires en tête: rpr$ (ici C:\TEMP\) - l'adresse de KGF.dll dans la sub Pr_Init() Choisir d'abord les dimensions d'une carte, en mm, valider par 'OK', puis cliquer le bouton 'Texte' pour saisir le contenu. Le texte est saisi dans un Memo avec formatage à l'aide de balises maison, recopié dans la carte 1 ('Insérer'), et une fois mis au point, dupliqué dans les autres cartes (bouton 'Recopier'), puis le tout est éventuellement imprimé. Tout ça est évidemment ajustable (facilement je pense, rien de sorcier là-dedans) à la convenance de chacun ! - Code:
-
' Cartes de visite LABEL Tx51,Desfond,Tx,Insere,Deplace,Recopie,Imgf,Pclair,Enrich,GIS,Poltail LABEL Poltail1,Coulr,Poscurs,Imprime DIM r,p%,a$,b$,c$,x0%,y0%,x%,y%,xa%,ya%,rc$,mg%,mh%,wm%,hm%,wc%,hc%,i%,j%,k%,w5%,wi%,hi% DIM wa%,ha%,fimp$,img,nc%,nr%,txi$,rpr$,pi%,curs%,li%,po%,mm% rpr$ = "C:\TEMP"+CHR$(92) fimp$ = rpr$+"Fimpr.bmp" rc$ = CHR$(13)+CHR$(10)
WIDTH 0,1130: HEIGHT 0,850: COLOR 0,164,255,255 FONT_BOLD 0: border_small 0 CAPTION 0," - CARTES DE VISITE -" ALPHA 1: TOP 1,5: LEFT 1,10: CAPTION 1," Dimensions (mm): X " COLOR 1,255,255,0 SPIN 2: TOP 2,1: LEFT 2,120: WIDTH 2,49 SPIN 3: TOP 3,TOP(2): LEFT 3,LEFT(2)+WIDTH(2)+20: WIDTH 3,WIDTH(2) POSITION 2,87: POSITION 3,49: ' arbitraire CONTAINER_OPTION 10: TOP 10,0: LEFT 10,LEFT(3)+WIDTH(3)+5: HEIGHT 10,27: WIDTH 10,80 COLOR 10,255,255,0 OPTION 11: PARENT 11,10: TOP 11,0: LEFT 11,2: CAPTION 11,"Portrait" OPTION 12: PARENT 12,10: TOP 12,13: LEFT 12,2: CAPTION 12,"Paysage": MARK_ON 12 BUTTON 4: TOP 4,TOP(3): LEFT 4,LEFT(10)+WIDTH(10)+5: WIDTH 4,50: CAPTION 4,"OK" ON_CLICK 4,Desfond BUTTON 5: TOP 5,TOP(4): LEFT 5,LEFT(4)+WIDTH(4)+10: CAPTION 5,"Texte" ON_CLICK 5,Tx BUTTON 6: TOP 6,TOP(5): LEFT 6,LEFT(5)+WIDTH(5)+10: CAPTION 6,"Recopier" ON_CLICK 6,Recopie BUTTON 7: TOP 7,TOP(6): LEFT 7,LEFT(6)+WIDTH(6)+10: CAPTION 7,"Imprimer" ON_CLICK 7,Imprime p% = 20 PICTURE p%: TOP p%,30: LEFT p%,10: WIDTH p%,1100: HEIGHT p%,778: ' (A4) r = 1100/297: ' pixels/mm à l'écran IMAGE 21 IMAGE 22
FORM 50: HIDE 50: BORDER_SMALL 50: TOP 50,270: LEFT 50,LEFT(0)+20: WIDTH 50,500 HEIGHT 50,360: FONT_NAME 50,"Arial": FONT_BOLD 50: COLOR 50,255,164,80 w5% = WIDTH_CLIENT(50) LIST 60: PARENT 60,50: TOP 60,60: WIDTH 60,100: HEIGHT 60,HEIGHT_CLIENT(50)-70 COLOR 60,255,255,180 ALPHA 52: PARENT 52,50: LEFT 52,10: CAPTION 52,"Image de fond éventuelle (bmp, jpg):" EDIT 53: PARENT 53,50: TOP 53,15: LEFT 53,0: WIDTH 53,280 ON_CLICK 53,Imgf ALPHA 57: PARENT 57,50: TOP 57,TOP(53)+3: LEFT 57,WIDTH(53)+10 CAPTION 57,"Éclaircir (0 à 127) :" SPIN 58: PARENT 58,50: TOP 58,TOP(53): WIDTH 58,50: LEFT 58,LEFT(57)+100 BUTTON 59: PARENT 59,50: TOP 59,TOP(58): WIDTH 59,35: LEFT 59,LEFT(58)+WIDTH(58)+3 CAPTION 59,"OK": ON_CLICK 59,Pclair OPEN_DIALOG 68: FILTER 68,"Image JPG, BMP|*.jpg;*.bmp" ALPHA 54: PARENT 54,50: TOP 54,TOP(53)+30: LEFT 54,WIDTH(60)+120 CAPTION 54,"Texte formaté (balises):" MEMO 55: PARENT 55,50: TOP 55,TOP(54)+15: LEFT 55,WIDTH(60): WIDTH 55,w5%-WIDTH(60) HEIGHT 55,200: mm% = 55: ' Memo de saisie du texte
EDIT 70: PARENT 70,50: TOP 70,TOP(55)+HEIGHT(55)+5: LEFT 70,LEFT(55): WIDTH 70,130: TEXT 70,"Arial" SPIN 71: PARENT 71,50: TOP 71,TOP(70): LEFT 71,LEFT(70)+WIDTH(70): WIDTH 71,45 POSITION 71,12 BUTTON 72: PARENT 72,50: TOP 72,TOP(70): WIDTH 72,25: LEFT 72,LEFT(71)+WIDTH(71)+5: CAPTION 72,"G" BUTTON 73: PARENT 73,50: TOP 73,TOP(70): WIDTH 73,25: LEFT 73,LEFT(72)+27: CAPTION 73,"I" BUTTON 74: PARENT 74,50: TOP 74,TOP(70): WIDTH 74,25: LEFT 74,LEFT(73)+27: CAPTION 74,"S" ALPHA 75: PARENT 75,50: TOP 75,TOP(74)+3: LEFT 75,LEFT(74)+27: CAPTION 75,"Coul." EDIT 76: PARENT 76,50: TOP 76,TOP(75)-3: WIDTH 76,50: LEFT 76,LEFT(75)+30: TEXT 76,"000000" BUTTON 77: PARENT 77,50: TOP 77,TOP(72): WIDTH 77,25: LEFT 77,LEFT(76)+WIDTH(76)+3 CAPTION 77,"OK" FOR i% = 70 TO 77: ON_CLICK i%,Enrich: NEXT i%
BUTTON 56: PARENT 56,50: TOP 56,HEIGHT_CLIENT(50)-30: LEFT 56,LEFT(55)+80 CAPTION 56,"Insérer": ON_CLICK 56,Insere ALPHA 61: PARENT 61,50: TOP 61,TOP(56)+5: LEFT 61,LEFT(56)+WIDTH(56)+10 CAPTION 61,"Ajuster:" BUTTON 62: PARENT 62,50: TOP 62,TOP(56): WIDTH 62,25: LEFT 62,LEFT(61)+50 CAPTION 62, CHR$(231) BUTTON 63: PARENT 63,50: TOP 63,TOP(62): WIDTH 63,WIDTH(62): LEFT 63,LEFT(62)+28 CAPTION 63,CHR$(232) BUTTON 64: PARENT 64,50: TOP 64,TOP(62): WIDTH 64,WIDTH(62): LEFT 64,LEFT(63)+28 CAPTION 64,CHR$(233) BUTTON 65: PARENT 65,50: TOP 65,TOP(62): WIDTH 65,WIDTH(62): LEFT 65,LEFT(64)+28 CAPTION 65,CHR$(234) FOR i% = 62 TO 65: FONT_NAME i%,"Wingdings": FONT_SIZE i%,10: ON_CLICK i%,Deplace: NEXT i% SPIN 66: PARENT 66,50: TOP 66,TOP(65): WIDTH 66,35: LEFT 66,LEFT(65)+28: POSITION 66,1 PICTURE 80: HIDE 80: pi% = 80
FORM 90: HIDE 90: BORDER_HIDE 90: TOP 90,TOP(50)+TOP(70)+50: LEFT 90,LEFT(50)+LEFT(70)+10 WIDTH 90,160: HEIGHT 90,300 LIST 91: PARENT 91,90: FULL_SPACE 91 : FONT_NAMES_LOAD 91: ON_CLICK 91,Poltail1 COLOR 91,255,255,148 FOR i% = COUNT(91) TO 1 STEP -1 IF LEFT$(ITEM_READ$(91,i%),1) = "@" THEN ITEM_DELETE 91,i% NEXT i%
GOSUB Tx51 GOSUB Desfond ' ============================================================================== END ' ============================================================================== Tx51: ITEM_ADD 60," MÉMO BALISES ": ITEM_ADD 60,"" ITEM_ADD 60,"Police, taille:": ITEM_ADD 60,"<F=...> nom": ITEM_ADD 60,"<S=xx> taille" ITEM_ADD 60,"": ITEM_ADD 60,"Enrichissements:": ITEM_ADD 60,"<B>...</B> Gras" ITEM_ADD 60,"<I>.....</I> Italique": ITEM_ADD 60,"<U>...</U> Souligné" ITEM_ADD 60,"": ITEM_ADD 60,"Couleur:": ITEM_ADD 60,"<C=xxx>": ITEM_ADD 60," (valeur RGB)" ITEM_ADD 60," ou": ITEM_ADD 60,"<C=hRRGGBB>": ITEM_ADD 60," (valeur Hexa)" RETURN ' ============================================================================== Desfond: wm% = POSITION(2): hm% = POSITION(3): ' dimensions d'une carte, en mm wc% = wm%*r: hc% = hm%*r: ' dimernsions en pixels à l'écran IF CHECKED(11) = 1: ' Portrait wa% = 210: ha% = 297: ' page A4 en mm WIDTH 0,808: HEIGHT 0,1172: WIDTH p%,778: HEIGHT p%,1100 ELSE wa%= 297: ha% = 210 WIDTH 0,1130: HEIGHT 0,850: WIDTH p%,1100: HEIGHT p%,778 END_IF ' marges périphériques non imprimables de 3 mm nc% = INT((wa%-6)/wm%): nr% = INT((ha%-6)/hm%): ' colonnes, rangées mg% = r*(wa%-nc%*wm%)/2: mh% = r*(ha%-nr%*hm%)/2: ' marges H/B, G/D, en pixels 2D_TARGET_IS p%: CLS: 2D_PEN_DOT: 2D_PEN_COLOR 128,128,128: ' 2D_FILL_OFF FOR j% = 0 TO nr%-1 y% = mh%+j%*hc% FOR i% = 0 TO nc%-1 x% = mg%+i%*wc% 2D_IMAGE_PASTE 21,x%+1,y%+1 2D_RECTANGLE x%,y%,x%+wc%+1,y%+hc%+1 NEXT i% NEXT j% 2D_IMAGE_COPY 22,mg%+1,mh%+1,wc%,hc%: ' image vide, pour raz ultérieur RETURN ' ============================================================================== Tx: SHOW 50: TO_FOREGROUND 50 RETURN ' ============================================================================== Insere: ' raz la zone 2D_FILL_ON: 2D_RECTANGLE mg%,mh%,mg%+wc%+1,mh%+hc%+1: ' raz de la case 1 IF img = 1 THEN 2D_IMAGE_PASTE 22,mg%+1,mh%+1: ' image de fond IF COUNT(55) = 0 THEN RETURN a$ = "" IF COUNT(55) > 1 FOR i% = 1 TO COUNT(55)-1 a$ = a$+ITEM_READ$(55,i%)+rc$ NEXT i% END_IF txi$ = a$+ITEM_READ$(55,COUNT(55)) xa% = mg%+2: ya% = mh%+2 TextFormat(p%,txi$,xa%,ya%,"Arial",12) RETURN ' ============================================================================== Deplace: i% = NUMBER_CLICK: j% = POSITION(66) SELECT i% CASE 62: xa% = xa%-j% CASE 63: xa% = xa%+j% CASE 64: ya% = ya%-j% CASE 65: ya% = ya%+j% END_SELECT 2D_FILL_ON: 2D_RECTANGLE mg%,mh%,mg%+wc%+1,mh%+hc%+1: ' raz de la case 1 IF img = 1 THEN 2D_IMAGE_PASTE 22,mg%+1,mh%+1: ' image de fond TextFormat(p%,txi$,xa%,ya%,"Arial",12) display RETURN ' ============================================================================== Recopie: x% = mg%: y% = mh% 2D_IMAGE_COPY 21,x%+1,y%+1,x%+wc%,y%+hc%: ' case n° 1 2D_FILL_OFF FOR j% = 0 TO nr%-1 y% = mh%+j%*hc% FOR i% = 0 TO nc%-1 x% = mg%+i%*wc% 2D_IMAGE_PASTE 21,x%+1,y%+1 2D_RECTANGLE x%,y%,x%+wc%+1,y%+hc%+1 NEXT i% NEXT j% TO_FOREGROUND 50 RETURN ' ============================================================================== Imgf: a$ = FILE_NAME$(68): IF a$ = "" OR a$ = "_" THEN RETURN TEXT 53,a$ RedimImg(a$,wc%,hc%,fimp$) FILE_LOAD 22,fimp$ 2D_IMAGE_PASTE 22,mg%+1,mh%+1 ' FILE_DELETE fimp$ img = 1 RETURN ' ============================================================================== Pclair: i% = POSITION(58): IF i%<1 OR i%>127 THEN RETURN WIDTH pi%,wc%: HEIGHT pi%,hc%: FILE_LOAD pi%,fimp$ GAMMA pi%,i% 2D_TARGET_IS pi%: 2D_IMAGE_COPY 22,0,0,wc%,hc% 2D_TARGET_IS p%: 2D_IMAGE_PASTE 22,mg%+1,mh%+1 RETURN ' ============================================================================== Enrich: ' Enrichissemenets IF COUNT(55) = 0 THEN RETURN i% = NUMBER_CLICK li% = 0 SELECT i% CASE 70: GOSUB Poltail: ' Police CASE 71: ' Taille CASE 72: c$ = "B": GOSUB GIS: ' Gras CASE 73: c$ = "I": GOSUB GIS: ' Italique CASE 74: c$ = "U": GOSUB GIS: ' Souligné CASE 75: ' CASE 76: ' Couleur CASE 77: GOSUB Coulr: ' OK couleur END_SELECT RETURN ' ============================================================================== GIS: GOSUB Poscurs: IF li% = 0 THEN RETURN: ' pas de clic dans le memo ITEM_DELETE mm%,li%: ' ligne du clic ou sélection IF b$ <> "": ' sélection a$ = LEFT$(a$,po%-1)+"<"+c$+">"+b$+"</"+c$+">"+RIGHT_POS$(a$,po%+1) ELSE: ' simple clic a$ = LEFT$(a$,po%-1)+"<"+c$+">"+RIGHT_POS$(a$,po%+1) END_IF ITEM_INSERT mm%,li%,a$ RETURN ' ============================================================================== Poltail: SHOW 90 RETURN ' ============================================================================== Poltail1: c$ = ITEM_INDEX$(91): TEXT 70,c$ HIDE 90 GOSUB Poscurs: IF li% = 0 THEN RETURN: ' pas de clic dans le memo ITEM_DELETE mm%,li%: ' ligne du clic ou sélection b$ = STR$(POSITION(71)) a$ = LEFT$(a$,po%-1)+"<F="+c$+"><S="+b$+">"+RIGHT_POS$(a$,po%+1) ITEM_INSERT mm%,li%,a$ RETURN ' ============================================================================== Coulr: GOSUB Poscurs: IF li% = 0 THEN RETURN: ' pas de clic dans le memo c$ = TEXT$(76) ITEM_DELETE mm%,li%: ' ligne du clic ou sélection b$ = STR$(POSITION(71)) a$ = LEFT$(a$,po%-1)+"<C="+c$+">"+RIGHT_POS$(a$,po%+1) ITEM_INSERT mm%,li%,a$ RETURN ' ============================================================================== Poscurs: ' Calcul de la position du curseur (ligne et indice) dans le Memo (emplacement cliqué) ' ligcur% = ligne du clic, poscur% = emplacement dans la ligne, b$ = séq. sélectionnée b$ = SELECT_READ$(mm%) CLIPBOARD_STRING_COPY CHR$(255): CLIPBOARD_PASTE mm%: ' emplacement du clic ou select FOR i% = 1 TO COUNT(mm%) a$ = ITEM_READ$(mm%,i%): k% = INSTR(a$,CHR$(255)) IF k% > 0 THEN li% = i%: po% = k%: EXIT_FOR NEXT i% RETURN ' ============================================================================== Imprime: i% = MESSAGE_CONFIRMATION_YES_NO("Imprimante prête ?") IF i% <> 1 THEN RETURN FILE_SAVE p%,fimp$: ' sauvegarde pour impression i% = 0: IF CHECKED(12) = 1 THEN i% = 1 Pr_init(i%,""): ' si i%=1 : orientation paysage Pr_Image(fimp$,0,0,Pr_lt%,Pr_ht%,0) Pr_Impr() FILE_DELETE fimp$ RETURN ' ============================================================================== SUB TextFormat(p%,txt$,x%,y%,fnt$,sz%) ' Affichage du texte txt$ sur le picture p% en x%,y%, ' Police et taille de départ fnt$ et sz% (fnt$="" et sz%=0: fonte et taille actuels) ' avec enrichissements dans le corps du texte: ' <F=...> police, <S=...> taille, ' <C=hRRGGBB...> couleur RGB sous forme hexa, ou <C=xxx...> sous forme numérique ' <B>...</B> gras, <I>...</I> italique, <U>...</U> souligné ' Les dimensions résultantes du texte en pixels sont rendues dans le clipboard ' sous la forme d'une chaîne Ascii: "www,hhh" DIM_LOCAL me%,i%,j%,k%,k1%,a$,s$,a1$,c$,r%,g%,b%,hl%,xi%,yi%,w% me% = 800: MEMO me%: HIDE me%: WIDTH me%,1000: ITEM_ADD me%,txt$ PRINT_TARGET_IS p%: 2D_TARGET_IS p%: 2D_FILL_OFF IF fnt$<>"" THEN FONT_NAME p%,fnt$ IF sz% <> 0 THEN FONT_SIZE p%,sz% xi% = x%: yi% = y%: w% = 0 FOR i% = 1 TO COUNT(me%) a$ = ITEM_READ$(me%,i%) k1% = 0: k% = INSTR(a$,"<"): IF k% > 0 THEN k1% = INSTR_POS(a$,">",k%+1) WHILE k1%>0 PRINT_LOCATE x%,y%: a1$= LEFT$(a$,k%-1): PRINT a1$ x% = x%+TEXT_WIDTH(a1$,p%) s$ = MID$(a$,k%+1,k1%-k%-1): a$ = RIGHT_POS$(a$,k1%+1) IF MID$(s$,2,1) = "=" IF LEFT$(s$,2)="F=": ' Fonte FONT_NAME p%,RIGHT_POS$(s$,3) END_IF IF LEFT$(s$,2)="S=": ' Taille FONT_SIZE p%,VAL(RIGHT_POS$(s$,3)) END_IF IF LEFT$(s$,2) = "C=": ' Couleur IF UPPER$(MID$(s$,3,1)) = "H": ' couleur sous forme hexa RRGGBB r%=HEX(MID$(s$,4,2)): g%=HEX(MID$(s$,6,2)): b%=HEX(MID$(s$,8,2)) ELSE: ' couleur sous forme numérique R*65536+G*256+B j% = VAL(RIGHT_POS$(s$,3)) r%=INT(j%/65536): g%=BIN_AND(j%,65280)/256: b%=BIN_AND(j%,255) END_IF FONT_COLOR p%,r%,g%,b% END_IF ELSE IF s$ = "B" THEN FONT_BOLD p% IF s$ = "/B" THEN FONT_BOLD_OFF p% IF s$ = "I" THEN FONT_ITALIC p% IF s$ = "/I" THEN FONT_ITALIC_OFF p% IF s$ = "U" THEN FONT_UNDERLINE p% IF s$ = "/U" THEN FONT_UNDERLINE_OFF p% END_IF k1%=0: k% = INSTR(a$,"<"): IF k% > 0 THEN k1% = INSTR_POS(a$,">",k%+1) END_WHILE IF a$ = "" THEN a$ = " ": ' ligne vide PRINT_LOCATE x%,y%: PRINT a$: j%=x%+TEXT_WIDTH(a$,p%): IF j%>w% THEN w%=j% hl% = TEXT_HEIGHT(a$,p%) x% = xi%: y% = y%+hl% NEXT i% CLIPBOARD_STRING_COPY STR$(w%)+","+STR$(y%-yi%): ' dimensions du texte DELETE me% END_SUB ' ============================================================================== SUB Pr_init(orient%,prn$) ' Initialisation imprimante ('début d'impression') ' orient% = 0 Portrait, = 1 Paysage ' prn$ = "": imprimante par défaut ' sinon nom de l'imprimante (pour essais) ' par exemple "Microsoft XPS Document Writer" impression virtuelle ' dans un fichier .XPS ' Dans les paramètres des fonctions, le positionnement initial doit être fait en ' valeurs absolues: distances par rapport aux bords gauche et haut de la feuille ' A4, sans tenir compte des marges non imprimables. ' Les couleurs sont à exprimer au format BGR (en non pas RGB): B*256*256+G*256+R DLL_ON "C:\PANORAMIC\KGF\KGF.dll": ' <<<<<<<<<<<<< A AJUSTER ! ================= IF VARIABLE("phnd%") = 0 THEN DIM phnd% IF VARIABLE("chnd%") = 0 THEN DIM chnd% IF VARIABLE("inip%") = 0 THEN DIM inip% IF VARIABLE("Pr_res%") = 0 THEN DIM Pr_res% IF VARIABLE("Pr_px%") = 0 THEN DIM Pr_px%: ' pixels par mm (600 dpi) IF VARIABLE("Pr_lt%") = 0 THEN DIM Pr_lt%: ' largeur totale IF VARIABLE("Pr_ht%") = 0 THEN DIM Pr_ht%: ' hauteur totale IF VARIABLE("Pr_mg%") = 0 THEN DIM Pr_mg%: ' marge gauche IF VARIABLE("Pr_mh%") = 0 THEN DIM Pr_mh%: ' marge haut IF VARIABLE("Pr_lu%") = 0 THEN DIM Pr_lu%: ' largeur utile IF VARIABLE("Pr_hu%") = 0 THEN DIM Pr_hu%: ' hauteur utile IF prn$ <> "": ' pour essais sans impression réelle Pr_res%=DLL_CALL4("PrinterManager",10,ADR(phnd%),ADR(chnd%),ADR(prn$)) END_IF ' Orientation portrait (0) ou paysage (1) Pr_res% = DLL_CALL4("PrinterManager",4,ADR(phnd%),ADR(chnd%),orient%): ' orientation Pr_res% = DLL_CALL4("PrinterManager",1,ADR(phnd%),ADR(chnd%),0): ' init ' Dimensions sans les marges, en pixels: ' ========== ' ATTENTION: Les dimensions sont actualisées en fonction de l'option orientation ! ' ========== Pr_lt% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),3,0,0): ' largeur totale Pr_ht% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),4,0,0): ' hauteur totale IF orient% = 0 Pr_px% = Pr_ht%/297: ' pixels par mm, à l'impression en 600 dpi ELSE Pr_px% = Pr_lt%/297: ' idem (paysage) END_IF ' Marges non imprimables: décalage en pixels à soustraire gauche et haut: Pr_mg% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),1,0,0): ' marge gauche Pr_mh% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),2,0,0): ' marge haut ' Dimensions utiles, en pixels: IF Pr_mg% = 0 OR Pr_mh%= 0: ' cas imprimante virtuelle (PDFCreator) Pr_mg% = 75: Pr_mh% = 75: ' forçage comme imprimante réelle Pr_lu% = Pr_lt% - 2*Pr_mg%: Pr_hu% = Pr_ht% - 2*Pr_mh% ELSE Pr_lu% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),7,0,0): ' largeur utile Pr_hu% = DLL_CALL6("PrinterFunction",8,ADR(phnd%),ADR(chnd%),8,0,0): ' hauteur utile END_IF ' Couleur trait noir, épaisseur = 1, arrière-plan transparent: inip% = -2 Pr_res% = DLL_CALL6("PrinterFunction",6,ADR(phnd%),ADR(chnd%),0,inip%,1) inip% = 1 END_SUB ' ============================================================================== SUB Pr_Image(f$,x%,y%,w%,h%,u%) ' Impression de l'image f$ en x%,y%, dimensions w% x h% (sera redimensionnée pour ' tenir dans le cadre donné). ' u% = 0: unités pixels, u% = 1, unités millimètres ' ******** NB: coordonnées d'impression absolues (pixels): de 0,0 à 4962,7013 ******** ' ATTENTION : ' ========= ' les coordonnées prises en compte ont pour origine le début de la zone imprimable. ' Il faut donc soustraire les marges pour partir de l'angle supérieur gauche de la feuille. IF inip% = 0 THEN EXIT_SUB: ' imprimante non initialisée (Sub Pr_Init) IF u% = 1: ' unités en mm, conversion en pixels x% = x%*Pr_mmpix: y% = y%*Pr_mmpix: w% = w%*Pr_mmpix: h% = h%*Pr_mmpix END_IF x% = x%-Pr_mg%: y% = y%-Pr_mh%: ' sinon, marges ajoutées d'office Pr_res% = DLL_call6("PrinterFunction",4,ADR(phnd%),ADR(chnd%),0,x%,y%): ' positionnement Pr_res% = DLL_call6("PrinterFunction",7,ADR(phnd%),ADR(chnd%),ADR(f$),w%,h%) END_SUB ' ============================================================================== SUB Pr_Impr() ' Lancement de l'impression réelle ('fin d'impression') IF inip% = 0 THEN EXIT_SUB: ' imprimante non initialisée (Sub Pr_Init) Pr_res% = DLL_CALL4("PrinterManager",3,ADR(phnd%),ADR(chnd%),0) inip% = 0 DLL_OFF END_SUB ' ============================================================================== SUB RedimImg(f$,w%,h%,fr$) ' Redimensionner l'image f$ (BMP ou JPG) en w%,h%, résultat dans fr$ (BMP) ' Si w% = 0 ou h% = 0: redimensionnement proportionnel DIM_LOCAL fm$,wi%,hi%,cx,cy,op% fm$ = "C:\TEMP\Provimg.bmp" op% = 1000: ' objet provisoire IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ".JPG" PICTURE op%: FILE_LOAD op%,f$: FILE_SAVE op%,fm$: DELETE op%: f$ = fm$ END_IF FILEBIN_OPEN_READ 1,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 IF h% = 0 THEN h% = w%*hi%/wi% IF w% = 0 THEN w% = h%*wi%/hi% cx = w%/wi%: cy = h%/hi% SCENE2D op%: HIDE op%: WIDTH op%,w%: HEIGHT op%,h% SPRITE op%: SPRITE_FILE_LOAD op%,f$: SPRITE_SCALE op%,cx,cy SNAPSHOT op%,fr$ DELETE op%: IF FILE_EXISTS(fm$) = 1 THEN FILE_DELETE fm$ END_SUB ' ============================================================================== 27/12: - ajout de la possibilité d'éclaircir à volonté l'image de fond - ajout de la possibilité de positionner avec précision le texte inséré. 28/12: suite à une remarque judicieuse de Marc, ajout d'un test si le texte ne fait qu'une seule ligne. 20h45 nouvelle version avec insertion des balises au clic ou sélection souris: - sélectionner une zone, puis clic les boutons G, I, S pour encadrement de la zone avec les balises correspondantes - ou cliquer un emplacement et choisir la police/taille ou la couleur pour ce qui suit (balise unique) 29/12 0h15 J'ai ajouté le choix de l'orientation portrait ou paysage (portrait me semble plus pratique pour des planches d'étiquettes). 29/12 petit bug signalé par Marc, corrigé.
Dernière édition par JL35 le Ven 29 Déc 2017 - 12:55, édité 9 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 0:53 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 12:55 | |
| Merci Klaus, mais j'ai déjà des idées d'amélioration...
- on peut éclaircir l'image de fond, pour mieux faire ressortir le texte. - après insertion du texte, on peut le positionner avec précision dans les 4 directions. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| | | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 20:35 | |
| Salut jj, t'as raison, en plus chacun peut modifier la recette et l'accommoder à son goût, comme un chef ! Allez, bonnes fêtes à toi ! et à tout le monde, au diable l'avarice ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 22:48 | |
| Salut tout le monde ! C'est sympa ce petit éditeur de carte de visite. Cela dit je trouve dommage de devoir taper les balises avec toutes leurs syntaxes. Pourquoi n'as tu pas pensé au clic droit sur le MEMO avec un menu contenant toutes les balises, Et lorsque tu cliques sur menu avec la balise elle s'ajoute automatiquement au MEMO à l'emplacement sélectionné ? Je sais JL35 cela va compliquer ton code... Mais tant qu'a faire et avec la DLL de Klaus à disposition autant en profiter non ?! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 23:15 | |
| Ben... j'avoue que j'ai fait au plus simple... pour le codage, pas pour l'utilisation ! Mais maintenant que tu le dis... va falloir que j'y réfléchisse Et que j'étudie cette histoire de clic droit sur memo de l'ami Klaus, que j'ai ignoré jusqu'ici (pas lui, le clic !) | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 23:34 | |
| Quand je pensais au clic droit c'était plutôt par la fonction MAIN_MENU_POPConcernant la DLL de klaus, c'était plus pour la simulation du copier-coller avec la récupération de la position de la souris sur le MEMO... mais j'avoue ne pas m'être trop penché sur la question ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Mer 27 Déc 2017 - 23:54 | |
| Voila un petit exemple où tu n'as même pas besoin de la DLL : - Code:
-
DIM no% , p% , memo% , menu% LABEL clic
no%=no%+1 MEMO no% : LEFT no%,10 : TOP no%,10 : WIDTH no%,WIDTH_CLIENT(0)-20 : HEIGHT no%,HEIGHT_CLIENT(0)-20 : memo%=no% : no%=no%+1 ITEM_ADD memo%,"Voici un texte pour illustrer l'exemple qui va suivre..." ITEM_ADD memo%,"cliquez sur cette portion avec le clic de gauche" ITEM_ADD memo%,"Puis avec le clic de droite selectionnez le menu" MAIN_MENU_POP no% : p%=no% : no%=no%+1 SUB_MENU no% : PARENT no%,p% : CAPTION no%,"minibug" : ON_CLICK no%,clic : menu%=no% : no%=no%+1
END
clic: IF menu%=NUMBER_CLICK THEN CLIPBOARD_STRING_COPY " minibug " : CLIPBOARD_PASTE memo% RETURN | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 0:22 | |
| Merci Minibug, mais je regarderai tout ça demain, ah non demain j'ai du monde, demain soir ?
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 0:47 | |
| J'ai trouvé encore mieux sans clic gauche préalable. Il suffit d'un clic droit et sélection du menu Par contre l'usage de la dll de Klaus est nécessaire dans ce cas. - Code:
-
DIM no% , p% , memo% , menu% , res% , x% , y% LABEL clic , mouv
DLL_ON "KGF.dll"
no%=no%+1 MEMO no% : LEFT no%,10 : TOP no%,10 : WIDTH no%,WIDTH_CLIENT(0)-20 : HEIGHT no%,HEIGHT_CLIENT(0)-20 ON_MOUSE_MOVE no%,mouv : memo%=no% : no%=no%+1 ITEM_ADD memo%,"Voici un texte pour illustrer l'exemple qui va suivre..." ITEM_ADD memo%,"clic de droite sur ce texte puis selectionnez le menu" MAIN_MENU_POP no% : p%=no% : no%=no%+1 SUB_MENU no% : PARENT no%,p% : CAPTION no%,"minibug" : ON_CLICK no%,clic : menu%=no% : no%=no%+1 END
clic: IF menu%=NUMBER_CLICK res% = dll_call2("AbsoluteMouseLeftClick",x%,y%) : PAUSE 200 CLIPBOARD_STRING_COPY " minibug " : CLIPBOARD_PASTE memo% END_IF RETURN
mouv: res% = dll_call2("GetAbsoluteMousePosition",adr(x%),adr(y%)) RETURN | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 4:25 | |
| Salut à tous ! Bravo ! Très sympa comme programme ! J'ai remarqué que si l'on utilisait que la première ligne pour faire des étiquettes par exemple, cette première ligne se met en écho sur la deuxième ligne. - Spoiler:
Merci pour le partage et bonne continuation ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 17:38 | |
| Bonjour Marc, et bien vu ! c'est évidemment un bug, il manque un test pour ce cas que je n'avais pas prévu... je le rajoute. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 19:27 | |
| Salut JL35 ! Au secours... Ça plante en ligne 331 après le chargement d'une image ! Alors que la version précédente hier fonctionnait très bien... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 20:57 | |
| @Minibug, j'ai essayé avec la version dont tu parles, et je n'arrive pas à planter à l'insertion d'une image ...?
Je viens de mettre une nouvelle version, avec insertion automatique des balises. - pour les balises Gras, Italique, Souligné, sélectionner à la souris la zone concernée dans le memo, puis cliquer le bouton désiré: G, I, S: les balises correspondantes encadreront la zone sélectionnée. - pour police, taille et couleur, balise unique à l'emplacement du clic (pas de zone, seulement l'emplacement). La balise sera valide jusqu'à insertion d'une balise contraire. Cliquer l'emplacement dans le memo, puis la police: choisir la police (clic): insertion des balises police et taille Pour la couleur, fixer d'abord la couleur (numérique ou hexa), puis clic 'OK' | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 21:13 | |
| je viens de reprendre ton code... Pour les balises c'est impeccable et bien plus pratique. Par contre j'ai toujours une erreur lors du chargement d'une image. Maintenant c'est la ligne 416 ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 21:33 | |
| C'est dans la sub de redimensionnement de l'image... je regarde de plus près.
Manifestement, c'est le nom du fichier résultat (fr$ = fimp$) qui ne lui plait pas. (sauvegarde du Sprite: SNAPSHOT op%,fr$) Défini en tête du programme, lignes 6 et 7. Est_ce que tu as bien un répertoire C:\TEMP\ ? ou sinon il faut adapter rpr$ à un nom de répertoire existant chez toi ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 21:43 | |
| Ok je viens de comprendre...
Tu as le même problème d'oscaribout a eu il y a quelques jours... Le forum a encore mangé les "\" dans le code que tu as posté ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 21:44 | |
| Salut à tous ! Je viens de faire quelques essais : pour l'instant, je n'ai pas eu de problème pour charger une image aussi bien JPG que BMP après avoir défini la taille des cartes de visite. Le mode Recopier fonctionne aussi. - Spoiler:
Par contre, si l'on charge une image avant d'avoir défini la taille des cartes, j'ai un message d'erreur ligne 415 : Bravo et bonne continuation ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 21:50 | |
| @Minibug Mince alors, pourtant je me suis déjà fait piéger pas mal de fois avec cet antislash sur le forum et je finis toujours par me faire avoir ! Bon, je mettrai un chr$(92)...
@Marc Ben oui, ce n'est pas logique parce que l'image est redimensionnée automatiquement aux dimensions de la carte... quoique, il y a des dimensions prédéfinies. Bon, je vais rajouter un test.
Et merci à tous les deux pour vos contributions !
22h Voilà les gars, les deux sont corrigés là-haut ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Cartes de visite Jeu 28 Déc 2017 - 21:59 | |
| Je viens de testé et c'est Ok pour moi ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Ven 29 Déc 2017 - 0:15 | |
| Ok, merci pour le retour. Je viens d'ajouter le choix de l'orientation portrait ou paysage, portrait peut être plus pratique dans certains cas (étiquettes). Et maintenant... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Cartes de visite Ven 29 Déc 2017 - 10:49 | |
| Bonjour à tous ! Idée : ajouter un test pour celui qui -comme moi - clique sur le champ Image de fond et change d'avis en cliquant sur Annuler dans l'OPEN_DIALOG. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Cartes de visite Ven 29 Déc 2017 - 12:58 | |
| Salut Marc, c'était pourtant prévu, mais je n'avais pas réalisé que dans ce cas l'Open_Dialog renvoie un caractère '_' et non pas une chaîne vide... Bon, c'est corrigé en haut.
| |
| | | Contenu sponsorisé
| Sujet: Re: Cartes de visite | |
| |
| | | | Cartes de visite | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |