cs_jacques13
Messages postés252Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention29 juin 2013
-
7 mars 2008 à 19:05
cs_jacques13
Messages postés252Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention29 juin 2013
-
9 mars 2008 à 19:06
Bonjour,
Je bute sur un problème qui doit être vraiment élémentaire, mais j'avoue que je manque d'inspiration:
Comment détecter si l'imprimante par défaut supporte le format A3?
Merci pour votre aide.
Jacques13
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 mars 2008 à 20:57
Ah oui (j'oubliais) ...
Il y a plus embêtant encore :
L'utilisateur final peut très bien, avec certaines imprimantes et leur pilote, décider de configurer une imprimante pouvant imprimer en couleur, de telle sorte qu'elle imprime en ... monochrome !!!
cs_jacques13
Messages postés252Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention29 juin 2013 8 mars 2008 à 15:59
Bonjour jmfMarques,
Une fois de plus tu m'as bien orienté et je t'en remercie!
Puis-je abuser?
Grâce à toi j'ai déniché ce bout de code qui correspond à mes attentes:
Option Explicit
Const DC_PAPERS = 2
Private Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, lpDevMode As Any) As Long
Private Sub Form_Load()
Dim Ret As Long, PaperSizes() As Integer
Ret = DeviceCapabilities(Printer.DeviceName, ByVal 0&, DC_PAPERS, ByVal 0&, ByVal 0&)
ReDim PaperSizes(1 To Ret) As Integer
Call DeviceCapabilities(Printer.DeviceName, ByVal 0&, DC_PAPERS, PaperSizes(1), ByVal 0&)
Me.AutoRedraw = True
Me.Print "Supported papersizes:"
Dim Cnt As Long
For Cnt = 1 To Ret
Me.Print Str$(PaperSizes(Cnt))
Next
End Sub
Est-il possible de le modifier de telle sorte qu'il m'indique si l'imprimante courante est une imprimante couleur?
Jacques13
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 mars 2008 à 20:51
Bonsoir,
C'est un peu plus difficile car dépendant du pilote de ton imprimante et ... de sa totale compatibilité Windows...
Je te suggère alors une méthode :
Gestion d'erreur sur l'utilisation de la propriété ColorMode de l'objet Printer (ouvre ton aide en ligne sur le mot ColorMode et lis tout jusqu'au bout...tout en étant conscient de ce que tu n'obtiendras pas toujours un message d'erreur en donnant la valeur 2 ...).
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 8 mars 2008 à 21:08
Autre possibilité :
ouvrir et lire la clé de la BDR :
HKEY_CURRENT_USER\Printers\Settings
Y rechercher ton imprimante par défaut (propriété DeviceName de l'objet Printer sous VB6)
Mais alors là : dur dur ! (en Reg_Binary) !!!!! pour y voir ses ajustements en cours et y déceler si elle est ajustée pour imprimer ou non en couleur ...
cs_jacques13
Messages postés252Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention29 juin 2013 8 mars 2008 à 21:15
Si je comprends bien, tu me découragerais plutôt d'explorer la voie de la détection de la couleur.
Je te fais confiance.
Pour revenir au problème des formats de papier, je me posais la question de savoir si l'imprimante courante était également capable d'imprimer en A2, A1 ou A0.Pour commander l'impression (par exemple) en A0, on n'utilise pas la propriété Printer.PaperSize qui ne possède pas de valeur correspondant à ce format mais plutôt: Printer.Height 47040: Printer.Width 66767.
Résumons:en mode détection, si on récupère les valeurs 8 ou 9 pour la propriété PaperSize, on sait que l'imprimante accepte les formats A3 et A4; quelles valeurs m'indiqueront son aptitude à gérer les formats A2, A1, et A0?
Je me rends compte que mon exposé est mal tourné, mais je suis sûr que tu as compris le sens de ma question.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 mars 2008 à 08:23
Bien que je n'aie pas une telle imprimante pour le vérifier, il me semble que Windows n'est pas tout seul capable de reconnaître une habilité supérieure au format A3 (valeur 8).
Je choisirais personnellement dans un tel cas de figure le mécanisme suivant :
- un programme annexe forçant l'utilisateur à déclarer les imprimantes susceptibles d'être utilisées par ton application ====>> écriture d'un fichier texte contenant les spécifications qui intéressent ton appli, pour chaque imprimante ainsi "déclarée"
- depuis ton appli : lecture du fichier texte pour s'assurer de ce que l'imprimante a bien les spécifications requises et rejet éventuel avec message (rejet si l'imprimante n'est pas ainsi déclarée ou que, l'étant, elle "ne fait pas l'affaire".
Notamment toutes ces valeurs supérieures à 256 (pourtant borne supérieure relatée dans l'aide de VB6);
Peut-être que dans le tas, une correspond au A0? Peut-être existe-t-il une formule permettant de passer de l'une à l'autre?
cs_jacques13
Messages postés252Date d'inscriptionmardi 3 juin 2003StatutMembreDernière intervention29 juin 2013 9 mars 2008 à 19:06
La meilleure solution est sans doute de détecter les dimensions maximales d'impression:
Private Const DC_MAXEXTENT = 5
Private Type Points
x As Integer
y As Integer
End Type
Dim pt As Points
result = DeviceCapabilities(myPrinter, vbNull, DC_MAXEXTENT, ByVal 0&, ByVal 0&)
pt = DeviceCapabilities_pt(myPrinter, vbNull, DC_MAXEXTENT, ByVal 0&, ByVal 0&)
nPPIx = (pt.x / 6) * 2
nPPIy = (pt.y / 4) * 2
Text1.Text = Str$(nPPIx) + " " + Str$(nPPIy)
qui fournit 720 2921 pour du A4 et 3557 16384 pour du A0.