Imprimante au format A3

Résolu
cs_jacques13 Messages postés 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 juin 2013 - 7 mars 2008 à 19:05
cs_jacques13 Messages postés 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 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

10 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 mars 2008 à 08:17
Bonjour,

Utilise la fonction DeviceCapabilities de la librairie winspool.drv de l'Api de Windows
Elle est faite pour çà .
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2008 à 12:06
Non, non ...


conventionnellement, plus la valeur est élevée, plus le format est petit


C'est un peu comme pour le calibrage des hameçonc et des plombs de chasse (divisions d'un "étalon")
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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és 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 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 ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ...).

Ce n'est pas évident ...
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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és 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 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.


Jacques13




 
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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".
cs_jacques13 Messages postés 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 juin 2013
9 mars 2008 à 11:26
C'est vrai que les formats supérieurs à A3 n'appraissent pas dans la liste des valeurs de PaperSize!


Je posais la question car, lorsque je fais tourner la routine ci-dessus, des valeurs exotiques apparaissent:

257  258  259  260  261  9  8  66  271  272  273  274  275  276  295  301  607  608  609  610  611  618  619  620  621  622  623  624  625  626  645  651

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és 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 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.
Rejoignez-nous