Problème gestion des marges sur papier

guiguisi Messages postés 30 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 juillet 2004 - 23 avril 2003 à 11:44
ludocam21 Messages postés 29 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 22 juin 2005 - 2 juin 2005 à 12:51
Je souhaite remplir un formaire avec des cases précises.
J'utilise l'objet printer, mais lorsque j'essai d'imprimer tout à droite (à moins de 1 cm), le code passe, mais ca n'apparait pas à l'impression.
J'ai essayé d'utiliser l'option "printer.width=12500" pour agrandir ma feuille, ma ca me fait un bug.
Soit j'ai oublié quelquechose dans mon code, soit je l'ai oublié dans VB6.
Merci de me venir en aide rapidement. :)

5 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
23 avril 2003 à 13:16
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Largeur_page_en_mm = (1440 / 567) * GetDeviceCaps(Printer.hdc, 110) / GetDeviceCaps(Printer.hdc, 88)
Marge_Gauche_en_mm = (1440 / 567) * GetDeviceCaps(Printer.hdc, 112) / GetDeviceCaps(Printer.hdc, 88)
Largeur_Imprimable_en_mm = GetDeviceCaps(Printer.hdc, 4)

Printer.ScaleMode = vbMillimeters

ensuite, tu testes si

Printer.TextWidth(Texte) <= Largeur_Imprimable_en_mm
0
guiguisi Messages postés 30 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 juillet 2004
24 avril 2003 à 09:50
Merci de ces renseignements. La comparaison finale me renvoie "vrai", mais je vois pas trop ce que ca teste.
En regardant sur le net, j'ai cru comprendre que "getdevcecaps" renvoi une valeur de l'affichage (écran)
Sinon, j'ai largeur_page=20.99 , marge_gauche=0.42 et larg_imp=197.
Please help me, je suis de plus en plus perdu et je sens que l'imprimante va passer par la fenetre. :sad)
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
24 avril 2003 à 11:14
Bonjour
CORRECTION :
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Largeur_page_en_cm = (1440 / 567) * GetDeviceCaps(Printer.hdc, 110) / GetDeviceCaps(Printer.hdc, 88)
Marge_Gauche_en_cm = (1440 / 567) * GetDeviceCaps(Printer.hdc, 112) / GetDeviceCaps(Printer.hdc, 88)
Largeur_Imprimable_en_cm = GetDeviceCaps(Printer.hdc, 4) / 10
Printer.ScaleMode = vbCentimeters

La fonction GetDeviceCaps renvoie des informations sur ce qu'est Capable de faire un périphérique (in english, device) qui est soit l'écran soit une imprimante.
Dans le bout de code que je t'ai donné, il s'agit de l'imprimante puisque le premier paramètre passé à la fonction est Printer.hDC (= contexte de l'imprimante)
Il y a 2 petites erreurs dans mon code :
largeur_page=20.99 cm
marge_gauche=0.42 cm
Largeur_Imprimable = 19,7 cm
La marge droite vaut donc :20,99 - 0,42 - 19,7 20,99 - 20,12 0,87 cm
tu ne peux donc pas écrire à plus de 20,12 cm du bord gauche de la feuille
Autrement dit : Printer.CurrentX doit être < 20,12

Si Printer.CurrentX + Printer.TextWidth(Texte) <= Largeur_Imprimable est vrai, ça veut dire que ton texte sera imprimé sinon il sera coupé.

Si tu utilises Printer.Print (tout seul ou avec Printer.CurrentX = 0), tu commences à imprimer à 0,42 cm du bord gauche de la feuille.

Printer.TextWidth(Texte) <= Largeur_Imprimable est vrai veut dire que ton texte tient dans la page si tu commences à écrire à gauche de la page.
0
guiguisi Messages postés 30 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 juillet 2004
24 avril 2003 à 11:54
Merci beaucoup, et désolé pour le dérangement :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ludocam21 Messages postés 29 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 22 juin 2005
2 juin 2005 à 12:51
Bonjour,
je pense que vous pouvez m'aider d'après ce dont vous parlez. j'ai fait un bouton qui me permet d'imprimer le contenu d'une textbox, et ça marche, le probleme c'est qua l'impression ça me coupe une partie du texte a droite.
je pense qu'il y a une classe d'impression printer. "quelque chose" qui peut gérer ça mais je sais pas quoi.
si vous pouvez m'aider ce serait vraiment sympa.
ludocam21@hotmail.fr
0
Rejoignez-nous