Problème de marging dans un formulaire d'impression [Résolu]

Signaler
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Attila54
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Bonjour,
J'ai un problème de marging avec un formulaire d'impression
voici le detail de ma classimpression :

Imports System.Drawing.Printing
Imports System.Runtime.InteropServices
 
Public Class ClassImpression
 
    Inherits PrintDocument
 
    Public Sub SetDocument(ByVal feuille As Control)
 
        Const SRCCOPY As Integer = &HCC0020 ' pour copier la source
        Dim controlGraphics As Graphics = feuille.CreateGraphics   ' graphique de la feuille à imprimer
        Dim controlSize As Size = feuille.ClientSize ' taille de la forme à copier
        Buffer = New Bitmap(controlSize.Width + 204, controlSize.Height + 312) ' buffer contenant la feuille à copier 
        Dim bufferGraphics As Graphics = Graphics.FromImage(Buffer)
 
        Dim bufferHdc As IntPtr = bufferGraphics.GetHdc   'hdc de la form destinée à l'impression
        Dim controlHdc As IntPtr = controlGraphics.GetHdc
        '*** DESSINE LE FORMULAIRE DANS LA PICTURE EN LE CENTRANT
        NativeMethods.StretchBlt(bufferHdc, 102, 156, controlSize.Width, controlSize.Height, controlHdc, 0, 0, controlSize.Width, controlSize.Height, SRCCOPY)
        bufferGraphics.ReleaseHdc(bufferHdc)
        controlGraphics.ReleaseHdc(controlHdc)
 
    End Sub
 
    Public Sub Imprimeforme()
        Using printDialogue As New PrintDialog()
            printDialogue.Document = Me
            If printDialogue.ShowDialog = DialogResult.OK Then
                printDialogue.PrinterSettings.DefaultPageSettings.PaperSize = printDialogue.PrinterSettings.PaperSizes.Item(6)    'dimensions pour A4
                Me.Print()
            End If
        End Using
    End Sub
 
    Protected Overrides Sub OnPrintPage(ByVal e As System.Drawing.Printing.PrintPageEventArgs)
 
        e.Graphics.DrawImage(buffer, 0, 0) ' impression proprement dite
        e.HasMorePages = False ' document une seule page
 
    End Sub
 
End Class


et voici le resultat du print :



ce n'est peut être pas flagrand faute de repères mais en gros, j'ai facilement 4 cm de marges de chaque cote de l'impression et moi, je voudrais bien pouvoir imprimer quasiment en pleine page A4 (0.5 a 1 cm pour les marges)

J'ai cherché mais je ne vois rien dans le classimpresion me permettant de modifier cet etat de fait.

Serait je passé a cote ou y aurait il une solution alternative ?
Merci bien
A voir également:

18 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Bonjour,
Tu utilises au bout du compte une fonction de l'Api de Windows.
Le 2ème et le 3ème paramètre de cette fonction sont l(abscisse et l'ordonnée du "rectangle" de destination.
Et toi, tu leur a donné les valeurs 102 pixels et 156 pixels
Et tu t'étonnes ?



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Pour ton info, je viens de calculer sur ma machine ce que font 102 pixels ===>> 2.698753 cms.
Ajoute à cela la marge par défaut de ton imprimante (en fonction de ses performances) et tu les a, tes 4 cms, pardi.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

bon, probleme regle en changeant de moniteur et avec un peu de GDI+ ...... la je me sens un peu comment dire ..... dans un grand moment de solitude ...... avec cette histoire de résolution
Merci a toi pour l'aide et la disponibilité
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

oups je me suis trompé de section
merci a celui qui voudra bien déplacer ce post dans la section adéquate
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

bonjour ucfoutu
oui effectivement, si je reduis les 102 et 156 pixels a une valeur bien inférieure, j'ai maintenant des marges tout a fait correctes. Je te remercie pour ton information.

Par contre chose etrange, je ne peux absolument pas redimensionner mon formulaire en hauteur. Il reste desesperement bloqué a 788 et aucune propriete ne m'indique que cette taille soit bloquée. Je pensais au controlsize.height mais ce n'est pas cela
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Relis mon dernier message. Il te parle également de l'imprimante elle-même, de ses propres paramètres (ceux que tu peux tripoter) et de ses propres performances dans cette flexibilité.
Tu peux peux modifier autant que tu veux les marges par code ===>> sans aucun effet sur le matériel lui-même si ses marges sont plus grandes.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Attends un peu : qu'entends-tu exactement par
je ne peux absolument pas redimensionner mon formulaire en hauteur
?
Car s'il s'agit de la hauteur de la nouvelle image et non de la marge supérieure, c'est encore différent et c'est dans ton controlSize.Height que tout se passe.

Et je vois que tu lui ajoutes 312 pixels !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Je ne suis par ailleurs pas du tout VB.Netiste, mais demeure étonné de ce que tu utilises au bout du compte une fonction de l'API de Windows.
Es-tu certain de ce que VB.Net ne t'offre pas du plus facile ?
J'irais à ta place faire un tour là ===>>
Tapez le texte de l'url ici.
Car j'ai bien l'impression que ... Oui !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

re bonjour ucfoutu
mon inexperience m'a surement conduit a utiliser des le depart une methode pas vraiment adaptée j'en conviens.
Je regarde le lien de la msdn que tu me donnes avec attention.

Par contre, même si je change le 312 en, par exemple 12 ou 20 cela ne me permet pas de changer d'un iota la hauteur de mon formulaire.
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

en ce qui concerne l'imprimante, j'ai regardé comme suggéré et je pense que du coté des marges ce doit être bon.
Ce que je n'integre pas c'est que je ne puisse pas modifier la hauteur de mon form meme par la propriete size.
En largeur cela fonctionne et les marges sont bonnes.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Va d'abord lire le lien.
Je ne reviendrai avec toi que si tu reste avec l'Api de Windows et te demanderai alors des précisions très claires sur les tenants et aboutissants en matière de redimensionnement de ton image. Ca, je saurais puisque non plus VB.Net mais API de Windows).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

Que si je reste avec l'API ou que si je passe par un autre moyen ? je me perds la
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

je resterai avec l'api de windows oui
pour l'instant je lis le graphics Drawimage Method
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
217
Fais tout ton possible pour ne pas passer par l'API ! Non pas que l'on ne pourrait pas régler le problème, mais parce que tu t'éloignes ainsi considérablement de l'esprit de VB.Net !

Je pense que le premier VB.Nettiste qui passera par là te le criera haut et fort.
Commence à lire le lien que je t'ai donné !
Attends au besoin l'intervention d'un VB.Nettiste !
Ce ne sera qu'en toute dernière extrémité, (si vraiment aucune aide d'un VB.Nettiste) que je te guiderai pour un meilleur emploi de l'API.
Je ne veux pas me fâcher avec les quelques excellents VB.Nettistes qui interviennent sur ce forum, en t'encourageant à utiliser une fonction de l'API de Windows


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

daccord je suis pret a suivre ton conseil même si cela doit me conduire a tout refaire le formulaire d'impression
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

j'ai pas mal potassé la documentation mais quand même je viens de m'apercevoir d'un truc que je dois exposer :
- je fais un nouveau projet avec un form appelé form1 vierge de tout
- je veux redimensionner le form1 qui est a 300*300 par defaut

ma hauteur est automatiquement bloquée a 788 quoi que je fasse

Le code ne peut pas etre plus vierge
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
End Class


Je suis quand même bien bloqué a 788 API ou pas ...... et ca je ne le comprends pas
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

En fait, je m'apercois que le whith et le height max sont exactement superieurs de 20 pixels a ma resolution d'ecran.

Je continue a chercher, j'ai trouvé un code GDI+ qui pourrait peut être être bien
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

bon je n'ai plus qu'a changer d'ecran car je suis a ma resolution max ..... dommage car l'appli est utilisée sur un moniteur a resolution plus elevée.
Je continue a chercher et je reviens