Click to See Complete Forum and Search --> : printout problem


vanashree
May 29th, 2001, 05:52 AM
while taking printouts with printform method on a laser printer. the ms-flexgrid with the contents are displayed completely black.

elvagonumero1
October 11th, 2006, 07:14 AM
I have the same problem... I'm still looking for an answer. Please let me know if you find the way to solve it

... Well, if you still there

Shuja Ali
October 11th, 2006, 07:25 AM
I have the same problem... I'm still looking for an answer. Please let me know if you find the way to solve it

... Well, if you still there
Please don't post the same question in multiple threads. This way you are not helping yourself.

Twodogs
October 11th, 2006, 05:50 PM
I'm in the process of doing this myself - this is working, but not for maximised forms (ie this is still a work in progress - see the original links for further clarification)


' Print an image of the form
' Code Source:
' http://vb-helper.com/howto_print_picturebox.html
' http://www.codeproject.com/system/keyboard.asp

Private Sub PrintPictureBoxImage( _
ByVal oForm As Form, _
ByVal picHidden As PictureBox, _
Optional ByVal fit_to_printer = False)

Dim FormPosition As POINTAPI
' NB 11 Oct 2006 - Use oForm.WindowState to figure out if the form is maximised (WindowState = 2)
' or is not maximised.

' If oForm.WindowState = 2 then ' form is maximised

' else
' and put the endif somewhere.


' On Error Resume Next
On Error GoTo ErrTrap
Screen.MousePointer = vbHourglass

' '' Copy the form's image to the clipboard by sending an 'Alt' key press.
Clipboard.Clear
keybd_event VK_MENU, 0, 0, 0
'keybd_event VK_MENU, &H45, VK_SNAPSHOT, 0
DoEvents

' Press Print Scrn.
' keybd_event VK_SNAPSHOT, 1, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
DoEvents

'' Release Alt.
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
DoEvents
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
DoEvents

' Copy the image into the hidden PictureBox:
'need to reference the clipboard first
Dim X As Boolean
X = Clipboard.GetFormat(vbCFBitmap)
DoEvents
On Error Resume Next
picHidden.Picture = Clipboard.GetData(vbCFBitmap)
DoEvents
On Error GoTo 0
' Get the form's location on the screen (in pixels)
FormPosition.X = 0
FormPosition.Y = 0
ClientToScreen oForm.hwnd, FormPosition

Dim ScaleModeX As Single, ScaleModeY As Single

' Convert into the printer's scale mode.
ScaleModeX = oForm.ScaleX(FormPosition.X, vbPixels, picHidden.ScaleMode)
ScaleModeY = oForm.ScaleY(FormPosition.Y, vbPixels, picHidden.ScaleMode)
If Err <> 0 Then
' the main form is an MDIForm. For some reason ScaleX/ScaleY are not supported
' in MDIForms. So just print the whole screen
ScaleModeX = 0
ScaleModeY = 0
Err.Clear
End If

' We've screen grabbed the entire screen. Now clip out and print only the active form
Dim ClipX As Single, ClipY As Single, ClipWidth As Single, ClipHeight As Single

ClipX = ScaleModeX - 40 ' Magic number to include form left side border
ClipY = ScaleModeY - 330 ' Magic number to include the Title bar into the clipped region
ClipWidth = oForm.Width 'oForm.ScaleX(oForm.Width, vbPixels, picHidden.ScaleMode)
ClipHeight = oForm.Height ' oForm.ScaleY(oForm.Height, vbPixels, picHidden.ScaleMode)

Dim LeftMargin As Single, TopMargin As Single, RightMargin As Single
LeftMargin = 1440 / 3 ' 1440 Twips = 1 inch
RightMargin = LeftMargin
TopMargin = 1440 / 3

' Print image to printer:

Printer.Orientation = vbPRORLandscape ' 2

Printer.Font.Size = 10
Printer.CurrentY = TopMargin
Printer.CurrentX = LeftMargin
' Printer.Print "Date: " & Now
' Printer.CurrentX = LeftMargin
' 'Printer.Print "Form: " & oForm.Caption & " (" & oForm.Name & ")"
' Printer.CurrentX = LeftMargin
' 'Printer.Print "App Version: " & gsAppVersion
' Printer.CurrentX = LeftMargin
' 'Printer.Print "Server: " & gsServer
' Printer.CurrentX = LeftMargin
' 'Printer.Print "Database: " & gsDatabase
' Printer.CurrentX = LeftMargin
' 'Printer.Print "Database Version: " & gsDBVersion

Dim PrintX As Single, PrintY As Single, PrintWidth As Single, PrintHeight As Single
If (oForm.Width + LeftMargin + RightMargin) > Printer.Width Then
' Need to scale down the image to fit within the side margins
PrintX = LeftMargin
PrintY = TopMargin + Printer.CurrentY ' Print to top of page, allowing a small margin
Dim AspectRatio As Single
PrintWidth = (Printer.Width - LeftMargin - RightMargin) ' Adjust width to printer's page width
AspectRatio = oForm.Width / PrintWidth
PrintHeight = oForm.Height / AspectRatio
Else
' No need to scale if the form width is narrower than the area within the side margins
'PrintX = (Printer.Width - oForm.Width - LeftMargin) / 2 ' centre image horizontally on page
PrintX = LeftMargin ' align left
PrintY = (TopMargin / 2) + Printer.CurrentY ' Print after the text, allowing 1/2 a "top margin" amount of space
PrintWidth = oForm.Width
PrintHeight = oForm.Height
End If

Printer.PaintPicture picHidden.Picture, PrintX, PrintY, PrintWidth, PrintHeight, ClipX, ClipY, ClipWidth, ClipHeight
Printer.EndDoc
Screen.MousePointer = vbDefault
If Err <> 0 Then
MsgBox ("Error while printing (" & Err.Number & "): " & Err.Description)
End If
On Error GoTo 0
Exit Sub
ErrTrap:
MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
On Error GoTo 0

End Sub

dglienna
October 11th, 2006, 06:55 PM
I used to have to run this DOS command back in the Laser Printer days. Produced grey-scale automatically from color screen prints.
Just loading it before my app started was good enough.


Loads a program that can print graphics.

GRAPHICS [type] [[drive:][path]filename] [/R] [/B] [/LCD]
[/PRINTBOX:STD | /PRINTBOX:LCD]

type Specifies a printer type (see User's Guide and Reference).
[drive:][path]filename
Specifies the file containing information on supported printers.
/R Prints white on black as seen on the screen.
/B Prints the background in color for COLOR4 and COLOR8 printers.
/LCD Prints using LCD aspect ratio.
/PRINTBOX:STD | /PRINTBOX:LCD
Specifies the print-box size, either STD or LCD.