FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Calculatrice
par papydall Hier à 22:54

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Mer 19 Sep 2018 - 15:58

» Planétarium virtuel.
par Pedro Alvarez Mer 19 Sep 2018 - 9:28

» Demande pour Jack concernant PanExpress
par Marc Mar 18 Sep 2018 - 23:56

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Orbites de l’ensemble de Mandelbrot
par Jean Claude Lun 10 Sep 2018 - 21:08

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Cartes de visite

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Cartes de visite   Mer 27 Déc 2017 - 0:53

Très joli !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

Nombre de messages : 1761
Date d'inscription : 13/09/2009

MessageSujet: +++   Mer 27 Déc 2017 - 17:32

Ouaahhh, à la fin, ça va être mieux qu'avec un traitement de texte du commerce !
C'est comme la cuisine, quand c'est fait maison, c'est meilleur !
Laughing alien pig
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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 ! flower
et à tout le monde, au diable l'avarice !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: 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. Wink

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 ?! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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 scratch (pas lui, le clic !)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: 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_POP

Concernant 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 ! drunken
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: 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. Wink

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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Cartes de visite   Jeu 28 Déc 2017 - 19:27

Salut JL35 !

Au secours... geek

Ça plante en ligne 331 après le chargement d'une image ! drunken
Alors que la version précédente hier fonctionnait très bien...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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'
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: 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 ! Suspect cherry confused affraid
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: 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é !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3021
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Cartes de visite   Jeu 28 Déc 2017 - 21:59

Je viens de testé et c'est Ok pour moi ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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... Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Cartes de visite   Ven 29 Déc 2017 - 10:49

Bonjour à tous !

Idée : ajouter un test pour celui qui -comme moi Embarassed - clique sur le champ Image de fond et change d'avis en cliquant sur Annuler dans l'OPEN_DIALOG.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: 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.


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Cartes de visite   

Revenir en haut Aller en bas
 
Cartes de visite
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Le Père Noël rend visite à l'Annuaire...
» Des "templates" pour vos emails ou newsletters
» Visite chez Capitole
» Garmin Edge 605 - conseils pour cartes...
» Nouveau GPS et question déverrouillage cartes

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: