Bonjour,
et pb de PageHeight d'ailleurs.
J'imprime à l'aide de l'objet TPrinter.
Avant impression, je propose à mon utilisateur de sélectionner l'imprimante.
Quoiqu'il choisisse (c'est à dire l'imprimante par défaut ou une autre) je fait un
Ca semblait fonctionner jusqu'à aujourd'hui. Sauf que j'ai un client qui a une imprimante A3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Printer.PrinterIndex := n ;
Quand cette imprimante est l'imprimante par défaut (au sens Windows du terme) : pas de problème. L'impression se passe bien.
Mais si ce n'est pas l'imprimante par défaut, mon impression est tronquée.
J'ai commencé de comprendre ce qui se passe.
Je précise que je fait le
avant toute interrogation ou ordre à l'imprimante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Printer.PrinterIndex := n ;
Mais selon que l'imprimante est ou n'est pas l'imprimante par défaut, les Printer.PageWidth et PageHeight retrournées ne sont pas les même.
Les valeurs sont justes si l'imp A3 est l'imp par défaut.
Fausses quant l'imp A3 n'est pas l'imp par défaut.
A noter que, dans ce dernier cas, les valeurs retournées ne correspondant pas non plus à la laser A4 actuellement défini comme défaut - donc non seulement il ne retourne pas les valeurs de l'imprimante sélectionnées, mais ce ne sont pas non plus les paramètres de l'imprimante par défaut .
Pourtant, si je fait un GetDeviceCaps( Printer.handle, PHYSICALWIDTH ) ou GetDeviceCaps( Printer.handle, HORZSIZE ) , j'ai bien les données correspondant à la page A3.
Mais même en utlisant ces valeurs (à la place de PageWidth) dans mes calculs, l'impression est tronquée.
J'ai pensé à un pb de bac, mais l'impression se lance bien sur la page A3 (qui est bien le bac par défaut dans les propriétés du pilote).
Donc c'est bien la bonne imprimante et le bon bac qui sont sélectionnés, mais l'objet Printer renvoie des valeurs erronés.
Je pige pas ....
Quelqu'un a-t-il déjà eu ce pb ?
J'aimerais bien forcer le bac A3 par programmation, histoire de voir si ça règle le pb, mais je n'ai pas trouvé d'odre Delphi pour le faire.
Quelqu'un sait faire cela ?
Partager