Tools Links Login

Cheating the Printer

Why mess around with the printer object if you don't have to? In my example, I print the contents of a richtextbox control to the printer with only a couple of lines of code. PERFECTLY formatted. Readily applies to just about any control or string, though.

Original Author: Jay Kreusch

Side Effects

Sometimes displays the splash screen of another program or a print dialog box

API Declarations

'Used for the shell printing
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal _
lpDirectory As String, ByVal nShowCmd As Long) As Long
'Used to come up with the temp file directory
Private Declare Function GetTempPath Lib "kernel32" _
Alias "GetTempPathA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
'used to come up with the temp file name
Private Declare Function GetTempFileName Lib "kernel32" _
Alias "GetTempFileNameA" (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long

Code

'All you need to provide is a prefix if desired, and the file extention
Private Function CreateTempFile(sPrefix As String, sSuffix As String) As String
  Dim sTmpPath As String * 512
  Dim sTmpName As String * 576
  Dim nRet As Long
  'Some API and string manipulation to get the temp file created
  nRet = GetTempPath(512, sTmpPath)
  If (nRet > 0 And nRet < 512) Then
   nRet = GetTempFileName(sTmpPath, sPrefix, 0, sTmpName)
   If nRet <> 0 Then
     sTmpName = Left$(sTmpName, _
      InStr(sTmpName, vbNullChar) - 1)
      CreateTempFile = Left(Trim(sTmpName), Len(Trim(sTmpName)) - 3) & sSuffix
   End If
  End If
End Function
Private Sub Command1_Click()
  Dim sTmpFile As String
  Dim sMsg As String
  Dim hFile As Long
  'We're trying to print a richtextbox, so give it something to name
  'it by, and make sure you set the extention to rtf.
  'You could print a textbox by using txt, etc.
  sTmpFile = CreateTempFile("jTmp", "rtf")
  
  'Gets the next available open number
  hFile = FreeFile
  'open the file and give it the textRTF of the richtextbox
  'if you don't want to use boxed, you could just pass a string here
  Open sTmpFile For Binary As hFile
   Put #hFile, , RichTextBox1.TextRTF
  Close hFile
  
  'shell print it
  Call ShellExecute(0&, "Print", sTmpFile, vbNullString, vbNullString, vbHide)
  
  'delete it.
  Kill sTmpFile
End Sub

About this post

Posted: 2002-06-01
By: ArchiveBot
Viewed: 89 times

Categories

Visual Basic 6

Attachments

No attachments for this post


Loading Comments ...

Comments

No comments have been added for this post.

You must be logged in to make a comment.