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
» mise a jour calculatrice
par JL35 Aujourd'hui à 22:03

» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 20:32

» Compilateur FBPano
par jean_debord Aujourd'hui à 11:07

» Documentation de KGF
par Klaus Hier à 22:52

» Zoom sur une portion d'écran
par JL35 Hier à 21:51

» double guillemets "" dans un EDIT
par pascal10000 Hier à 21:08

» Recherche d'une expression dans un source
par Marc 37 Hier à 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 17 Nov 2017 - 11:49

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 DLL Print

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8  Suivant
AuteurMessage
Klaus

avatar

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

MessageSujet: Re: DLL Print   Mer 30 Nov 2011 - 21:16

Les fautes d'orthographe sont corrigées. Ce sera mis en ligne avec la prochaine version.

Ceci dit, à la place des "milimètres", je n'ai pas mis "millimètres", mais "pixels". Tous ceux qui utilisent le logiciel pour le moment, peuvent d'ores et déjà procéder à cette modification dans leur documentation (et dans leurs programmes, éventuellement).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

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

MessageSujet: Re: DLL Print   Mer 30 Nov 2011 - 23:14

Encore une fois, un problème vite réglé par Klaus Very Happy Si jamais j'en vois d'autre, je te dirais, c'est un des rares point où je peux t'aider Smile En tout cas bravo pour ton travail et je crois que l'on aimerait tous avoir des docs aussi bien faites que les tiennes
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: DLL Print   Jeu 1 Déc 2011 - 23:53

Un problème, avec Print.dll (impression d'images, bmp ou jpg):
La fonction positionnement est correcte, mais il y a un problème avec les dimensions de l'image imprimée, soit par exemple w% et h% les dimensions demandées en pixels.
Fonction: k% = DLL_CALL6("PrinterFunction",7,ADR(phnd%),ADR(chnd%),ADR(f$),w%,h%)
- impression en 0,0, l'image est correcte
- plus on se positionne vers la droite, plus l'image est dilatée en largeur
- plus on se positionne vers le bas, plus l'image est dilatée en hauteur
et, logiquement, si on se positionne au milieu, l'image est dilatée dans les deux sens.

PS en première approximation, il semblerait que l'abscisse s'ajoute à la largeur et l'ordonnée à la hauteur.
Travaux pratiques: effectivement, si je soustrais l'abscisse de la largeur et l'ordonnée de la longueur, avant de lancer la dll, l'image est correcte.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Dim 1 Jan 2012 - 10:24

Mon déménagement est terminé, et internet a trouvé le chemin à travers les tuyaux jusqu'à mon nouveau domicile. Je prends donc connaissance de ta remarque, et je vais analyser cela.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Dim 1 Jan 2012 - 16:55

Merci Klaus, ton absence a été plus longue que prévue, mais enfin te voilà de retour parmi nous.
Bonne année !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Dim 1 Jan 2012 - 20:13

Voici, à tout hasard, le programme de démo, adapté à la prévisualisation:
Code:
LABEL EndProg, initialisations, charger_informations
LABEL fermeture, remplir_page, editer_cadres
LABEL calcul_position, charger_angles, preview
LABEL demo_1, demo_2, demo_3, demo_4, demo_5
LABEL demo_6, demo_7, demo_8, demo_9, demo_10

DLL_ON "Print.dll"
DIM PRT_FONTSIZE% : PRT_FONTSIZE% = 20
DIM PRT_FONTNAME$ : PRT_FONTNAME$ = "Courier New"
' PrinterManager et PrinterFunction
DIM PRT_STARTJOB% : PRT_STARTJOB% = 1
DIM PRT_FORMFEED% : PRT_FORMFEED% = 2
DIM PRT_ENDJOB%  : PRT_ENDJOB%  = 3
DIM PRT_FORMAT%  : PRT_FORMAT%  = 4
DIM PRT_TITLE%    : PRT_TITLE%    = 6
DIM PRT_GETVAL%  : PRT_GETVAL%  = 8
DIM VERTRES%      : VERTRES%      = 8
DIM HORZRES%      : HORZRES%      = 7
DIM RECTANGLE%    : RECTANGLE%    = 1
DIM PRT_FORM%    : PRT_FORM%    = 2
DIM PRT_POSIT%    : PRT_POSIT%    = 4
DIM ABSOLU%      : ABSOLU%      = 0
DIM LIGNE%        : LIGNE%        = 0

' Couleur impression
DIM RED%          : RED% = HEX("0000FF")
DIM BLUE%        : BLUE%= HEX("FF0000")

DIM PrnHnd%,CanvHnd%
DIM PrnVal%,PrnOpt%
DIM PrnCar$,PrnAttr$
DIM PrnFont%
DIM taille_verticale%, taille_horizontale%
DIM rect_detail_x%, rect_detail_y%
DIM costab(24), sintab(24), radtab(24)

DIM PrnLigne$,PrnNumLigne%
DIM i%, j%, k%, l%, x%, y%, f$

DIM PrinterName$:PrinterName$=STRING$(255," ")
DIM JobName$:JobName$ = "essai impression"
DIM DemoText$ : DemoText$ = "Démo PrinterTextPrint"

picture 300 : top 300,10 : left 300,10 : width 300,HORZRES% : height 300,VERTRES%

gosub charger_angles
gosub initialisations
gosub charger_informations
gosub remplir_page
gosub fermeture

EndProg:
 Message "Fin du test"
 DLL_OFF
' TERMINATE
END

 initialisations:
' selection de l'imprimante
PrnVal% = DLL_CALL2("SelectWindowsPrinter",ADR(PrinterName$),LEN(PrinterName$)) : PrinterName$=TRIM$(PrinterName$)
IF PrnVal%=0 then GOTO EndProg
' titre du job d'impression
PrnVal% = DLL_CALL4("PrinterManager",PRT_TITLE%,ADR(PrnHnd%),ADR(JobName$),LEN(JobName$))
IF PrnVal%=0 then GOTO EndProg

' Ouverture du job d'impression
PrnOpt% = 0 : PrnVal% = DLL_CALL4("PrinterManager",PRT_STARTJOB%,ADR(PrnHnd%),ADR(CanvHnd%),ADR(PrnOpt%))
IF PrnVal%=0 then GOTO EndProg

prnfont% = 8
return

charger_informations:
' prendre les dimensions utiles de la feuille
VERTRES% = DLL_call6("PrinterFunction",PRT_GETVAL%,ADR(PrnHnd%),ADR(CanvHnd%),VERTRES%,0,0)
HORZRES% = DLL_call6("PrinterFunction",PRT_GETVAL%,ADR(PrnHnd%),ADR(CanvHnd%),HORZRES%,0,0)
return

fermeture:
' Fermeture
PrnVal% = DLL_CALL4("PrinterManager",PRT_ENDJOB%,ADR(PrnHnd%),ADR(CanvHnd%),0)
return

remplir_page:
gosub editer_cadres
gosub demo_1
gosub demo_2
gosub demo_3
gosub demo_4
gosub demo_5
gosub demo_6
gosub demo_7
gosub demo_8
gosub demo_9
gosub demo_10
gosub preview
return

preview:
' aperçu dans fichier BMP
' f$ = "apercu.bmp"
' PrnVal% = DLL_call1("PrinterCurrentPagePreview",adr(f$))
' file_load 300,"PrintPreview.bmp"
' aperçu dans presse-papier
' PrnVal% = DLL_call1("PrinterCurrentPagePreview",0)
' clipboard_paste 300
' aperçu dans presse-papier etdans Popup
 i% = 0-1
 PrnVal% = DLL_call1("PrinterCurrentPagePreview",i%)
return

editer_cadres:
' on est positionné sur (0,0) !
PrnVal% = DLL_call6("PrinterFunction",PRT_POSIT%,ADR(PrnHnd%),ADR(CanvHnd%),ABSOLU%,10,10)
' on est en (10,10)
' tracer un rectangle extérieur
PrnVal% = DLL_call6("PrinterFunction",PRT_FORM%,ADR(PrnHnd%),ADR(CanvHnd%),RECTANGLE%,HORZRES%-30,VERTRES%-30)
' calculer la taille des 2x5 rectangles de la démo
' horizontalement, (taille maxi - 10 - 30 - 3x20)/2
rect_detail_x% = HORZRES%/2 - 50
' verticalement, (taille maxi - 10 - 30 - 6x20)/2
rect_detail_y% = VERTRES%/5 - 30
' afficher le 2x5 rectangles des démos
for i%=1 to 5
    for j%=1 to 2
        ' positionner le rectangle
        gosub calcul_position
        PrnVal% = DLL_call6("PrinterFunction",PRT_POSIT%,ADR(PrnHnd%),ADR(CanvHnd%),ABSOLU%,x%,y% )
        PrnVal% = DLL_call6("PrinterFunction",PRT_FORM%,ADR(PrnHnd%),ADR(CanvHnd%),RECTANGLE%,rect_detail_x%,rect_detail_y%)
    next j%
next i%
return

calcul_position:
    x% = 10 + j%*20 + (j%-1)*rect_detail_x%
    y% = 10 + i%*20 + (i%-1)*rect_detail_y%
return

' test sur droite descendante
demo_1:
    i% = 1 : j% = 1
    gosub calcul_position
    x% = x% + 100
    y% = y% + 100
    PrnAttr$ = "AXAY"
    for i%=1 to len(DemoText$)
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 30
        y% = 30
        PrnAttr$ = "RXRY"
    next i%
return

' test sur droite ascendante
demo_2:
    i% = 1 : j% = 2
    gosub calcul_position
    x% = x% + 100
    y% = y% + rect_detail_y%-200
    PrnAttr$ = "AXAY"
    for i%=1 to len(DemoText$)
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 30
        y% = 0-30
        PrnAttr$ = "RXRY"
    next i%
return

' de droite à gauche
demo_3:
    i% = 2 : j% = 1
    gosub calcul_position
    x% = x% + rect_detail_x% - 200
    y% = y% + rect_detail_y%/2
    PrnAttr$ = "AXAY"
    for i%=1 to len(DemoText$)
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 0 - 130
        y% = 0
        PrnAttr$ = "RX"
    next i%
' test afficher GIF
    dim NomJPG$ : NomJPG$ = "déplaceur.gif"
    PrnVal% = DLL_call6("PrinterFunction",7,ADR(PrnHnd%),ADR(CanvHnd%),adr(NomJPG$),100,800)
' test impression de lignes
' PrnVal% = DLL_call6("PrinterFunction",PRT_POSIT%,ADR(PrnHnd%),ADR(CanvHnd%),ABSOLU%,100,400)
' PrnVal% = DLL_call6("PrinterFunction",PRT_FORM%,ADR(PrnHnd%),ADR(CanvHnd%),LIGNE%,300,0)
' PrnVal% = DLL_call6("PrinterFunction",PRT_FORM%,ADR(PrnHnd%),ADR(CanvHnd%),LIGNE%,0,200)
' i% = 0-150
' PrnVal% = DLL_call6("PrinterFunction",PRT_FORM%,ADR(PrnHnd%),ADR(CanvHnd%),LIGNE%,i%,300)
' test impression d'arc d'éllipse
 i% = 90
 j% =90
 PrnVal% = DLL_call6("PrinterDrawArc",500,800,900,1000,i%,j%)
return

' sur deux lignes qui se croisent, avec des effets couleur
demo_4:
    i% = 2 : j% = 2
    gosub calcul_position
    x% = x% + 100
    y% = y% + 100
    PrnAttr$ = "AXAY"
    for i%=1 to len(DemoText$)
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnFont% = Bin_Or(bin_and(PrnFont%,255),(255)*256*256+(255)*256)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 30
        y% = 30
        PrnAttr$ = "RXRY"
    next i%
    i% = 2 : j% = 2
    gosub calcul_position
    x% = x% + 100
    y% = y% + rect_detail_y%-200
    PrnAttr$ = "AXAY"
    l% = len(DemoText$)
    for i%=1 to l%
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnFont% = Bin_Or(bin_and(PrnFont%,255),((255-(i%-1)*12)*256*256+(i%*12))*256)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 30
        y% = 0-30
        PrnAttr$ = "RXRY"
    next i%
    PrnFont% = 8
return

' sur un cercle dans le sens des aiguille d'une montre
demo_5:
    i% = 3 : j% = 1
    PrnAttr$ = "AXAY"
    for k%=1 to len(DemoText$)
        gosub calcul_position
        PrnCar$ = mid$(DemoText$,k%,1)
        x% = x% + rect_detail_x%/2 + costab(k%)*600
        y% = y% + rect_detail_y%/2 + sintab(k%)*600
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
    next k%
return

' sur un cercle dans le sens inverse des aiguille d'une montre
demo_6:
    i% = 3 : j% = 2
    PrnAttr$ = "AXAY"
    for k%=1 to len(DemoText$)
        gosub calcul_position
        PrnCar$ = mid$(DemoText$,k%,1)
        l% = len(DemoText$)+1 - k%
        x% = x% + rect_detail_x%/2 + costab(l%)*600
        y% = y% + rect_detail_y%/2 + sintab(l%)*600
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
    next k%
return

' sur une spirale dans le sens des aiguille d'une montre
demo_7:
    i% = 4 : j% = 1
    PrnAttr$ = "AXAY"
    for k%=1 to len(DemoText$)
        gosub calcul_position
        PrnCar$ = mid$(DemoText$,k%,1)
        x% = x% + rect_detail_x%/2 + costab(k%)*600*(1-k%/Len(DemoText$))
        y% = y% + rect_detail_y%/2 + sintab(k%)*600*(1-k%/Len(DemoText$))
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
    next k%
return

' sur une spirale dans le sens inversedes aiguille d'une montre
demo_8:
    i% = 4 : j% = 2
    PrnAttr$ = "AXAY"
    for k%=1 to len(DemoText$)
        gosub calcul_position
        PrnCar$ = mid$(DemoText$,k%,1)
        l% = len(DemoText$)+1 - k%
        x% = x% + rect_detail_x%/2 + costab(l%)*600*(1-k%/Len(DemoText$))
        y% = y% + rect_detail_y%/2 + sintab(l%)*600*(1-k%/Len(DemoText$))
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
    next k%
return

' verticalement de haut en bas
demo_9:
    i% = 5 : j% = 1
    gosub calcul_position
    x% = x% + 100
    y% = y% + 100
    PrnAttr$ = "AXAY"
    for i%=1 to len(DemoText$)
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 0-40
        y% = 60
        PrnAttr$ = "RXRY"
    next i%
return

' verticalement de bas en haut
demo_10:
    i% = 5 : j% = 2
    gosub calcul_position
    x% = x% + 100
    y% = y% + rect_detail_y%-100
    PrnAttr$ = "AXAY"
    for i%=1 to len(DemoText$)
        PrnCar$ = mid$(DemoText$,i%,1)
        PrnVal% = DLL_CALL6("PrinterPrintText",ADR(PrnCar$),ADR(PRT_FONTNAME$),ADR(PrnAttr$),PrnFont%,ADR(x%) ,ADR(y%) )
        x% = 0-40
        y% = 0-60
        PrnAttr$ = "RXRY"
    next i%
return

charger_angles:
for i%=1 to 24
    radtab(i%) = 3.14/2 - (i%-1)*3.14/12 : ' 90° - (i%-1)*15°
    costab(i%) = cos(radtab(i%))
    sintab(i%) = sin(radtab(i%))
next i%
return

En ce qui concerne la taille et/ou le positionnement de l'image par la fonction 7, voici comment c'est fait:
Code:
monrect:=rect(printer.Canvas.PenPos.X,printer.Canvas.PenPos.Y,printer.Canvas.PenPos.X+opt2,printer.Canvas.PenPos.Y+opt3);
On imprime donc (par StretchDraw) à partir de la position courante sur une largeur de opt2 et une hauteur de opt3 pixels. As-tu un exemple de code qui montre le problème ? Car à priori, je ne vois pas où cela pourrait mal se passer.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Dim 1 Jan 2012 - 23:24

Je n'y comprends plus rien, je n'arrive même plus à imprimer une image. Voici mon code de test:
Code:
DIM Nprn$, Njob$, HndP%, HndC%, f$, fnt$, sz%, x%, y%, wi%, hi%, k%, txt$, attr$
DIM mm2pix
LABEL Imprimer
DLL_ON "C:\Langages\Panoramic\Klaus\Print.dll"

f$ = "C\Graph\Jpg\Goldgate.jpg": ' image quelconque (640x480)
fnt$ = "Arial": sz% = 10
mm2pix = 23.62: ' à 600 dpi, 1 mm vaut environ 23,62 pixels
GOSUB Imprimer
Message "Terminé !"
DLL_OFF
TERMINATE

Imprimer:
' choix imprimante
Nprn$ = STRING$(255, " ")
k% = DLL_CALL2("SelectWindowsPrinter",ADR(Nprn$),LEN(Nprn$))
IF k%<>1 THEN Print "Erreur 1 !": RETURN
' nom du job
Njob$ = "Impression planche"
k% = DLL_CALL4("PrinterManager",6,ADR(HndP%),ADR(Njob$),LEN(Njob$))
IF k%<>1 THEN Print "Erreur 2 !": RETURN
' orientation portrait
k% = DLL_CALL4("PrinterManager",4,ADR(HndP%),ADR(HndC%),0)
IF k%<>1 THEN Print "Erreur 3 !": RETURN
' lancement du job
k% = DLL_CALL4("PrinterManager",1,ADR(HndP%),ADR(HndC%),0)
IF k%<>1 THEN Print "Erreur 4 !": RETURN
' positionnement absolu de l'image + impression
' x% = 50: x% = x%*mm2pix: ' abscisse, millimètres et pixels
' y% = 30: y% = y%*mm2pix: ' ordonnée, millimètres et pixels
x% = 1181: y% = 709: ' en pixels, because les lignes ci-dessus partent en erreur
k% = DLL_CALL6("PrinterFunction",4,ADR(HndP%),ADR(HndC%),0,x%,y%)
IF k%<>1 THEN Print "Erreur 5 !": RETURN
' wi% = 40: wi% = wi%*mm2pix: ' largeur image imprimée, millimètres et pixels
' hi% = 30: hi% = hi%*mm2pix: ' hauteur image
wi% = 945: hi% = 709: ' en pixels, because les lignes ci-dessus partent en erreur
k% = DLL_CALL6("PrinterFunction",7,ADR(HndP%),ADR(HndC%),ADR(f$),wi%,hi%)
IF k%<>1 THEN Print "Erreur 6 !": RETURN
' impression du texte en x%,y%
y% = y% + hi%
txt$ = "x="+STR$(x%)+", y="+STR$(y%)
k%=DLL_CALL6("PrinterPrintText",ADR(txt$),ADR(fnt$),ADR(attr$),sz%,ADR(x%),ADR(y%))
IF k%<>1 THEN Print "Erreur 7 !": RETURN
stop
' fin de job (lancement de l'impression)
k% = DLL_CALL4("PrinterManager",3,ADR(HndP%),ADR(HndC%),0)
IF k%<>1 THEN Print "Erreur 8 !": RETURN
RETURN
Il me semble que ça marchait (sauf pour les dimensions), mais j'ai maintenant:
1) si je ne mets pas les lignes X% =, y% =, wi% =, hi% = (lignes 30, 31, 35, 36) en commentaire une erreur:
'23.62' is not a valid floating point value, que je n'avais pas avant (mais apparemment ça n'a rien à voir avec Print.dll)
(mm2pix=23.62 est le facteur de conversion mm -> pixels pour 600 dpi)
2) sur la ligne 38 (DLL_CALL6 fct 7) une erreur: 'Access violation at address 000002C5. Read of address 000002C5'
3) A la fermeture du programme: 'Runtime error 216 at 0369356A'
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 0:22

Tu as révélé un bug dans Panoramic concernant le traitement des flottants ! J'ai adapté ton programme pour que ça marche:
Code:
DIM Nprn$, Njob$, HndP%, HndC%, f$, fnt$, sz%, x%, y%, wi%, hi%, k%, txt$, attr$
DIM mm2pix
LABEL Imprimer
DLL_ON "Print.dll"

f$ = "déplaceur.jpg": ' image quelconque (640x480)
fnt$ = "Arial": sz% = 10
mm2pix = 2362 : ' KLAUS à 600 dpi, 1 mm vaut environ 23,62 pixels
message str$(mm2pix)
GOSUB Imprimer
Message "Terminé !"
DLL_OFF
TERMINATE

Imprimer:
' choix imprimante
Nprn$ = STRING$(255, " ")
k% = DLL_CALL2("SelectWindowsPrinter",ADR(Nprn$),LEN(Nprn$))
IF k%<>1 THEN Print "Erreur 1 !": RETURN
' nom du job
Njob$ = "Impression planche"
k% = DLL_CALL4("PrinterManager",6,ADR(HndP%),ADR(Njob$),LEN(Njob$))
IF k%<>1 THEN Print "Erreur 2 !": RETURN
' orientation portrait
k% = DLL_CALL4("PrinterManager",4,ADR(HndP%),ADR(HndC%),0)
IF k%<>1 THEN Print "Erreur 3 !": RETURN
' lancement du job
k% = DLL_CALL4("PrinterManager",1,ADR(HndP%),ADR(HndC%),0)
IF k%<>1 THEN Print "Erreur 4 !": RETURN
' positionnement absolu de l'image + impression
 x% = 50: x% = x%*mm2pix/100: ' KLAUS abscisse, millimètres et pixels
 y% = 30: y% = y%*mm2pix/100: ' KLAUS ordonnée, millimètres et pixels
' x% = 1181: y% = 709: ' en pixels, because les lignes ci-dessus partent en erreur
k% = DLL_CALL6("PrinterFunction",4,ADR(HndP%),ADR(HndC%),0,x%,y%)
IF k%<>1 THEN Print "Erreur 5 !": RETURN
' wi% = 40: wi% = wi%*mm2pix: ' largeur image imprimée, millimètres et pixels
' hi% = 30: hi% = hi%*mm2pix: ' hauteur image
wi% = 945: hi% = 709: ' en pixels, because les lignes ci-dessus partent en erreur
k% = DLL_CALL6("PrinterFunction",7,ADR(HndP%),ADR(HndC%),ADR(f$),wi%,hi%)
IF k%<>1 THEN Print "Erreur 6 !": RETURN
' impression du texte en x%,y%
y% = y% + hi%
txt$ = "x="+STR$(x%)+", y="+STR$(y%)
k%=DLL_CALL6("PrinterPrintText",ADR(txt$),ADR(fnt$),ADR(attr$),sz%,ADR(x%),ADR(y%))
IF k%<>1 THEN Print "Erreur 7 !": RETURN
stop
' fin de job (lancement de l'impression)
k% = DLL_CALL4("PrinterManager",3,ADR(HndP%),ADR(HndC%),0)
IF k%<>1 THEN Print "Erreur 8 !": RETURN
RETURN
Attention: j'ai aussi modifié le chemin vers la DLL ainsi que le nom de l'image pour pouvoir tester dans mon environnement. Elémentaire...

Le bug est le suivant:
23.62 est bien la représentation d'une valeur flottante. Mais tu ne peux PAS utiliser une variable flottante chargée d'une telle valeur dans une opération ! Et même si tu as chargé cette variable par 2362/100 ! L'affectation à une variable marche, mais l'utilisation d'une telle variable dans une expression arithmétique plante ! C'est bien un bug !

J'ai contourné ce problème en chargeant 2352 dans la variable et en ajoutant /100 en fin d'expression - ça marche puisqu'en affectation, c'est bon. Et tu vois que ce problème est indépendant de Print.dll.

Pour info: j'utilise PANORAMIC V 0.9.23i1 du 27/11/2011. Et toi ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 1:05

Merci Klaus, j'utilise bien la même version de Panoramic (la dernière).
Je me doutais bien que cette erreur n'avait rien à voir avec ta dll, et j'avais également essayé 2362/100 entre autres, sans succès !
J'essaie le programme modifié par toi...

Cette fois, ça marche !!! cette histoire de flottant était donc la seule erreur...
En tout cas je suis content, merci de t'être penché sur mon cas, je vais pouvoir continuer.

Bonne nuit !

PS j'émets une réserve toutefois concernant les proportions de l'image qui ne semblent pas respectées, en fonction de l'emplacement sur la feuille, je ferai des mesures plus poussées demain.
Si on modifie x% et y% (coordonnées) sans toucher à wi% et hi% (dimensions), l'image est déformée (dilatée), conformément semble-t-il à mes remarques précédentes.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1768
Date d'inscription : 28/05/2007

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 9:29

Citation :
Tu as révélé un bug dans Panoramic concernant le traitement des flottants !
Je regarde ce qui se passe.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
JL35



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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 15:38

Merci Jack !

@Klaus, je confirme ma remarque du 1er décembre:
Si je demande l'impression en x=50 mm, y= 30 mm d'une image de dimensions 40x30 mm, j'imprime bien au bon emplacement, mais une image de (40+50) mm x (30+30) mm.
Comme je le disais, l'abcisse et l'ordonnée s'ajoutent respectivement à la longueur et à la hauteur demandées.

On voit dans mon exemple que le texte, qui lui est à l'emplacement demandé, et qui devrait s'imprimer juste sous l'image, se retrouve en plein milieu.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 16:49

OK, je suis en train de tracer le problème.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 19:07

Très bien la prévisualisation, mais (il faut bien que je pinaille...) on ne voit pas les limites de la feuille telle qu'elle sera imprimée, ne pourrait-elle pas se détacher en blanc sur un fond plus sombre de la Form, pour qu'on voie bien ses proportions et l'emplacement relatif des éléments imprimés ? (je parle de la prévisualisation dans une fenêtre).

PS en regardant de plus près (bonjour mes vieux yeux) je vois qu'elle est effectivement dessinée, mais elle ne se détache pas assez du fond de la Form qui est trop clair. De plus, la Form est un peu juste en hauteur, ce qui déclenche un ascenseur, pour très peu, c'est dommage.


Dernière édition par JL35 le Lun 2 Jan 2012 - 19:11, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 19:09

Je vais voir ce que je peux faire... c'est sûrement possible.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 19:12

On s'est croisés... j'ai juste fait une petite rectification.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 19:25

Une question concernant la prévisualisation:
Arrivé à la fin de mon programme de test, je lance une prévisualisation avant de lancer l'impression physique.
Si la prévisualisation ne me convient pas (ou si même une erreur survient dans le programme en cours), je quitte sans lancer l'impression (DLL_CALL4, fct 3), mais le document est quand même déjà en file d'attente d'impression, donc ça va déclencher l'imprimante en fin de programme, ou dès que je vais la rallumer.
Il faut que j'aille dans le gestionnaire d'imprimante pour annuler les documents (vides, en général) accumulés.
(pardon si mes explications sont un peu confuses)
Y a-t-il un moyen d'annuler cette mise en file d'attente ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 19:53

Oui, bientôt: la fonction "Annulation" en cours d'écriture...

Je viens de mettre une nouvelle version de Priint.dll en ligne. Elle devrait corriger le problème de taille de l'image imprimée qui était effectivement modifiée par la position de l'impression !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Lun 2 Jan 2012 - 20:06

Merci Klaus, ça c'est de l'efficacité, bravo !
Je suis en train de tester les arcs, mais je télécharge tout de suite.

SUPER, je confirme, ça marche, les images sont maintenant impeccables.

Deux petites remarques en passant (pour la documentation):
- PrinterFunction, fonction 8, options 9 et 10 (HORSIZE et VERTSIZE) ce sont bien des millimètres et non des pixels.
- PrinterDrawArc renvoie 0 si correct (et non pas 1 comme les autres fonctions)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 0:01

Quel boulot Smile Super ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 0:32

Je mets ces points sur la To-Do-List, ainsi que la routine d'annulation d'impression qui est en cours.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 13:29

Ca y est : les points en cours sur Print.dll sonr réglés:

Citation :
Deux petites remarques en passant (pour la documentation):
- PrinterFunction, fonction 8, options 9 et 10 (HORSIZE et VERTSIZE) ce sont bien des millimètres et non des pixels.
La documentation est mise à jour.

Citation :
Deux petites remarques en passant (pour la documentation):
- PrinterDrawArc renvoie 0 si correct (et non pas 1 comme les autres fonctions)
Corrigé dans le programme.

La fonction PrinterManager à un nouveau code permettant d'annuler complètement une édition, ou d'effacer la page actuelle. Extrait dfe la documentation:
Citation :
7 = Annuler la cible à effacer donnée par opt%
0 = annuler l'édition complète (rien ne sera imprimé)
1 = effacer la page actuelle
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 15:41

Je charge tout ça immédiatement, et hop ! aux essais !

Voilà, c'est testé et tout marche à ma plus grande satisfaction, Klaus tu nous as fait un monument ! Merci.

(encore juste un petit truc dans la doc, un lapsus, rubrique impression de texte avec attributs, opt2%, il y a AY=relatif vertical au lieu de absolu vertical, + quelques rares fautes de frappe vénielles sans importance).

Et comme j'en veux toujours plus (mais hein, c'est pour le bien commun !)
Concernant la prévisualisation, je réitère ce que je disais hier, que la Form soit mieux adaptée à l'image de la feuille (et avec un fond plus sombre), et avec éventuellement deux boutons de choix: imprimer ou abandonner, ce qui donnerait un code retour différent pour la fonction, genre 0 ou 1...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 19:27

Bon, ta DLL d'impression va bientôt être finie. Vu la vitesse à laquelle tu travailles, tu as déjà une idée pour un nouveau challenge ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 20:07

Ne distrais pas notre ami Klaus, s'il te plait, il a du boulot ! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: DLL Print   Mar 3 Jan 2012 - 20:18

Ce n'était pas le but, mais si j'ai bien suivi, une fois la prévisu terminée, la DLL devrait être complète (il ajoutera sans doute d'autres fonctions au fil du temps comme d'habitude selon les besoin, mais je crois que la DLL correspondera à ce que Klaus avait prévu... Very Happy
Vu la qualité du résultat, j'avoue que je suis curieux de savoir sur quelle problèmatique ou quel sujet il va se pencher après ....
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: DLL Print   

Revenir en haut Aller en bas
 
DLL Print
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 4 sur 8Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8  Suivant
 Sujets similaires
-
» PRINT dans un Picture: interligne trop petit
» carbon foot print - making of
» Taille des polices pour Print dans un Picture
» [résolu]Google Cloud Print
» Etudiant demande aide en fortran

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: