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.
Programmer une résolution d'imprimante.
Re: Programmer une résolution d'imprimante.
t'as essayé s'il existe une Api SetDeviceCaps_() ??
Re: Programmer une résolution d'imprimante.
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 ????
mon imprimante c'est "Canon IP4300" pour info..
Voila l'extrait de "codearchiv" :
cordialement
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
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.
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
. Depuis que l'on demande quelques améliorations !!
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 !
#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


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 !

Re: Programmer une résolution d'imprimante.
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
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.
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 !
Dans les exemples, tu trouvera des codes pour mieux comprendre.
Dans : "Example01 OpenPrinter.pb", tu trouvera ce code :
Modifie les lignes comme suit, pour rajouter la résolution :
Voilà c'est relativement simple,
et surtout n'hésite pas a regarde les sources, c'est très instructif ! 
A+
tu trouvera pour la façon d'utilisé la résolution !

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$)
......
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....


A+
Re: Programmer une résolution d'imprimante.
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
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