Page 1 sur 1

Programmer une résolution d'imprimante.

Publié : jeu. 21/janv./2010 21:20
par cnormal
Bonjour,
Si c'est possible avec PureBasic, quel est le code complet à faire pour programmer automatiquement une résolution d'imprimante.
Par exemple: initialement mon imprimante par défaut à une basse résolution de 120 PPP, comment piloter automatiquement l'imprimante avec le programme pour avoir une plus haute résolution.

J'ai trouvé que ce programme pour avoir l'information de la résolution de l'imprimante mais pas pour piloter la résolution de l'imprimante.

PrinterDC.L = DefaultPrinter()
If PrinterDC
Debug "Horizontale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSX)) + " DPI"
Debug "Vertikale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSY)) + " DPI"
EndIf

Cordialement.

Re: Programmer une résolution d'imprimante.

Publié : jeu. 21/janv./2010 23:39
par Backup
t'as essayé s'il existe une Api SetDeviceCaps_() ??

Re: Programmer une résolution d'imprimante.

Publié : ven. 22/janv./2010 17:03
par kernadec
bonjour cnormal
comme vous, Je n'ai pas réussi.
Après avoir testé sans succès des code sources de "codearchiv".
Et ce code auquel j'ai ajouté en début quelques constantes de la structure DEVMODE
avec cette ligne de code et le paramètre de qualité d'impression, mais rien ????

Code : Tout sélectionner

devin(0)\dmPrintQuality = #DMRES_DRAFT    ; PrintQuality 
mon imprimante c'est "Canon IP4300" pour info..

Voila l'extrait de "codearchiv" :
cordialement

Code : Tout sélectionner

; German forum: 
; Author: Andreas 
; Date: 04. December 2002 
; OS: Windows 
; Demo: No 
#NULLPTR = 0 
;Constants For DEVMODE 
#CCHDEVICENAME = 32 
#CCHFORMNAME = 32 
;Constants For DocumentProperties 
#DM_MODIFY = 8 
#DM_COPY = 2 
#DM_IN_BUFFER = 8 ;DM_MODIFY 
#DM_OUT_BUFFER = 2 ;DM_COPY 
;Constants For dmOrientation 
#DMORIENT_PORTRAIT = 1 
#DMORIENT_LANDSCAPE = 2 
;Constants For dmPrintQuality 
#DMRES_DRAFT = (-1) 
#MRES_HIGH = (-4) 
#DMRES_LOW = (-2) 
#DMRES_MEDIUM = (-3) 
;Constants For dmTTOption 
#DMTT_BITMAP = 1 
#DMTT_DOWNLOAD = 2 
#DMTT_DOWNLOAD_OUTLINE = 4 
#DMTT_SUBDEV = 3 
;Constants For dmColor 
#DMCOLOR_COLOR = 2 
#DMCOLOR_MONOCHROME = 1 
;Constants For dmCollate 
#DMCOLLATE_FALSE = 0 
#DMCOLLATE_TRUE = 1 
;#DM_COLLATE = &H8000 
;Constants For dmDuplex 
;#DM_DUPLEX = &H1000& 
#DMDUP_HORIZONTAL = 3 
#DMDUP_SIMPLEX = 1 
#DMDUP_VERTICAL = 2 
 
 
;Standardrucker-Namen ermitteln 
STDPrinterName$ = Space(260) 
GetPrivateProfileString_("WINDOWS","DEVICE","", @STDPrintername$, 260, "Win.Ini") 
STDPrintername$ = StringField(STDPrintername$, 1,",") 
 
PrinterHandle.l = 0 
OpenPrinter_(StdPrintername$,@PrinterHandle.l,0) 
;MessageRequester("",Str(PrinterHandle),0) 
 
Dim DevIn.DEVMODE(0) 
Dim DevOut.DEVMODE(0) 
DocumentProperties_(0,Printerhandle,StdPrintername$,DevIn(0),DevOut(0),#DM_OUT_BUFFER|#DM_IN_BUFFER) 
ClosePrinter_(PrinterHandle) 
 
If DevIn(0)\dmOrientation = 1 
 MessageRequester("aktuelle Einstellung","Hochformat",0) 
ElseIf DevIn(0)\dmOrientation = 2 
 MessageRequester("aktuelle Einstellung","Querformat",0) 
EndIf 
 

devin(0)\dmPrintQuality = #DMRES_DRAFT    ; PrintQuality 



DevIn(0)\dmOrientation = 2;auf Querdruck setzen 
PrinterDC.l = CreateDC_("WINSPOOL",StdPrintername$,0,DevIn(0)) 
 
DocInf.DOCINFO 
DocInf\cbSize = SizeOf(DOCINFO) 
DocInf\lpszDocName = @"Mein Dok" 
DocInf\lpszOutput = #Null 
 
If StartDoc_(PrinterDC,@DocInf) > 0 
 If StartPage_(PrinterDC) > 0 
  TextOut_(PrinterDC,60,70,"Querdruck",9) 
  EndPage_(PrinterDC) 
  EndDoc_(PrinterDC) 
 EndIf 
EndIf 

Re: Programmer une résolution d'imprimante.

Publié : ven. 22/janv./2010 19:43
par Ulix
De mémoire 4 résolutions sont dispo :

#DMRES_HIGH : haute résolution
#DMRES_MEDIUM : normal
#DMRES_LOW : basse résolution
#DMRES_DRAFT : dite brouillon


Je reconnais que c'est la "le 5 lettre" a gérer :oops: . Depuis que l'on demande quelques améliorations !! :twisted:
Je te conseil d'utilisé une lib, pour ma part j'utilise : Printer_Lib, tu trouvera quasiment tous les instructions pour faire les impréssions.
Seul point noir : Uniquement sous Windows, a noter que les sources sont fournis cela vaut le coup d'oeil ! :wink:

Re: Programmer une résolution d'imprimante.

Publié : sam. 23/janv./2010 17:16
par cnormal
Grand merci pour vos réponses,
Je vais essayer sur tes conseils Printer_Lib que j'ai installé, (mais l'aide jointe est incomplète la page m'indique que "Navigation vers page Web annulée", il n'y a que les fonctions de commandes et il n'y a pas d'exemple concernant les commandes de résolution d'imprimante), j'aimerais un exemple de code pour activer les commande des constantes:
#DMRES_HIGH
#DMRES_MEDIUM
#DMRES_LOW
#DMRES_DRAFT

Re: Programmer une résolution d'imprimante.

Publié : dim. 24/janv./2010 12:10
par Ulix
Regarde dans l'aide a la fonction Print_OpenPrinter(), il y a la liste de toutes les options et constante a utilisé,
tu trouvera pour la façon d'utilisé la résolution ! :lol:

Dans les exemples, tu trouvera des codes pour mieux comprendre.

Dans : "Example01 OpenPrinter.pb", tu trouvera ce code :

Code : Tout sélectionner

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize="   + Str(#DMPAPER_A4)
If Print_OpenPrinter("",OPT$)
......
Modifie les lignes comme suit, pour rajouter la résolution :

Code : Tout sélectionner

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize="   + Str(#DMPAPER_A4)+ ","     (ici ajouter "+",")
OPT$+"PrintQuality="   + Str(#DMRES_HIGH)         (ici ajouter la ligne de la résolution) 
etc....
Voilà c'est relativement simple, :P et surtout n'hésite pas a regarde les sources, c'est très instructif ! :idea:

A+

Re: Programmer une résolution d'imprimante.

Publié : dim. 24/janv./2010 21:45
par cnormal
Merci pour l'indication du format sauf erreur dans le code, j'ai testé l'exemple ci-dessous. L'impression est correct, le texte se trouve bien avec les coordonnées X,Y en mm en Arial, l'imprimante en mode initial 720 x 720 DPI (Epson Stylus D92), ne passe pas en mode DRAFT (120 x 120 DPI) et inversement non plus.
L'aide du fichier Printer_Lib.chm s'affiche bien dans l'aide externe de l'IDE mais n'affiche pas les syntaxes et descritions. J'ai quand même réussi l'accès en le décompressant avec 7-Zip.

Code:

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize=" + Str(#DMPAPER_A4) + ","
OPT$+"Printquality="+Str(#DMRES_DRAFT)

If Print_OpenPrinter("",OPT$)
If Print_StartPrinting("Test")
Print_Font("Arial",12)
Print_SetUnits(#PRINT_MM)
Print_Text(20 ,15,"Valeurs: "+OPT$)

Print_StopPrinting()
Else
err$=Print_GetLastError()
MessageRequester("Print_StartPrinting()",err$,0)
EndIf
Else
err$=Print_GetLastError()
MessageRequester("Print_OpenPrinter()",err$,0)
EndIf