FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
DLL Print - Page 3 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
DLL Print - Page 3 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
DLL Print - Page 3 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
DLL Print - Page 3 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
DLL Print - Page 3 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
DLL Print - Page 3 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
DLL Print - Page 3 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
DLL Print - Page 3 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
DLL Print - Page 3 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
DLL Print - Page 3 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
DLL Print - Page 3 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
DLL Print - Page 3 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
DLL Print - Page 3 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
DLL Print - Page 3 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
DLL Print - Page 3 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-25%
Le deal à ne pas rater :
PC Portable Gamer 16,1” HP Victus 16 – 16 Go /512 Go
749.99 € 999.99 €
Voir le deal

 

 DLL Print

Aller en bas 
+3
Jicehel
Severin
Nardo26
7 participants
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8  Suivant
AuteurMessage
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyJeu 24 Nov 2011 - 23:35

ça me rassure... si on veut !
Bon, cette fois je vais me coucher la conscience tranquille, bonne nuit !

Zut je viens de voir ta rectification ! alors mon problème reste entier, mais je verrai ça demain ! (je reprendrai ton code pour voir).
Et ne te perds pas dans le château de bignono.
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyVen 25 Nov 2011 - 12:31

J'ai fait un petit programme de démo pour montrer les capacités de PrinterTextPrint. Ce programme est basé sur un programme de Nardo26 dont j'ai gardé la structure principale, mais j'ai rajouté ma propre démo. De plus, j'ai introduit une certaine modularité en gardant comme programme principal qu'une série d'appels à des sous-programmes, réalisant chacun une fonction bien précise. La lecture du source en est simplifié, et on peut en extraire facilement certains modules pour usage dans un autre programme.

Voici le source:
Code:
LABEL EndProg, initialisations, charger_informations
LABEL fermeture, remplir_page, editer_cadres
LABEL calcul_position, charger_angles
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

' 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%

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

gosub charger_angles
gosub initialisations
gosub charger_informations
gosub remplir_page
gosub fermeture

EndProg:
 Message "Fin du test"
 DLL_OFF
 TERMINATE
 
 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
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%
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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyVen 25 Nov 2011 - 15:11

Impressionnant ! on comprend quand même mieux avec des exemples, et on voit mieux toutes les possibilités.
(quand tu parles de PrinterTextPrint je suppose que tu veux dire PrinterPrintText ?)

Je retourne à mon image qui ne veut pas s'imprimer...

Une remarque, par rapport à la documentation:
dans PrinterFunction, code fonction 2 (dessin à partir de la position active), il semble que les options 2 et 3 ne soient pas les coordonnées du point inférieur droit comme annoncé, mais
- dans le cas du rectangle, sa largeur et sa hauteur
- dans le cas de la ligne, la largeur et la hauteur du rectangle dont la ligne serait la diagonale (ça c'est moins bien).
en effet, opt2 et opt3 sont respectivement la différence entre x_arrivée et x_départ, et y_arrivée et y_départ.
Conséquence amusante (?), on ne peut pas tracer une ligne parfaitement horizontale ou verticale, il faut au moins 1 pixel d'écart (opt2 et opt3 ne peuvent pas être nuls).
- j'ai essayé l'ellipse, mais je ne sais pas trop comment la définir, même en modifiant des paramètres ça ne change pas grand chose...
ça marche, la position courante est le centre, opt1 et opt2 semblent être la largeur et la hauteur de l'ellipse (comme pour le rectangle). La position courante (au départ) est le coin supérieur gauche du rectangle enveloppant de l'ellipse.

Et toujours impossible d'imprimer la moindre image...

EDIT
Nardo, s'il te plait, par un effet de ta grande bonté, pourrais-tu, si ça ne te dérange pas trop, me montrer ta commande DLL_CALL6 qui t'a permis d'imprimer une image hier ?
Que de précautions oratoires, mais quand on est intéressé..
.
ReEDIT j'y arrive avec un BMP, mais avec un JPG j'ai toujours la même erreur:
Exception EInvalidGraphic in module Print.dll at 00021B19
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptySam 26 Nov 2011 - 0:54

1. Tu as raison, je voulais effectivement démontrer les possibilités de PrinterPrintText. Merci pour la mise au point.

2. Effectivement, il s'agit de la largeur et hauteur du rectangle et non des coordonnées du coin en bas à droite. Grossière erreur de documentation, qui sera corrigée. Merci bis !

3. Je n'avais même pas pensé au cas de la ligne droite, honte sur moi ! je vais étendre PrinterFunction avec un nouveau code fonction pour pouvoir réaliser cela. Ce sera pour le début de la semaine prochaine...

4. Dans PrinterFunction code 7 (impression d'images), j'ai le même plantage avec des JPG et GIF. Seuls les BMP marchent actuellement. Je ne sais pas pourquoi. Je vais regarder cela. Les valeurs opt2% et opt3% représentent la largeur et la hauteur de l'image, respectivement. L'édition a lieu avec la position active comme coin en haut à gauche de l'image. La documentation sera rectifiée.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptySam 26 Nov 2011 - 10:42

Merci beaucoup Klaus, me voilà rassuré sur tous les points qui me semblaient obscurs.

Une précision concernant les images, c'est implicite mais c'est mieux en le disant: elles sont automatiquement redimensionnées pour tenir dans la largeur et la hauteur demandées (éventuellement déformées, étirées, pour remplir toute la zone, si celle-ci n'est pas au même rapport largeur/hauteur que l'image).

Dans la documentation, au sujet de PrinterPrintText, il me semble que la ligne:
Code:
Appel: ret% = dll_call6("PrinterPrintText",phnd%,txt%,opt1%,opt2%,opt3%,opt4%)
devrait être remplacée par (au vu des exemples donnés, qui fonctionnent):
Code:
Appel: ret% = dll_call6("PrinterPrintText",txt%,opt1%,opt2%,opt3%,opt4%,opt5%)
c'est sans doute un petit lapsus, mais ça trouble quand on expérimente...

Cela dit c'est une dll extrêmement intéressante pour moi, qui résout tous mes problèmes d'impression depuis Panoramic.
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyLun 28 Nov 2011 - 17:23

Exact pour la doc - je vais bien sûr actualiser dans ce sens.

Je suis content que cette DLL corresponde à tes besoins. Si d'autres aspects de l'impression manquent, n'hesite pas à me suggérer des extensions - je les étudierai avec attention.

Je démarre la réalisation de WinTextPrint en Delphi pour remplacer la version Visual Basic 4...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyLun 28 Nov 2011 - 18:18

Tant qu'à faire appel à une ressource externe, ce sera évidemment plus facile avec un exécutable qu'avec une dll (AMHA).
Si je comprends bien ce sera une sorte d'interface en clair avec les fonctions de la dll. En effet la syntaxe des commandes avec la dll est un peu... délicate.

Comme l'appétit vient en mangeant, les idées viendront rapidement avec l'utilisation, et je ne manquerai pas de t'en faire part et d'autres aussi sans doute (avec ta bénédiction), en tout cas d'ores et déjà les possibilités sont vastes et actuellement je ne vois pas trop ce qu'on peut faire de mieux.
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMar 29 Nov 2011 - 19:05

Je vais déménager. Et c'est pourquoi ma ligne internet sera coupée demain, pour une durée entre 10 et 15 jours. Mais je continue à travailler sur WinTextPrint en Delphi, et j'aurai bientôt un résultat montrable. Beaucoup de choses marchent déjà - ce qui reste à faire, c'est essentiellement l'impression des images (en cours) et l'impression des PDF (à suivre). Le reste marche déjà. Donc, à bientôt...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMar 29 Nov 2011 - 20:29

OK c'est noté. Mais ne perds pas tes billes en cours de route !
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMar 29 Nov 2011 - 23:45

Une dernière avant de ma coupure d'internet:

PrinterFunction code 7 dans PRINT.DLL peut maintenant imprimer indifféremment les BMP, ICO et JPG. Les GIF sont en préparation. La correction est mise en ligne dans la rubrique DLLs divers.

Et l'impression des mêmes types d'images fonctionne dans WinTextPrint en Delphi. Ca progresse...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMar 29 Nov 2011 - 23:55

Super Klaus, j'essaie tout ça dès demain, ça fait largement de quoi patienter.

Allez, tu as bien mérité tes 15 jours de vacances (?) ! Very Happy
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMer 30 Nov 2011 - 17:08

Encore plus fort: les GIF marchent aussi avec PrinterFunction code 7 de PRINT.DLL, tout comme dans la version Delphi de WinPrintText (WPT.EXE). Et tout est mis en ligne !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMer 30 Nov 2011 - 17:35

Vous me donnez envie, je crois que je vais tester ça aussi moi ... Smile

Juste 2 petites remarques de détail dans la doc, il y a 2/ 3 fautes et comme ce que tu fais est très pro, je pense que tu désireras les corriger.

sousligné à changer par souligne
milimètres à changer en millimètres


Dernière édition par Jicehel le Mer 30 Nov 2011 - 18:36, édité 1 fois
Revenir en haut Aller en bas
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMer 30 Nov 2011 - 18:33

tu pinailles jicehel, tu desirera à changer en tu desireras Very Happy
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMer 30 Nov 2011 - 18:36

Oui, mais bon, je ne suis pas capable non plus de faire des DLL comme Klaus sait le faire ... Smile
J'essaye d'avoir l'exigence que la qualité de son travail requiert, mais bon, j'ai quand même corrigé ma faute Smile Shocked
Revenir en haut Aller en bas
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMer 30 Nov 2011 - 19: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
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyMer 30 Nov 2011 - 21: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
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyJeu 1 Déc 2011 - 21: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
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyDim 1 Jan 2012 - 8: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
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyDim 1 Jan 2012 - 14: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
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyDim 1 Jan 2012 - 18: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
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyDim 1 Jan 2012 - 21: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
Klaus

Klaus


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyDim 1 Jan 2012 - 22: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
http://klauspanoramic.comxa.com/index.html
JL35




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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyDim 1 Jan 2012 - 23: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
Jack
Admin
Jack


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

DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 EmptyLun 2 Jan 2012 - 7: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
https://panoramic.1fr1.net
Contenu sponsorisé





DLL Print - Page 3 Empty
MessageSujet: Re: DLL Print   DLL Print - Page 3 Empty

Revenir en haut Aller en bas
 
DLL Print
Revenir en haut 
Page 3 sur 8Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8  Suivant
 Sujets similaires
-
» Prévisualisation dans PRINT.DLL
» KGF.dll: fonctions Print
» effacer des print ?
» imprimer avec Print.dll
» stretch_on et print

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: