Home All Groups Group Topic Archive Search About

Printing using margins

Author
3 Feb 2006 11:27 PM
tm
I am trying to print a form using the following code, everything works fine
but the margins are not acted upon. What I am I doing wrong?



Private Sub CaptureScreen()
        Dim myGraphics As Graphics = Me.CreateGraphics()
        Dim s As Size = Me.Size
        memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
        Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
        memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
End Sub



Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles
printDocument1.PrintPage

        Dim margins As New Margins(0, 0, 600, 0)
        printDocument1.DefaultPageSettings.Margins = margins
        e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub

Author
4 Feb 2006 6:54 PM
Ron Allen
tm,
    You didn't say which version of the framework you are using.  For 1.x
you will need to compensate for the 'hard margins' on the printer by
PInvoking GetDeviceCaps to get the margins.  Also you won't be able to print
except for inside those margins as the printer isn't capable of printing
there.  Except for some very high end printers most aren't capable of
printing to the edge of the paper.
    You can look for GetHardMargins in this newsgroup or in
microsoft.public.dotnet.framework.drawing to find some code to get the
actual printer margin values.  If you are using FW 2.0 you can use the
properties of the PrintDocument to find the margins.

Ron Allen
Show quoteHide quote
"tm" <tb***@cwnet.com> wrote in message
news:%23OdhplRKGHA.648@TK2MSFTNGP14.phx.gbl...
>I am trying to print a form using the following code, everything works fine
> but the margins are not acted upon. What I am I doing wrong?
>
>
>
> Private Sub CaptureScreen()
>        Dim myGraphics As Graphics = Me.CreateGraphics()
>        Dim s As Size = Me.Size
>        memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
>        Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
>        memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0,
> s)
> End Sub
>
>
>
> Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
>       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles
> printDocument1.PrintPage
>
>        Dim margins As New Margins(0, 0, 600, 0)
>        printDocument1.DefaultPageSettings.Margins = margins
>        e.Graphics.DrawImage(memoryImage, 0, 0)
>
> End Sub
>
>
>
Author
5 Feb 2006 12:32 AM
tm
Ron,

I am using Framework 2.0

I have tried searching "GetHardMargins " with no luck.
If I add the following to my sub printDocument1_PrintPage
I do see my margins settings, but this just proves that I can
set and read back the PageSetupDialog1 information. It
seems that the info is not getting back to the printer.
What ties the PageSetupDialog to the system default printer?

With PageSetupDialog1

    Dim leftMargin As Single = .PageSettings.Margins.Left

    Dim rightMargin As Single = .PageSettings.Margins.Right

    Dim topMargin As Single = .PageSettings.Margins.Top

    Dim BottomMargin As Single = .PageSettings.Margins.Bottom

End With



tom
Author
5 Feb 2006 2:46 PM
Dennis
You can get the printable page size from the PrintPageEventArgs.PageBounds 
which is passed to the PrintPage Event.


--
Dennis in Houston


Show quoteHide quote
"tm" wrote:

> Ron,
>
> I am using Framework 2.0
>
> I have tried searching "GetHardMargins " with no luck.
> If I add the following to my sub printDocument1_PrintPage
> I do see my margins settings, but this just proves that I can
> set and read back the PageSetupDialog1 information. It
> seems that the info is not getting back to the printer.
> What ties the PageSetupDialog to the system default printer?
>
> With PageSetupDialog1
>
>     Dim leftMargin As Single = .PageSettings.Margins.Left
>
>     Dim rightMargin As Single = .PageSettings.Margins.Right
>
>     Dim topMargin As Single = .PageSettings.Margins.Top
>
>     Dim BottomMargin As Single = .PageSettings.Margins.Bottom
>
> End With
>
>
>
> tom
>
>
>
Author
5 Feb 2006 3:58 PM
tm
Dennis,

I capture the image in the CaptureScreen sub.

What I want to do is use Margins to begin printing
6 inches down from the top. But the default printer
seems not to see the new margins I set in the
printDocument1 event and continus to print
at the top.

If you have any suggestions of what I am doing
wrong I would appreciate your feed back.

tom


Private Sub CaptureScreen()
        Dim myGraphics As Graphics = Me.CreateGraphics()
        Dim s As Size = Me.Size
        memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
        Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
        memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
End Sub


Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
      ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
      printDocument1.PrintPage

        Dim margins As New Margins(0, 0, 600, 0)
        printDocument1.DefaultPageSettings.Margins = margins
        e.Graphics.DrawImage(memoryImage, 0, 0)

End Sub
Author
5 Feb 2006 11:26 PM
Dennis
You are drawing to the page graphics object and you need to use the point for
the drawing to start.  If you want the drawing to be 6 inches from the top of
the paper and 2 inches from the left side of the paper, use

e.Graphics.DrawImage(memoryImage, 200, 600).

The margins have nothing to do with it.


--
Dennis in Houston


Show quoteHide quote
"tm" wrote:

> Dennis,
>
> I capture the image in the CaptureScreen sub.
>
> What I want to do is use Margins to begin printing
> 6 inches down from the top. But the default printer
> seems not to see the new margins I set in the
> printDocument1 event and continus to print
> at the top.
>
> If you have any suggestions of what I am doing
> wrong I would appreciate your feed back.
>
> tom
>
>
> Private Sub CaptureScreen()
>         Dim myGraphics As Graphics = Me.CreateGraphics()
>         Dim s As Size = Me.Size
>         memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
>         Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
>         memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
> End Sub
>
>
>  Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
>       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
>       printDocument1.PrintPage
>
>         Dim margins As New Margins(0, 0, 600, 0)
>         printDocument1.DefaultPageSettings.Margins = margins
>         e.Graphics.DrawImage(memoryImage, 0, 0)
>
>  End Sub
>
>
>
Author
6 Feb 2006 12:25 AM
tm
Thanks Dennis, I have been working on this for a week.

Now that I can print at the bottom I have another question,
is it possible to do two CaptureScreen() and send one two
print at the top and the other to print at the bottom.

Or prevent the form feed from ejecting the paper which would
allow printing on top then print at bottom then eject the paper.

tom





Show quoteHide quote
"Dennis" <Den***@discussions.microsoft.com> wrote in message
news:50DCC4F3-180C-44BC-8577-D0D71ACEA898@microsoft.com...
> You are drawing to the page graphics object and you need to use the point
> for
> the drawing to start.  If you want the drawing to be 6 inches from the top
> of
> the paper and 2 inches from the left side of the paper, use
>
> e.Graphics.DrawImage(memoryImage, 200, 600).
>
> The margins have nothing to do with it.
>
>
> --
> Dennis in Houston
>
>
> "tm" wrote:
>
>> Dennis,
>>
>> I capture the image in the CaptureScreen sub.
>>
>> What I want to do is use Margins to begin printing
>> 6 inches down from the top. But the default printer
>> seems not to see the new margins I set in the
>> printDocument1 event and continus to print
>> at the top.
>>
>> If you have any suggestions of what I am doing
>> wrong I would appreciate your feed back.
>>
>> tom
>>
>>
>> Private Sub CaptureScreen()
>>         Dim myGraphics As Graphics = Me.CreateGraphics()
>>         Dim s As Size = Me.Size
>>         memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
>>         Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
>>         memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0,
>> s)
>> End Sub
>>
>>
>>  Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
>>       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
>>       printDocument1.PrintPage
>>
>>         Dim margins As New Margins(0, 0, 600, 0)
>>         printDocument1.DefaultPageSettings.Margins = margins
>>         e.Graphics.DrawImage(memoryImage, 0, 0)
>>
>>  End Sub
>>
>>
>>
Author
7 Feb 2006 1:25 AM
Dennis
You can print as many images as you want wherever you want, even overlapping
so long as you do it before exiting the routine.  If you want to change
pages, just set the PrintPageEventArgs.HasMorePages = True and the PrintPages
sub will be called again.  You can use a static variable in the sub to keep
track of which page you are on.

Dennis in Houston


Show quoteHide quote
"tm" wrote:

> Thanks Dennis, I have been working on this for a week.
>
> Now that I can print at the bottom I have another question,
> is it possible to do two CaptureScreen() and send one two
> print at the top and the other to print at the bottom.
>
> Or prevent the form feed from ejecting the paper which would
> allow printing on top then print at bottom then eject the paper.
>
> tom
>
>
>
>
>
> "Dennis" <Den***@discussions.microsoft.com> wrote in message
> news:50DCC4F3-180C-44BC-8577-D0D71ACEA898@microsoft.com...
> > You are drawing to the page graphics object and you need to use the point
> > for
> > the drawing to start.  If you want the drawing to be 6 inches from the top
> > of
> > the paper and 2 inches from the left side of the paper, use
> >
> > e.Graphics.DrawImage(memoryImage, 200, 600).
> >
> > The margins have nothing to do with it.
> >
> >
> > --
> > Dennis in Houston
> >
> >
> > "tm" wrote:
> >
> >> Dennis,
> >>
> >> I capture the image in the CaptureScreen sub.
> >>
> >> What I want to do is use Margins to begin printing
> >> 6 inches down from the top. But the default printer
> >> seems not to see the new margins I set in the
> >> printDocument1 event and continus to print
> >> at the top.
> >>
> >> If you have any suggestions of what I am doing
> >> wrong I would appreciate your feed back.
> >>
> >> tom
> >>
> >>
> >> Private Sub CaptureScreen()
> >>         Dim myGraphics As Graphics = Me.CreateGraphics()
> >>         Dim s As Size = Me.Size
> >>         memoryImage = New Bitmap(s.Width, s.Height, myGraphics)
> >>         Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
> >>         memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0,
> >> s)
> >> End Sub
> >>
> >>
> >>  Private Sub printDocument1_PrintPage(ByVal sender As System.Object, _
> >>       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
> >>       printDocument1.PrintPage
> >>
> >>         Dim margins As New Margins(0, 0, 600, 0)
> >>         printDocument1.DefaultPageSettings.Margins = margins
> >>         e.Graphics.DrawImage(memoryImage, 0, 0)
> >>
> >>  End Sub
> >>
> >>
> >>
>
>
>