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
» Button_picture
par pascal10000 Aujourd'hui à 11:41

» Pourquoi le compilateur stagne
par Minibug Aujourd'hui à 11:09

» 4 (en analyse): SYNEDIT_TARGET_IS_OBJECT devient inactif
par Jack Aujourd'hui à 10:09

» 3 (en analyse): Mauvaise interprétation du string "THEN"
par Jack Aujourd'hui à 10:03

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Marc Aujourd'hui à 10:00

» KGF_dll - nouvelles versions
par pascal10000 Hier à 17:27

» Mah-Jong européen new-look
par Minibug Mar 12 Déc 2017 - 22:31

» track_bar circulaire
par Klaus Mar 12 Déc 2017 - 13:54

» API Windows
par Klaus Mar 12 Déc 2017 - 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

» anomalie
par Klaus Sam 9 Déc 2017 - 3:21

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Arrêt d'un programme dans l'éditeur

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



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

MessageSujet: Arrêt d'un programme dans l'éditeur   Sam 23 Juil 2016 - 22:57

J'ai un problème que je ne m'explique pas dans le programme qui suit, dans l'éditeur Panoramic:
- si je le ferme en cliquant sur le bouton en haut à droite du Form 0, aucun problème.
- si je le ferme par appui sur la touche 'Quitter', qui renvoie au S/P Quit qui ne contient que TERMIN,
 je ne peux pas le relancer ensuite, l'appui sur la flèche rouge 'Éclair' de l'éditeur est inefficace.
 Je dois cliquer le menu 'Stop', puis recliquer sur l'éclair pour relancer.
Et souvent je récupère ceci en cliquant sur Stop:

(je clique 'Annuler' et ça repart).

Quelque chose ne doit pas être libéré quand je fais TERMIN, ou quelque chose comme ça, mais je ne vois pas quoi...

PS j'ai modifié quelques bricoles, et du coup je ne reproduis plus le défaut, ça se termine normalement... scratch
Tant pis, ou plutôt tant mieux, et si le programme peut intéresser quelqu'un, c'est cadeau.

Le programme est destiné à regrouper des images (photos) dans un format A4 pour impression,
en choisissant le nombre de colonnes d'images (le programme en déduit le nombre de rangées).
Les ressources externes utilisées sont IrfanView (pour redimensionnement des images) et KGF.dll pour l'impression.

Pour provoquer le phénomène, chez moi, depuis l'éditeur, il suffit de lancer le programme,
de quitter par la touche 'Quitter', et de le relancer.

Voici:
Code:
LABEL Quit,Chr,Calcul,Apercu,Qaper,Exec,Quitv,Imprimer
DIM lst%,ori%,nc%,eh%,ev%,mg%,mh%,tit$,nf%,fr$,r$,i%,j%,a$,nbr%,wf%,hf%,wim%,him%
DIM hti%,evp%,ehp%,rs,ww%,hh%,ht%,mht%,mgt%,evt%,eht%,x%,y%,c%,wbh%,wbb%,wA4%,hA4%
DIM wp4%,hp4%,pmm

PICTURE 1: FULL_SPACE 1
wbb% = (WIDTH(0)-WIDTH(1))/2: ' bordures latérales des Forms (chacune)
wbh% = HEIGHT(0)-HEIGHT(1)-wbb%: ' bordure haut des Forms (bas = latérale)
DELETE 1
wA4% = 778: hA4% = 1100: ' pixels, feuille A4 grandeur nature à l'écran
wp4% = 4962: hp4% = 7013: ' pixels, feuille A4 imprimante, pour 600 dpi
pmm = INT(100*wp4%/210)/100: ' pixels par mm à l'impression

fr$ = "C:\TEMP\Resultat.bmp"

BORDER_SMALL 0: TOP 0,10: LEFT 0,10: WIDTH 0,320: FONT_NAME 0,"Arial": FONT_BOLD 0
  COLOR 0,190,255,255: CAPTION 0,"   ===   IMAGES   SUR   FEUILLE   A4   ==="

OPEN_DIALOG 8
MEMO 9: HIDE 9: WIDTH 9,600
LIST 10: HIDE 10: lst% = 10

ALPHA 21: TOP 21,2: CAPTION 21,"Répertoire des images (clic) :"
EDIT 22: TOP 22,TOP(21)+16: LEFT 22,LEFT(21): WIDTH 22,WIDTH(0)-50
  ON_CLICK 22,Chr
ALPHA 23: TOP 23,TOP(22)+3: LEFT 23,LEFT(22)+WIDTH(22)+2: COLOR 23,255,255,0
  CAPTION 23,"   "

CONTAINER_OPTION 35: TOP 35,TOP(22)+25: LEFT 35,20: WIDTH 35,WIDTH(0)-60
  HEIGHT 35,30: CAPTION 35," ORIENTATION : ": COLOR 35,200,255,255
OPTION 36: PARENT 36,35: TOP 36,10: LEFT 36,100: CAPTION 36,"Portrait": MARK_ON 36
OPTION 37: PARENT 37,35: TOP 37,TOP(36): LEFT 37,LEFT(36)+80: CAPTION 37,"Paysage"
  ON_CLICK 36,Calcul: ON_CLICK 37,Calcul
  
ALPHA 25: TOP 25,TOP(35)+HEIGHT(35)+10
  CAPTION 25,"   Colonnes                 -> Rangées                  Total="
SPIN 26: TOP 26,TOP(25)-3: LEFT 26,65: WIDTH 26,45
EDIT 27: TOP 27,TOP(26): LEFT 27,LEFT(26)+110: WIDTH 27,WIDTH(26)
EDIT 28: TOP 28,TOP(27): LEFT 28,LEFT(27)+90: WIDTH 28,WIDTH(27)-10
  MIN 26,1: MAX 26,50: POSITION 26,3: ON_CHANGE 26,Calcul

ALPHA 30: TOP 30,TOP(25)+30
  CAPTION 30,"   Marges G                  Marges H                  pixels."
SPIN 31: TOP 31,TOP(30)-3: LEFT 31,LEFT(26): WIDTH 31,WIDTH(26)
SPIN 32: TOP 32,TOP(31): LEFT 32,LEFT(27): WIDTH 32,WIDTH(31)
  MIN 31,75: MAX 31,1000: POSITION 31,75: ON_CHANGE 31,Calcul
  MIN 32,75: MAX 32,1000: POSITION 32,75: ON_CHANGE 32,Calcul
  
ALPHA 40: TOP 40,TOP(30)+30
  CAPTION 40,"        Écart H                       Écart V                  mm."
SPIN 41: TOP 41,TOP(40)-3: LEFT 41,LEFT(26): WIDTH 41,WIDTH(26)
SPIN 42: TOP 42,TOP(41): LEFT 42,LEFT(27): WIDTH 42,WIDTH(41)
  MIN 41,0: MAX 41,100.: POSITION 41,1: ON_CHANGE 41,Calcul
  MIN 42,0: MAX 42,100: POSITION 42,10: ON_CHANGE 42,Calcul
  
CONTAINER_OPTION 50: TOP 50,TOP(40)+30: LEFT 50,20: WIDTH 50,WIDTH(0)-60
  HEIGHT 50,30: CAPTION 50,"LÉGENDES : ": COLOR 50,200,255,255
OPTION 51: PARENT 51,50: TOP 51,10: LEFT 51,80: CAPTION 51,"Sans"
OPTION 52: PARENT 52,50: TOP 52,TOP(51): LEFT 52,LEFT(51)+60: CAPTION 52,"Nom du fichier"
  MARK_ON 52
  
ALPHA 60: TOP 60,TOP(50)+HEIGHT(50)+5: CAPTION 60,"Titre général éventuel :"
EDIT 61: TOP 61,TOP(60)+16: LEFT 61,LEFT(60): WIDTH 61,WIDTH(0)-20

ALPHA 65: TOP 65,TOP(61)+30: LEFT 65,15: COLOR 65,255,255,0

ALPHA 70: TOP 70,TOP(65)+30: CAPTION 70,"Fichier résultat :"
EDIT 71: TOP 71,TOP(70)+16: LEFT 71,LEFT(70): WIDTH 71,WIDTH(61)
  TEXT 71,fr$

BUTTON 80: TOP 80,TOP(71)+30: LEFT 80,WIDTH(0)/2-130: CAPTION 80,"Structure"
  ON_CLICK 80,Apercu
BUTTON 81: TOP 81,TOP(80): LEFT 81,LEFT(80)+85: CAPTION 81,"Créer"
  ON_CLICK 81,Exec
BUTTON 82: TOP 82,TOP(80): LEFT 82,LEFT(81)+85: CAPTION 82,"Quitter"
  ON_CLICK 82,Quit

FORM 500: HIDE 500: BORDER_SMALL 500: TOP 500,0: LEFT 500,WIDTH(0)
  COLOR 500,128,128,128: FONT_BOLD 500: ON_CLOSE 500,Qaper
  CAPTION 500,"   Image A4  778 x 1100   ( image réelle = 4962 x 7013 )"
PICTURE 501: PARENT 501,500: STRETCH_ON 501
BUTTON 502: PARENT 502,500: CAPTION 502,"Imprimer": ON_CLICK 502,Imprimer
BUTTON 503: PARENT 503,500: CAPTION 503,"Quitter": ON_CLICK 503,Quitv
BUTTON 504: PARENT 504,500: CAPTION 504,"OK": ON_CLICK 504,Qaper

GOSUB Calcul
END
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Chr:
' Choix du répertoire des images
a$ = FILE_NAME$(8): IF LEN(a$)<5 OR INSTR(a$,"")<0 THEN RETURN
r$ = FILE_EXTRACT_PATH$(a$)
TEXT 22,r$
EXECUTE_WAIT "cmd.exe /c DIR /B "+r$+"*.jpg | clip"
CLEAR 9: CLIPBOARD_PASTE 9: CLEAR lst%
FOR i% = 1 TO COUNT(9): ITEM_ADD lst%,r$+ITEM_READ$(9,i%): NEXT i%
CAPTION 23,"="+STR$(COUNT(lst%))+" "
RETURN
' ==============================================================================
Calcul:
' Prise en compte des paramètres
ori% = 0: wf% = wp4%: hf% = hp4%
IF CHECKED(37) = 1 THEN ori% = 1: wf% = hp4%: hf% = wp4%
nf% = 0: IF CHECKED(52) = 1 THEN nf% = 1
nc% = POSITION(26)
mg% = POSITION(31): mh% = POSITION(32)
eh% = POSITION(41): ev% = POSITION(42)
ehp% = eh%*pmm: evp% = ev%*pmm: ' espacements mm -> en pixels
wf% = wf%-mg%-75: ' dimension restant imprimable en largeur
wim% = (wf%-(nc%-1)*ehp%)/nc%: ' largeur d'une image, en pixels
him% = 3*wim%/4: ' hauteur d'une image (arbitrairement au format 4/3)
hti% = 0: ' a priori
tit$ = TEXT$(61): ' titre général éventuel
IF tit$ <> "" THEN FONT_SIZE 501,80: hti% = TEXT_HEIGHT(tit$,501)
hf% = hf%-mh%-75-hti%: ' hauteur maxi imprimable (marges et titre déduits)
nbr% = INT(hf%/(him%+evp%)): ' nombre de rangées maxi
IF nbr% = 0 THEN nbr% = 1
TEXT 27,STR$(nbr%): TEXT 28,STR$(nc%*nbr%)
a$ = "-> images de: "+STR$(wim%)+" x "+STR$(him%)+" pixels ( = "
a$=a$+STR$(INT(wim%/pmm))+" x "+STR$(INT(him%/pmm))+" mm ) "
CAPTION 65,a$
RETURN
' ==============================================================================
Apercu:
' Aperçu de la structure de l'image résultat
TOP 504,1
IF ori% = 0
    WIDTH 500,wA4%+2*wbb%: HEIGHT 500,hA4%+wbh%+wbb%+22
    WIDTH 501,wA4%: HEIGHT 501,hA4%
ELSE
    WIDTH 500,hA4%+2*wbb%: HEIGHT 500,wA4%+wbh%+wbb%+22
    WIDTH 501,hA4%: HEIGHT 501,wA4%
END_IF
2D_TARGET_IS 501: CLS: PRINT_TARGET_IS 501
HIDE 502: HIDE 503
TOP 504,HEIGHT(501): LEFT 504,WIDTH(501)/2-35: SHOW 504
GOSUB Calcul
rs = hp4%/hA4%: ' rapport entre l'image réelle (4962x7012) et l'aperçu (778x1100)
ww% = wim%/rs: hh% = him%/rs: ht% = hti%/rs
mgt% = mg%/rs: mht% = mh%/rs: evt% = evp%/rs: eht% = ehp%/rs
IF tit$ <> ""
    FONT_SIZE 501,13: i% = TEXT_WIDTH(tit$,501)
    x% = (WIDTH(501)-i%)/2: y% = mht%: PRINT_LOCATE x%,y%: PRINT tit$
END_IF
FONT_SIZE 501,8
FOR j% = 0 TO nbr%-1
    y% = mht%+ht%+j%*(hh%+evt%)
    FOR c% = 0 TO nc%-1
       x% = mgt%+c%*(ww%+eht%)
       2D_FILL_COLOR 196,196,196: 2D_RECTANGLE x%,y%,x%+ww%,y%+hh%
       IF nf% > 0: ' légende
           a$ = "Nom": i% = TEXT_WIDTH(a$,501)
           2D_FILL_COLOR 255,255,255: PRINT_LOCATE x%+ww%-i%-2,y%+hh%: PRINT a$
       END_IF
    NEXT c%
NEXT j%
SHOW 500: TO_FOREGROUND 500
RETURN
' ==============================================================================
Qaper:
HIDE 500
RETURN
' ==============================================================================
Exec:
' Création du fichier-image (fr$) contenant les images élémentaires
GOSUB Calcul
fr$ = TEXT$(71)
nf% = 0: IF CHECKED(52) = 1 THEN nf% = 1
PlancheA4(lst%,ori%,nc%,eh%,ev%,mg%,mh%,tit$,nf%,fr$)
IF FILE_EXISTS(fr$) = 0 THEN MESSAGE "Fichier non créé !": RETURN
' Voir le résultat:
TOP 502,1: TOP 503,1
IF ori% = 0
    WIDTH 500,794: HEIGHT 500,1160: WIDTH 501,778: HEIGHT 501,1100
ELSE
    WIDTH 500,1116: HEIGHT 500,854: WIDTH 501,1100: HEIGHT 501,778
END_IF
TOP 502,HEIGHT(501): LEFT 502,WIDTH(501)/2-80
TOP 503,TOP(502): LEFT 503,LEFT(502)+85
HIDE 504: SHOW 502: SHOW 503
FILE_LOAD 501,fr$: SHOW 500: TO_FOREGROUND 500
RETURN
' ==============================================================================
Quitv:
HIDE 500
RETURN
' ==============================================================================
Imprimer:
Pr_init(ori%,"")
Pr_Image(fr$,0,0,Pr_lt%,Pr_ht%,0): ' toute la surface A4
Pr_Impr()
RETURN
' ==============================================================================
SUB PlancheA4(lst%,ori%,nc%,eh%,ev%,mg%,mh%,tit$,nf%,fr$)
' Dessin d'une planche A4 imprimable
' ori% = 0: portrait, ori% = 1: paysage
' nc% colonnes d'images
' espacement H = eh%, espacement V = ev% (millimètres),
' marges gauche (et droite) mg% et haut (et bas) mh% (pixels, minimum 75)
' titre d'en-tête tit$ (ou ""), nf%=1: légendes nom des images (sino nf%=0)
' résultat dans le fichier bmp fr$
' La sub calcule le nombre maxi de rangées et la dimension des images (format 4/3)
' Liste des chemins des images dans le LIST lst% (path complet des images).
DIM_LOCAL wp%,hp%,md%,mb%,wt%,ht%,w%,h%,wi%,hi%,nr%,c%,r%,n%,x%,y%,i%,j%
DIM_LOCAL f$,iv$,fm$,s$,htit%,szt%,pmm
iv$ = "C:\Progra~2\Irfanv~1\i_view32.exe"
fm$ = "Z:\Image.bmp"
IF mg%<75 THEN mg% = 75
IF mh%<75 THEN mh% = 75
md% = 75: mb% = 75: ' marges droite et bas minimales (pixels)
wp% = 4962: hp% = 7013: ' surface totale A4 sur imprimante (600 dpi)
pmm = INT(100*wp%/210)/100: ' pixels par mm à l'impression
IF ori% = 1 THEN i% = wp%: wp% = hp%: hp% = i%: ' paysage
wt% = wp%-mg%-md%: ' dimension imprimable en largeur
eh% = eh%*pmm: ev% = ev%*pmm: ' espacements mm -> en pixels
w% = (wt%-(nc%-1)*eh%)/nc%: ' largeur d'une image, en pixels
h% = 3*w%/4: ' hauteur d'une image (arbitrairement au format 4/3)
FORM 950: HIDE 950: WIDTH 950,wp%+16: HEIGHT 950,hp%+40
PICTURE 951: PARENT 951,950: WIDTH 951,wp%: HEIGHT 951,hp%
PICTURE 952: PARENT 952,950
IMAGE 953
FORM 954: HIDE 954: BORDER_SMALL 954: TOP 954,SCREEN_Y/2-25: LEFT 954,SCREEN_X/2-200
  WIDTH 954,500: HEIGHT 954,55: CAPTION 954,"   CRÉATION   EN   COURS  . . ."
PROGRESS_BAR 955: PARENT 955,954: WIDTH 955,WIDTH(954)-18
PRINT_TARGET_IS 951
htit% = 0: ' a priori
IF tit$ <> ""
    szt% = 80: ' taille du titre, arbitraire
    FONT_SIZE 951,szt%: htit% = TEXT_HEIGHT(tit$,951)
    i% = TEXT_WIDTH(tit$,951)
    x% = (wp%-i%)/2: y% = mh%: PRINT_LOCATE x%,y%: PRINT tit$
END_IF
ht% = hp%-mh%-mb%-htit%: ' hauteur maxi imprimable (marges et titre déduits)
nr% = INT(ht%/(h%+ev%)): ' nombre de rangées maxi
IF nr% < 1 THEN nr% = 1
FONT_SIZE 951,40: ' taille des légendes
n% = 0
MIN 955,0: MAX 955,nc%*nr%-1: SHOW 954
FOR r% = 0 TO nr%-1
    y% = mh%+htit%+r%*(h%+ev%)
    FOR c% = 0 TO nc%-1
       x% = mg%+c%*(w%+eh%)
       2D_TARGET_IS 951
       n% = n%+1: POSITION 955,n%: IF n%>COUNT(lst%) THEN EXIT_FOR
       f$ = ITEM_READ$(lst%,n%)
       ' mise au format de l'image...
       ' puis transfert dans le picture en x%,y%
       s$=UPPER$(FILE_EXTRACT_EXTENSION$(f$)): IF s$<>".BMP" AND s$<>".JPG" THEN EXIT_FOR
       FILE_LOAD 952,f$: FILE_SAVE 952,fm$
       FILEBIN_OPEN_READ 1,fm$
           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$
       i% = w%: j% = h%
       IF wi%/hi% <> w%/h%: ' proportions différentes
           IF wi%/hi% > w%/h%: ' image allongée
               j% = w%*hi%/wi%: ' image allongée en largeur
           ELSE
               i% = h%*wi%/hi%: ' image en hauteur
           END_IF
       END_IF
       EXECUTE_WAIT iv$+" "+f$+" /resize=("+STR$(i%)+","+STR$(j%)+") /convert="+fm$
       FILE_LOAD 953,fm$
       IF j%<h%
           2D_IMAGE_PASTE 953,x%,y%+h%-j%
       ELSE
           IF i%<w%
               2D_IMAGE_PASTE 953,x%+w%-i%,y%
           ELSE
               2D_IMAGE_PASTE 953,x%,y%
           END_IF
       END_IF
       IF nf% > 0
           s$ = FILE_EXTRACT_NAME$(f$): i% = TEXT_WIDTH(s$,951)
           2D_FILL_COLOR 255,255,255: PRINT_LOCATE x%+w%-i%-10,y%+h%: PRINT s$
       END_IF
    NEXT c%
    IF n%>COUNT(lst%) THEN EXIT_FOR
NEXT r%
FILE_SAVE 951,fr$
HIDE 954
2D_TARGET_IS 0: PRINT_TARGET_IS 0: DELETE 950: DELETE 953: DELETE 954
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"
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 aux marges non imprimables de 75 pixels haut/bas, gauche/droite
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
' Pour que les coordonnées soient en absolu (sinon on part de 75,75):
x% = x%-Pr_mg%: y% = y%-Pr_mh%: ' marges non imprimables
Pr_res% = DLL_call6("PrinterFunction",4,ADR(phnd%),ADR(chnd%),0,x%,y%): ' positionnement
Pr_res% = DLL_call6("PrinterFunction",7,ADR(phnd%),ADR(chnd%),ADR(f$),w%,h%)
END_SUB
' ==============================================================================
SUB Pr_Impr()
' Lancement de l'impression réelle ('fin d'impression')
IF inip% = 0 THEN EXIT_SUB: ' imprimante non initialisée (Sub Pr_Init)
Pr_res% = DLL_CALL4("PrinterManager",3,ADR(phnd%),ADR(chnd%),0)
inip% = 0
END_SUB
' ==============================================================================

Je ne mets pas en cause le Termin, j'ai essayé de le remplacer par
Code:
EXECUTE "cmd.exe /c Taskkill.exe /F /IM Panoramic.exe /T"
ou par:
Code:
DLL_ON "user32"
i% = DLL_CALL4("PostMessageA",Handle(0),16,0,0): ' 16 est la constante de fermeture
c'est pareil que pour le Termin, ça s'arrête, mais ça ne veut pas redémarrer.

C'est sans doute quelque chose d'anormal dans le programme lui-même, mais je sèche...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 475
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 12:18

EDIT : ajout d'une seconde sub pour les versions de panoramic 0927i2 et +

Si tu utilises la dll 'user32' pour quitter, tu dois libérer les ressources mémoires avant d'invoquer la fermeture du programme:

Code:
'
' remplacement de 'terminate':

sub close_form(window)
' Consiste à libérer les ressources (DestroyWindow) occupées par les forms et leurs enfants, puis à indiquer
' au processus qu'il doit être arrêté (PostQuitMessage). Dès que le processus est prêt, il envoi la requête
' "WM_CLOSE" à l'application afin que celle ci s'arrête proprement.
   dll_on "user32" : dim_local null%
   null%=dll_call1("DestroyWindow",handle(window))   :' libere les resources memoires
   if window=0
      null%=dll_call1("PostQuitMessage",0)           :' indique au systeme que c'est la fin du programme
   end_if
   dll_off
end_sub


' ou a partir de panoramic0927i2 et +, on peut utiliser cette autre sub:

sub close_form(window)
' Consiste à libérer les ressources (DestroyWindow) occupées par les forms et leurs enfants, puis à indiquer
' au processus qu'il doit être arrêté (PostQuitMessage). Dès que le processus est prêt, il envoi la requête
' "WM_CLOSE" à l'application afin que celle ci s'arrête proprement.
 dim_local n
   n=0
   repeat
      n=n+1
   until library$(n)="_" or lower$(library$(n))="user32"
   if lower$(library$(n))<>"user32" then library n,"user32"
   '
   command "free_resources","DestroyWindow",n,"I","stdcall"   :' libere les resources memoires
   command "quit_form","PostQuitMessage",n,"I","stdcall"      :' indique au systeme que c'est la fin du programme
   '
   free_resources handle(window)
   if window=0 then quit_form 0   :' 0=code de sortie
end_sub

Sinon, depuis la version 0927i8, j'ai aussi ce pb de fenetre d'arret windows qui apparait parfois, mais je n'arrive pas à le reproduire.


Dernière édition par silverman le Dim 24 Juil 2016 - 18:30, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 14:04

Bonjour silverman,
Évidemment je ne maîtrise pas du tout ces fonctions de user32.dll, je ne fais que copier bêtement ce que j'ai vu ici ou là.
Je vois qu'on n'utilise pas la même fonction pour fermer, toi c'est
null%=dll_call1("PostQuitMessage",0)
et moi:
i% = DLL_CALL4("PostMessageA",Handle(0),16,0,0): ' 16 code de fermeture
alors est-ce que je dois moi aussi libérer d'abord les ressources mémoire ?

De toute façon je ne peux pas tester puisque le défaut a disparu, et je ne sais pas pourquoi...

La version 0927i8 était censée résoudre ce problème de TERMIN, alors c'est curieux... et je me demande ce que fait le 'Stop' du menu que ne fait pas le Termin.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 475
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 18:19

La méthode que j'utilise est celle recommandé par Microsoft, elle n'est pas de moi. Je me suis juste contenté de la mettre sous la forme d'une sub.

Cela consiste à libérer les ressources (DestroyWindow) occupées par les forms et leurs enfants, puis à indiquer au processus qu'il doit être arrêté (PostQuitMessage). Dès que le processus est prêt, il envoi la requête "WM_CLOSE" à l'application. C'est propre et net Cool
Pour l’avoir testé en long en large et en travers pour remplacer le ‘terminate’ bogué des versions précédentes, je te garantis que ça fonctionne au poil !

La méthode que tu utilises consiste à envoyer directement la requête "WM_CLOSE" à l'application, c'est "bourrin" et aucune ressource n'est libérée Mad
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 20:43

Je ne demande qu'à te croire, comme j'ai dit j'avais recopié mon truc tel quel, pris quelque part sur le forum, et j'en ai fait une sub.
Du coup, je vais remplacer ma sub par la tienne dans ma bibliothèque !
Merci à toi silverman !

PS en y regardant de plus près, j'avais déjà ta sub dans ma bibliothèque, déjà donnée par toi sans doute, et je me demande où j'ai bien pu aller chercher celle que j'ai cité plus haut ! ... elle est aussi dans la bibliothèque, il faut que je fasse un peu de ménage...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 22:45

@JL35

C'est la mienne tongue
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 22:53

Je n'osais pas le dire pour ne pas heurter ta modestie naturelle, mais il me semblait bien qu'il y avait de l'ami papydall là-dessous ! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 23:01

C’était à l’époque où j’étais apprenti panoramicien.
Le suis-je toujours  Question
That’s the question !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 23:08

Mais non papydall, tu es un pro !
mais il arrive quand même que le pro s'tâte
... lamentable... Rolling Eyes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Arrêt d'un programme dans l'éditeur   Dim 24 Juil 2016 - 23:19

Je tâte fréquemment ma prostate et elle se comporte heureusement  toujours bien (jusqu’à maintenant). tongue
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé




MessageSujet: Re: Arrêt d'un programme dans l'éditeur   

Revenir en haut Aller en bas
 
Arrêt d'un programme dans l'éditeur
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Arrêt d'un programme dans l'éditeur
» Tray Programme dans la zone de notification 'a cote de lhorl
» Problème dans l'éditeur de SZ 2012 [RESOLU]
» Tutoriel Comodo Firewall
» Intégrer une page HTML dans son programme ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: