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
» Pourquoi le compilateur stagne
par papydall Hier à 23:23

» Immortaliser les photos de famille
par jjn4 Hier à 18:29

» Concours de Morpions
par jjn4 Hier à 18:11

» Compilateur FBPano
par jean_debord Hier à 10:12

» Tout est tranquille
par Jean Claude Ven 22 Sep 2017 - 21:41

» Texte en gif animé
par JL35 Ven 22 Sep 2017 - 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Encore du dessin

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



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

MessageSujet: Encore du dessin   Lun 2 Jan 2017 - 17:32

Après quelques déboires en essayant de mettre les nouvelles fonctions souris de Jack dans une sub, finalement j'en ai fait un programme à part entière.
Le but est de dessiner dans un picture (ici au format A4, ou inférieur, suivant le moniteur), pour faire par exemple des cartes de voeux, des menus, etc.

J'ai utilisé les dernières fonctions de Panoramic pour gérer la souris, rudement pratiques dans ce genre d'application pour éviter le recours à des Timers qui causent bien des problèmes de synchronisme.
Merci Jack pour ce cadeau de fin d'année !

Le programme est entièrement Panoramic et ne fait appel à aucune ressource externe, le seul paramètre à vérifier est fm$, ligne 7, chemin d'un fichier temporaire (C:\TEMP\...).
Je n'ai pas mis de fonction d'impression, mais ça peut se faire facilement facilement ailleurs avec le fichier-image résultat sauvegardé. (et on peut le rajouter soi-même si on veut en faisant appel à KGF.dll, mais ça alourdit pas mal, c'est pour ça que je ne l'ai pas mis).

Il y a un bouton d'aide succincte ('?' en haut à gauche).
Code:
' Dessin sur A4
LABEL Chfig,Posit,Clic,Clim,Fclic,Desfi,Desfi1,cas3,cas5,Chcol,Deplace,Rszt,Chpol
LABEL Valpo,Valtx,Chimg,Red1,Red2,Redima,Annul,Grille,Grill1,Reini,Lirsav,Aide,Quit
DIM lb%,wp%,hp%,i%,j%,x1%,y1%,x2%,y2%,x%,y%,p%,fig%,sp%,sq%,pic%,pi%,co%,tr%,tg%,tb%
DIM bd%,ps%,reg%,tg,an,rx%,ry%,fm$,sfig%,gr%,wb%,wh%,tab$,wt%,ht%,pb%,pp%,wi%,hi%
DIM ft%,wf%,edt%,szt%,mmt%,lst%,pit%,fi%,od%,sd%,im%,a$,b$,rt%,gt%,bt%,fg%,bts%
DIM sp1%,sp2%,pg%
fm$ = "C:\TEMP\Provy.bmp"
lb% = 90: ' largeur de la boîte à outils à gauche
hp% = 1100: IF SCREEN_Y < 1162 THEN hp% = SCREEN_Y-62
wp% = hp%*210/297: ' picture proportions A4
    BORDER_SMALL 0
    wb% = WIDTH(0)-WIDTH_CLIENT(0): wh% = HEIGHT(0)-HEIGHT_CLIENT(0): ' bordures
    WIDTH 0,lb%+wp%+wb%: HEIGHT 0,hp%+wh%: COLOR 0,180,255,255
    FONT_NAME 0,"Arial": FONT_BOLD 0
tab$ = "Page: "+STR$(wp%)+" x "+STR$(hp%)+STRING$(10," "): CAPTION 0,tab$
p% = 1 : PICTURE p%: LEFT p%,lb%: WIDTH p%,wp%: HEIGHT p%,hp%: 2D_TARGET_IS p%
i%=p%+1: PROGRESS_BAR i%: TOP i%,HEIGHT(p%)-18: LEFT i%,LEFT(p%): WIDTH i%,WIDTH(p%)
        HIDE i%: pb%=i%
i%=i%+1: BUTTON i%: WIDTH i%,25: HEIGHT i%,15: LEFT i%,1: CAPTION i%,"?": ON_CLICK i%,Aide

i%=i%+1: BUTTON i%: TOP i%,20: LEFT i%,5: CAPTION i%,"Ouvrir": bts%=i%
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+30: LEFT i%,LEFT(i%-1): CAPTION i%,"Enregistrer"
        ON_CLICK bts%,Lirsav: ON_CLICK i%,Lirsav
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+30: LEFT i%,LEFT(i%-1): CAPTION i%,"Quitter": ON_CLICK i%,Quit

i%=i%+1: ALPHA i%: TOP i%,TOP(i%-1)+40: CAPTION i%,"Ep. Trait:"
i%=i%+1: SPIN i%: TOP i%,TOP(i%-1)-4: LEFT i%,50: WIDTH i%,35: sp% = i%
        MIN i%,1: MAX i%,20: POSITION i%,1
i%=i%+1: ALPHA i%: TOP i%,TOP(i%-2)+25: CAPTION i%,"Couleur:"
i%=i%+1: PICTURE i%: TOP i%,TOP(i%-1)-3: LEFT i%,50: WIDTH i%,35: HEIGHT i%,21: COLOR i%,0,0,0
        pic% = i%

i%=i%+1: PICTURE i%: TOP i%,TOP(i%-1)+25: LEFT i%,5: WIDTH i%,lb%-10: HEIGHT i%,160: pi%=i%
        j%=WIDTH(i%)/2: 2D_TARGET_IS i%: ON_CLICK pi%,Chcol: ' palette de 16 couleurs
        2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 0,0,j%,20
        2D_FILL_COLOR 128,128,128: 2D_RECTANGLE j%,0,2*j%,20
        2D_FILL_COLOR 192,192,192: 2D_RECTANGLE 0,20,j%,40
        2D_FILL_COLOR 255,255,255: 2D_RECTANGLE j%,20,2*j%,40
       
        2D_FILL_COLOR 128,0,0: 2D_RECTANGLE 0,40,j%,60
        2D_FILL_COLOR 255,0,0: 2D_RECTANGLE j%,40,2*j%,60
        2D_FILL_COLOR 0,128,128: 2D_RECTANGLE 0,60,j%,80
        2D_FILL_COLOR 0,255,255: 2D_RECTANGLE j%,60,2*j%,80
       
        2D_FILL_COLOR 0,128,0: 2D_RECTANGLE 0,80,j%,100
        2D_FILL_COLOR 0,255,0: 2D_RECTANGLE j%,80,2*j%,100
        2D_FILL_COLOR 128,0,128: 2D_RECTANGLE 0,100,j%,120
        2D_FILL_COLOR 255,0,255: 2D_RECTANGLE j%,100,2*j%,120

        2D_FILL_COLOR 0,0,128: 2D_RECTANGLE 0,120,j%,140
        2D_FILL_COLOR 0,0,255: 2D_RECTANGLE j%,120,2*j%,140
        2D_FILL_COLOR 128,64,0: 2D_RECTANGLE 0,140,j%,160
        2D_FILL_COLOR 255,255,0: 2D_RECTANGLE j%,140,2*j%,160
       
i%=i%+1: CONTAINER_OPTION i%: TOP i%,TOP(i%-1)+170: WIDTH i%,lb%-3: HEIGHT i%,210: co%=i%
        CAPTION i%,"---- Figure : ---": COLOR i%,255,255,180
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,18: LEFT i%,5: CAPTION i%,"Libre"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Trait"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Rectangle"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,15: CAPTION i%,"Id. plein"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Ellipse"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,15: CAPTION i%,"Id. pleine"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Remplir"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Texte"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Image"
i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,TOP(i%-1)+18: LEFT i%,5: CAPTION i%,"Grille"
        MARK_ON co%+2: fig% = 2: ' trait
        FOR j% = co%+1 TO co%+10: ON_CLICK j%,Chfig: NEXT j%
       
i%=i%+1: ALPHA i%: TOP i%,TOP(co%)+HEIGHT(co%)+10: CAPTION i%,"Dépl:              pix"
i%=i%+1: SPIN i%: TOP i%,TOP(i%-1)-3: LEFT i%,28: WIDTH i%,40: POSITION i%,5: sq% = i%
        j% = lb%/4-2
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+25: LEFT i%,2: WIDTH i%,j%: CAPTION i%,CHR$(231): bd%=i%
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+j%+1: WIDTH i%,j%: CAPTION i%,CHR$(232)
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+j%+1: WIDTH i%,j%: CAPTION i%,CHR$(233)
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+j%+1: WIDTH i%,j%: CAPTION i%,CHR$(234)
        FOR j%=bd% TO bd%+3: FONT_NAME j%,"Wingdings": ON_CLICK j%,Deplace: NEXT j%
i%=i%+1: BUTTON i%: TOP i%,TOP(i%-1)+35: LEFT i%,0: WIDTH i%,lb%
        CAPTION i%,"Annul dernier": ON_CLICK i%,Annul
'                          === FORM Textes ===
ft%=i%+1: wf%=240: FORM ft%: HIDE ft%: BORDER_SMALL ft%: TOP ft%,TOP(bd%)+50
        LEFT ft%,0: WIDTH ft%,wf%: HEIGHT ft%,300: CAPTION ft%," -  TEXTE  -"
        COLOR ft%,164,255,255: FONT_BOLD ft%: ON_RESIZE ft%,Rszt: ON_CLOSE ft%,Reini
i%=ft%+1: ALPHA i%: PARENT i%,ft%: TOP i%,4: LEFT i%,5: CAPTION i%,"Police:"
i%=i%+1: EDIT i%: PARENT i%,ft%: TOP i%,1: LEFT i%,40: WIDTH i%,130: edt% = i%
        TEXT i%,"Arial": ON_CLICK i%,Chpol
i%=i%+1: SPIN i%: PARENT i%,ft%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+WIDTH(i%-1)+5: szt%=i%
        WIDTH i%,45: MIN i%,6: MAX i%,255: POSITION i%,12: ON_CHANGE i%,Valpo
i%=i%+1: CHECK i%: PARENT i%,ft%: TOP i%,25: LEFT i%,40: CAPTION i%,"Gras"
i%=i%+1: CHECK i%: PARENT i%,ft%: TOP i%,25: LEFT i%,85: CAPTION i%,"Italique"
i%=i%+1: CHECK i%: PARENT i%,ft%: TOP i%,25: WIDTH i%,65: LEFT i%,152: CAPTION i%,"Souligné"
        FOR j% = szt%+1 TO i%: ON_CLICK j%,Valpo: NEXT j%
i%=i%+1: MEMO i%: PARENT i%,ft%: TOP i%,47: LEFT i%,0: WIDTH i%,wf%-wb%: mmt%=i%
        HEIGHT i%,HEIGHT(ft%)-100: FONT_NAME i%,TEXT$(edt%): FONT_SIZE i%,POSITION(szt%)
i%=i%+1: LIST i%: PARENT i%,ft%: HIDE i%: TOP i%,TOP(mmt%): WIDTH i%,200: ' liste polices
        HEIGHT i%,HEIGHT(mmt%): FONT_NAMES_LOAD i%: ON_CLICK i%,Valpo: lst%=i%
        COLOR lst%,255,255,180
        FOR j% = COUNT(lst%) TO 1 STEP -1: ' suppression des polices '@...' inutiles
            IF LEFT$(ITEM_READ$(lst%,j%),1) = "@" THEN ITEM_DELETE lst%,j%
        NEXT j%
i%=i%+1: PICTURE i%: PARENT i%,ft%: HIDE i%: pit%=i%
'                          === FORM Images  ===
fi%=i%+1: FORM fi%: HIDE fi%: BORDER_SMALL fi%: TOP fi%,TOP(ft%)
        LEFT fi%,0: WIDTH fi%,340: HEIGHT fi%,260: FONT_BOLD fi%
        CAPTION fi%," -  IMAGE  -": COLOR fi%,164,255,255: ON_CLOSE fi%,Reini
i%=fi%+1: ALPHA i%: PARENT i%,fi%: TOP i%,3: LEFT i%,2: CAPTION i%,"Image:"
i%=i%+1: EDIT i%: PARENT i%,fi%: TOP i%,1: LEFT i%,40: WIDTH i%,WIDTH(fi%)-60
        ON_CLICK i%,Chimg: ' fi%+2
        pp% = 200: ' dimensions aperçu image
i%=i%+1: PICTURE i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+25: WIDTH i%,pp%: HEIGHT i%,pp%
        STRETCH_ON i%: pg% = i%
i%=i%+1: ALPHA i%: PARENT i%,fi%: TOP i%,TOP(pg%)+10: LEFT i%,pp%+15: a$=CHR$(10)
        CAPTION i%,"Redimensionner:"+a$+"(proportionnel)"+a$+a$+"              X"
i%=i%+1: SPIN i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+36: LEFT i%,LEFT(i%-1)-8: WIDTH i%,52
        sp1% = i%: ON_CHANGE sp1%,Red1
i%=i%+1: SPIN i%: PARENT i%,fi%: TOP i%,TOP(i%-1): LEFT i%,LEFT(i%-1)+62: WIDTH i%,52
        sp2%=i%: ON_CHANGE sp2%,Red2
i%=i%+1: BUTTON i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+30: LEFT i%,pp%+30
        CAPTION i%,"Redim.": ON_CLICK i%,Redima
i%=i%+1: ALPHA i%: PARENT i%,fi%: TOP i%,TOP(i%-1)+80: LEFT i%,pp%+7
        CAPTION i%,"Clic dans le dessin"+CHR$(10)+"pour insérer l'image"
        COLOR i%,255,255,0

i%=i%+1: OPEN_DIALOG i%: od% = i%
i%=i%+1: SAVE_DIALOG i%: sd% = i%
i%=i%+1: IMAGE i%: im% = i%
'                            === FORM Grille  ===
fg%=i%+1: FORM fg%: HIDE fg%: BORDER_SMALL fg%: TOP fg%,TOP(ft%)
        LEFT fg%,0: WIDTH fg%,120: HEIGHT fg%,120: FONT_BOLD fg%: COLOR fg%,190,255,255
        ON_CLOSE fg%,Grill1
i%=fg%+1: ALPHA i%: PARENT i%,fg%: TOP i%,5: LEFT i%,1
        CAPTION i%,"Grille:                pix."
i%=i%+1: SPIN i%: PARENT i%,fg%: TOP i%,2: LEFT i%,35: WIDTH i%,48: POSITION i%,100
i%=i%+1: BUTTON i%: PARENT i%,fg%: TOP i%,TOP(i%-1)+28: LEFT i%,15: CAPTION i%,"OK"
        ON_CLICK i%,Grille
i%=i%+1: BUTTON i%: PARENT i%,fg%: TOP i%,TOP(i%-1)+28
        LEFT i%,LEFT(i%-1): CAPTION i%,"Supprimer"
        ON_CLICK i%,Grille

2D_TARGET_IS p%: 2D_FILL_OFF
ON_MOUSE_MOVE p%,Posit
ON_MOUSE_DOWN p%,Clic
' ==============================================================================
END: ' =========================================================================
' ==============================================================================
Chfig:
  FOR i% = co%+1 TO co%+9
      IF CHECKED(i%) = 1 THEN EXIT_FOR: ' figure courante
  NEXT i%
  sfig% = fig%: fig% = i%-co%
  IF fig% < 8
      HIDE ft%: HIDE fi%: HIDE fg%
  ELSE
      IF fig% = 8 THEN SHOW ft%: TO_FOREGROUND ft%: ' insertion texte
      IF fig% = 9 THEN SHOW fi%: TO_FOREGROUND fi%: ' insertion image
      IF fig% = 10 THEN SHOW fg%: TO_FOREGROUND fg%: ' dessin grille
  END_IF
RETURN
' ==============================================================================
Posit:
  x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%)
  CAPTION 0,tab$+"X= "+STR$(x%)+"  Y= "+STR$(y%)+" pixels."
RETURN
' ==============================================================================
Clic:
  x1% = MOUSE_X_POSITION(p%): y1% = MOUSE_Y_POSITION(p%)
  2D_PEN_DOT: 2D_PEN_WIDTH 1: 2D_PEN_COLOR 0,0,0: 2D_FILL_OFF: CLIPBOARD_COPY p%
  IF fig%>6
      IF fig% = 7: ' remplir
          2D_FLOOD x1%,y1%,tr%,tg%,tb%: OFF_MOUSE_UP p%
      ELSE
          IF fig% = 8: ' insertion texte
              GOSUB Valtx: ' Insertion texte
              TO_FOREGROUND ft%
          ELSE: ' insertion image
              2D_IMAGE_PASTE im%,x1%,y1%: ' insertion image
              TO_FOREGROUND fi%
          END_IF
      END_IF
  ELSE
      ON_MOUSE_MOVE p%,Clim: ON_MOUSE_UP p%,Fclic
  END_IF
RETURN
' ==============================================================================
Clim:
  a$ = tab$+"X1= "+STR$(x1%)+"  Y1= "+STR$(y1%)
  a$ = a$+"    ->    X= "+STR$(x%)+"  Y= "+STR$(y%)+" pixels."
  CAPTION 0,a$
  GOSUB Desfi
RETURN
' ==============================================================================
Fclic:
  OFF_MOUSE_MOVE p%
  2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(sp%): 2D_PEN_COLOR tr%,tg%,tb%
  IF fig% = 4 THEN 2D_FILL_COLOR tr%,tg%,tb%: 2D_FILL_ON: ' rectangle plein
  GOSUB Desfi
  IF fig% = 6 THEN 2D_FLOOD x2%,y2%,tr%,tg%,tb%: ' ellipse pleine
  OFF_MOUSE_UP p%
  ON_MOUSE_MOVE p%,Posit
RETURN
' ==============================================================================
Desfi:
  x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%)
  reg% = 0: IF SCANCODE = 160 THEN reg% = 1: SCANCODE = 0
Desfi1:
  CLIPBOARD_PASTE p%
  SELECT fig%
    CASE 1: 2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(sp%): 2D_PEN_COLOR tr%,tg%,tb%
            2D_LINE x1%,y1%,x%,y%: x1% = x%: y1% = y%
            CLIPBOARD_COPY p%
    CASE 2: IF reg% = 1: ' touche Maj enfoncée
                i% = x%-x1%: j% = y%-y1%
                IF i%<>0 AND j%<>0
                    tg = ABS(j%/i%)
                    IF tg<.4
                        y% = y1%: ' ligne horizontale
                    ELSE
                        IF tg>2.35: ' ligne verticale
                            x% = x1%
                        ELSE: ' ligne à 45°
                            IF x% > x1%
                                IF y% > y1%
                                    y% = x%-x1%+y1%: ' vers bas à droite
                                ELSE
                                    y% = y1%-x%+x1%: ' vers haut à droite
                                END_IF
                            ELSE
                                IF y%>y1%
                                    x% = x1%-y%+y1% : ' vers bas à gauche
                                ELSE
                                    x% = x1%-y1%+y%: ' vers haut à gauche
                                END_IF
                            END_IF
                        END_IF
                    END_IF
                END_IF
            END_IF
            2D_LINE x1%,y1%,x%,y%: ' Ligne droite
    CASE 3: ' rectangle (ou carré si Maj enfoncé)
cas3:
            IF reg% = 1 THEN y% = y1%+(x%-x1%): ' carré
            2D_RECTANGLE x1%,y1%,x%,y%
    CASE 4: GOTO cas3: ' plein
    CASE 5: ' ellipse (ou cercle si Maj enfoncé)
cas5:
            rx% = (x%-x1%)/2: ry% = (y%-y1%)/2: ' rayons H et V
            IF reg% = 1 THEN ry% = rx%: ' cercle
            x2% = x1%+rx%: y2% = y1%+ry%: ' centre
            IF ry% = rx%
                2D_CIRCLE x2%,y2%,rx%
            ELSE
                2D_POLY_FROM x2%+rx%,y2%
                FOR an = 0 TO 2*PI STEP PI/180
                    2D_POLY_TO x2%+rx%*COS(an),y2%+ry%*SIN(an)
                NEXT an
            END_IF
    CASE 6: GOTO cas5: ' ellipse pleine
    CASE 7: ' remplir
    CASE 8: GOSUB Valtx: ' texte (déplacement du texte)
    CASE 9: 2D_IMAGE_PASTE im%,x1%,y1%: ' déplacement de l'image
  END_SELECT
  2D_FILL_OFF
RETURN
' ==============================================================================
Chcol:
  x% = MOUSE_X_POSITION(pi%): y% = MOUSE_Y_POSITION(pi%)
  tr% = COLOR_PIXEL_RED(pi%,x%,y%): tg% = COLOR_PIXEL_GREEN(pi%,x%,y%)
  tb% = COLOR_PIXEL_BLUE(pi%,x%,y%): COLOR pic%,tr%,tg%,tb%
  2D_PEN_COLOR tr%,tg%,tb%: 2D_FILL_COLOR tr%,tg%,tb%
  FONT_COLOR mmt%,tr%,tg%,tb%: IF fig% = 8 THEN TO_FOREGROUND ft%
RETURN
' ==============================================================================
Deplace:
  ps% = POSITION(sq%): ' pas de déplacement
  j% = NUMBER_CLICK: ' sq%+1 à sq%+4: gauche, droite, haut, bas
  IF j% = sq%+1
    x1% = x1%-ps%: x% = x%-ps%
  ELSE
    IF j% = sq%+2
        x1% = x1%+ps%: x% = x%+ps%
    ELSE
        IF j% = sq%+3
            y1% = y1%-ps%: y% = y%-ps%
        ELSE
            y1% = y1%+ps%: y% = y%+ps%
        END_IF
    END_IF
  END_IF
  2D_PEN_SOLID: 2D_PEN_WIDTH POSITION(sp%): 2D_PEN_COLOR tr%,tg%,tb%
  GOSUB Desfi1
RETURN
' ==============================================================================
Chimg:
  a$ = FILE_NAME$(od%)
  b$ = UPPER$(FILE_EXTRACT_EXTENSION$(a$))
  IF b$<>".BMP" AND b$<>".JPG" THEN MESSAGE "Doit être .BMP ou .JPG": RETURN
  TEXT fi%+2,a$: ' fichier image
  IF b$ = ".JPG"
    b$ = fm$: FILE_LOAD pit%,a$: FILE_SAVE pit%,b$: a$ = b$
  END_IF
  FILE_LOAD im%,a$: ' -> Image
  FILEBIN_OPEN_READ 9,a$: FILEBIN_POSITION 9,18: wi%=FILEBIN_READ(9)+256*FILEBIN_READ(9)
  FILEBIN_POSITION 9,22: hi%=FILEBIN_READ(9)+256*FILEBIN_READ(9): FILEBIN_CLOSE 9
  IF wi%>hi%
      WIDTH pg%,pp%: HEIGHT pg%,pp%*hi%/wi%
  ELSE
      HEIGHT pg%,pp%: WIDTH pg%,pp%*wi%/hi%
  END_IF
  FILE_LOAD pg%,a$
  POSITION sp1%,wi%: POSITION sp2%,hi%
RETURN
' ==============================================================================
Red1:
  i% = POSITION(sp1%): POSITION sp2%,i%*hi%/wi%
RETURN
Red2:
  i% = POSITION(sp2%): POSITION sp1%,i%*wi%/hi%
RETURN
' ==============================================================================
Redima:
  i% = POSITION(sp1%): j% = POSITION(sp2%)
  a$ = TEXT$(fi%+2)
  RedimImg(a$,i%,j%,fm$)
  FILE_LOAD im%,fm$
RETURN
' ==============================================================================
Rszt:
  ' ajustement manuel de la boîte 'Texte'
  WIDTH mmt%,WIDTH(ft%)-wb%: HEIGHT mmt%,HEIGHT(ft%)-85: ' memo de saisie
RETURN
' ==============================================================================
Chpol:
  SHOW lst%
RETURN
' ==============================================================================
Valpo:
  HIDE lst%
  IF CLICKED(edt%) = 1 THEN TEXT edt%,ITEM_INDEX$(lst%)
  FONT_NAME mmt%,TEXT$(edt%): FONT_SIZE mmt%,POSITION(szt%)
  FONT_BOLD_OFF mmt%: FONT_ITALIC_OFF mmt%: FONT_UNDERLINE_OFF mmt%
  IF CHECKED(szt%+1) = 1 THEN FONT_BOLD mmt%
  IF CHECKED(szt%+2) = 1 THEN FONT_ITALIC mmt%
  IF CHECKED(szt%+3) = 1 THEN FONT_UNDERLINE mmt%
RETURN
' ==============================================================================
Valtx:
  ' transfert du texte
  TO_FOREGROUND ft%
  WIDTH pit%,900: HEIGHT pit%,500
  FONT_NAME pit%,TEXT$(edt%): FONT_SIZE pit%,POSITION(szt%): FONT_COLOR pit%,tr%,tg%,tb%
  FONT_BOLD_OFF pit%: FONT_ITALIC_OFF pit%: FONT_UNDERLINE_OFF pit%
  IF CHECKED(szt%+1) = 1 THEN FONT_BOLD pit%
  IF CHECKED(szt%+2) = 1 THEN FONT_ITALIC pit%
  IF CHECKED(szt%+3) = 1 THEN FONT_UNDERLINE pit%
  PRINT_TARGET_IS pit%: 2D_TARGET_IS pit%: COLOR pit%,250,255,255: CLS
  2D_FILL_COLOR 250,255,255: 2D_TARGET_IS p%
  wt% = 0: ht% = 0
  FOR i% = 1 TO COUNT(mmt%)
      a$ = ITEM_READ$(mmt%,i%): PRINT_LOCATE 0,ht%: PRINT a$
      j% = TEXT_WIDTH(a$,pit%): IF j%>wt% THEN wt%=j%: ' j% = largeur maxi texte
      ht% = ht%+TEXT_HEIGHT(a$,pit%): ' y% = hauteur totale texte
  NEXT i%
  PRINT_TARGET_IS 0
  WIDTH pit%,wt%: HEIGHT pit%,ht%
  MIN pb%,0: MAX pb%,ht%: SHOW pb%
  FOR y% = 0 TO HEIGHT(pit%)-1
    POSITION pb%,y%: ' progress_bar
    FOR x% = 0 TO WIDTH(pit%)-1
        rt% = COLOR_PIXEL_RED(pit%,x%,y%)
        IF rt%<>250
            gt% = COLOR_PIXEL_GREEN(pit%,x%,y%): bt% = COLOR_PIXEL_BLUE(pit%,x%,y%)
            2D_PEN_COLOR rt%,gt%,bt%: 2D_POINT x1%+x%,y1%+y%
        END_IF
    NEXT x%
    ' DISPLAY
  NEXT y%
  HIDE pb%
RETURN
' ==============================================================================
Annul:
  CLIPBOARD_PASTE p%
  IF fig% = 8 THEN TO_FOREGROUND ft%
  IF fig% = 9 THEN TO_FOREGROUND fi%
RETURN
' ==============================================================================
Grille:
  j% = NUMBER_CLICK
  IF j% = fg%+3: ' tracé de la grille
      IF gr% = 0
          FILE_SAVE p%,fm$
          2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 1: 2D_PEN_DOT
          ps% = POSITION(fg%+2): ' pas de la grille
          FOR i% = ps% TO WIDTH(p%) STEP ps%
              2D_LINE i%,0,i%,HEIGHT(p%)
          NEXT i%
          FOR j% = ps% TO HEIGHT(p%) STEP ps%
              2D_LINE 0,j%,WIDTH(p%),j%
          NEXT j%
          gr% = 1
      END_IF
  ELSE: ' supprimer la grille (bouton ou fermer)
Grill1:
      FILE_LOAD p%,fm$: gr% = 0
      HIDE fg%: MARK_ON co%+sfig%: ' retour choix précédent
      FILE_DELETE fm$
  END_IF
RETURN
' ==============================================================================
Reini:
  MARK_ON co%+2
RETURN
' ==============================================================================
Lirsav:
  j% = NUMBER_CLICK
  IF j% = bts%: ' lecture
      FILTER od%,"*.BMP;*.JPG"
      a$ = FILE_NAME$(od%)
      FILE_LOAD pit%,a$: FILE_SAVE pit%,fm$
      FILEBIN_OPEN_READ 1,fm$
          FILEBIN_POSITION 1,18: x% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
          FILEBIN_POSITION 1,22: y% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_CLOSE 1
      FILE_LOAD im%,fm$: FILE_DELETE fm$
      2D_IMAGE_PASTE im%,0,0: ' image dans le picture principal
      CAPTION 0,a$+" ( "+STR$(x%)+" x "+STR$(y%)+" pixels)"
  ELSE: ' sauvegarde
      FILTER sd%,"*.BMP"
      a$ = FILE_NAME$(sd%)
      FILE_SAVE p%,a$: CAPTION 0,a$
  END_IF
RETURN
' ==============================================================================
Aide:
b$ = CHR$(13)+CHR$(10)
a$ = "- DESSIN -"+b$+b$
a$=a$+"Dessin sur format A4."+b$
a$=a$+"Choisir l'épaisseur de trait et la couleur du dessin en cliquant dans la palette"+b$
a$=a$+"de 16 couleurs. La couleur active s'affiche dans le rectangle 'Couleur'."+b$+b$
a$=a$+"Figures disponibles :"+b$
a$=a$+"  (choisir l'option, cliquer l'emplacement de départ de la figure, glisser, relâcher)."+b$
a$=a$+"- Libre:            dessin à main levée, le tracé suit le déplacement de la souris."+b$
a$=a$+"- Trait:            tracé d'une droite."+b$
a$=a$+"- Rectangle:    tracé d'un rectangle ou carré (vide ou plein de la couleur courante)."+b$
a$=a$+"- Ellipse:          tracé d'une ellipse ou cercle, vide ou pleine (le point de départ"+b$
a$=a$+"                        cliqué est un coin du rectangle enveloppe)."+b$
a$=a$+"- Remplissage: remplir une figure fermée de la couleur courante (cliquer un point"+b$
a$=a$+"                        de la zone à remplir)."+b$
a$=a$+"- Texte:            saisie et insertion d'un texte au clic dans la zone de dessin."+b$
a$=a$+"                        A noter: on peut agrandir à volonté la zone de saisie du texte."+b$
a$=a$+"- Image:          insertion d'une image (jpg, bmp) au clic dans la zone de dessin."+b$
a$=a$+"- Grille:            tracé provisoire d'une grille repère, de largeur choisie."+b$+b$
a$=a$+"Usage de la touche 'Maj', enfoncée pendant le tracé d'une des figures suivantes :"+b$
a$=a$+"- Trait:          la droite tracée sera verticale, horizontale, ou inclinée à 45°."+b$
a$=a$+"- Rectangle: le tracé sera un carré."+b$
a$=a$+"- Ellipse:        le tracé sera un cercle."+b$+b$
a$=a$+"Les coordonnées de la souris en pixels sont affichées en permanence dans le bandeau"+b$
a$=a$+"du haut."+b$+b$
a$=a$+"Le tracé provisoire se fait en pointillés pendant l'appui, en suivant le mouvement de"+b$
a$=a$+"la souris. Le tracé définitif (avec couleur et épaisseur du trait définis) se fait au"+b$
a$=a$+"relâchement du bouton de la souris."+b$
a$=a$+"Il est possible à ce moment de déplacer la figure d'une quantité donnée de pixels dans"+b$
a$=a$+"toutes les directions à l'aide des boutons flèches, ou d'annuler le dernier tracé (bouton"+b$
a$=a$+"'Annul dernier'). Une seule annulation est possible."+b$+b$
a$=a$+"Insertion de texte : elle se fait avec 'fond transparent', pixel par pixel, donc pas très"+b$
a$=a$+"rapide, mais à évolution visible."+b$+b$
a$=a$+"On peut enregistrer pour usage ultérieur (réutilisation, impression) le résultat dans un"+b$
a$=a$+"fichier au format BMP (bouton 'Enregistrer'), ou recharger une image précédemment"+b$
a$=a$+"sauvegardée (bouton 'Ouvrir')."+b$
MESSAGE a$
RETURN
' ==============================================================================
Quit:
  TERMINATE
RETURN
' ==============================================================================
SUB RedimImg(f$,w%,h%,fr$)
  ' Redimensionne l'image f$ (JPG,BMP) en w%xh%. Si h%=0: redimension proportionnelle
  ' résultat dans fr$ (BMP) ou clipboard si fr$ = ""
  ' L'image résultante doit pouvoir tenir en entier dans l'écran
  DIM_LOCAL n2d%,fo%,p%,w0%,h0%,r%,fm$,wi%,hi%: n2d% = NUMBER_2D_TARGET
  fm$ = "C:\Temp\Ryry.bmp"
  p% = 900
  IF h% = 0
      PICTURE p%: HIDE p%: FILE_LOAD p%,f$: FILE_SAVE p%,fm$: DELETE p%
      FILEBIN_OPEN_READ 1,fm$: ' dimensions réelles de l'image f$
          FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
          FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_CLOSE 1: FILE_DELETE fm$
      h% = w%*hi%/wi%
  END_IF
  fo%=900: FORM fo%: BORDER_HIDE fo%: WIDTH fo%,w%: HEIGHT fo%,h%: TO_FOREGROUND fo%
  p%=fo%+1: PICTURE p%: PARENT p%,fo%: FULL_SPACE p%: STRETCH_ON p%: FILE_LOAD p%,f$
  IMAGE p%+1
  2D_TARGET_IS fo%: 2D_IMAGE_COPY p%+1,0,0,w%,h%: 2D_TARGET_IS n2d%: DELETE fo%
  CLIPBOARD_COPY p%+1: IF fr$<>"" THEN FILE_SAVE p%+1,fr$
  DELETE p%+1
END_SUB
' ===============================================================================


Edit 2/1 23h00 correction de petits bugs
Edit 3/1 petits bugs, et ajout de la possibilité de redimensionner les images avant insertion


Dernière édition par JL35 le Mar 3 Jan 2017 - 22:44, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5019
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Encore du dessin   Lun 2 Jan 2017 - 19:41

Salut JL35,

Voila un outil de dessin simple à utiliser.
J'ai regardé le code, les nouvelles commandes sont bien pratiques et permettent de gérer le clic gauche non relâché.
Belle démonstration.

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



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

MessageSujet: Re: Encore du dessin   Lun 2 Jan 2017 - 20:10

Voilà un connaisseur !
Blague à part, c'est vrai que ces commandes sont bien pratiques pour ce genre d'application où il faut surveiller la souris.
C'est bien moins scabreux qu'un timer (que j'utilisais dans mes autres programmes de dessin).

Merci Jean Claude, et bonne année à toi !

J'ai eu un petit problème dans l'insertion du texte qui se fait pixel par pixel et ligne par ligne de pixels. J'avais mis un Display à chaque ligne pour faire patienter, mais ça bloquait le transfert, je ne sais pas pourquoi. J'ai remplacé par un progress_bar (c'est corrigé là-haut).

Comme je n'étais plus dans une Sub, je m'en suis donné à coeur joie avec les Gosub ! il y a même un ou deux Goto, mais ne le dis pas à papydall... Mad
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5855
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Encore du dessin   Mar 3 Jan 2017 - 2:37

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

avatar

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

MessageSujet: +++   Mar 3 Jan 2017 - 15:39

Superbe !
C'est un futur PhotoramicShop...!
cheers alien Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
JL35



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

MessageSujet: Re: Encore du dessin   Mar 3 Jan 2017 - 17:26

Merci les amis !

Je ne garantis pas qu'il ne reste pas quelques petits bugs cachés qui pourraient planter dans certains cas particuliers non prévus.
Avant chaque opération, je sauvegarde le dessin actuel dans le presse-papier (pour récupération en cas d'Annul dernier').
Donc si on a un plantage impromptu et qu'on ne veut pas perdre ce qui a déjà été fait, avant toutes choses il faut récupérer le contenu du presse-papier dans un fichier, par exemple, pour le recharger éventuellement après relance du programme.

Si on voulait vraiment la sécurité pour ce cas, on pourrait facilement remplacer les Clipboard_Copy et Clipboard_Paste par des File_Save et File_Load.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Encore du dessin   Mar 3 Jan 2017 - 22:46

J'ai corrigé quelques bricoles, mais surtout ajouté la possibilité de redimensionner les images aux dimensions voulues avant insertion.
Toujours en tout Panoramic.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Encore du dessin   

Revenir en haut Aller en bas
 
Encore du dessin
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Ce n'est plus seulement un dessin...
» [Résolu] sprite dessin
» Dessin 3D
» Possibilité de créer des mini dessin animé ?
» Grille de dessin

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: