SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample illustrates application-generated output.
The source code is located at C:\Program Files (x86)\Softelvdm\SftPrintPreview OCX 1.0\Samples\Visual Studio - VB.NET\PreviewPages\Form1.vb or C:\Program Files\Softelvdm\SftPrintPreview OCX 1.0\Samples\Visual Studio - VB.NET\PreviewPages\Form1.vb (on 32-bit Windows versions).
Private Sub MenuExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuExit.Click
Application.Exit()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AxSftPrintPreview1.Dock = DockStyle.Fill
' Use the RenderContent event to render pages
AxSftPrintPreview1.ContentProviderCallback(0, IntPtr.Zero, IntPtr.Zero)
Show() ' Show this form so we get the form and the messagebox at the same time
MessageBox.Show("This example demonstrates application-generated output." & vbCr & vbLf & vbCr & vbLf & "It prints one bitmap and 50 lines of text a total of 20 times. " & _
"The included source code illustrates how an application can print one page at a time, with an easy " & _
"mechanism to keep track of restart positions.")
End Sub
Private Sub AxSftPrintPreview1_PageSetupWanted(ByVal sender As Object, ByVal e As System.EventArgs) Handles AxSftPrintPreview1.PageSetupWanted
AxSftPrintPreview1.PageSetup(0)
End Sub
Private Sub AxSftPrintPreview1_HelpWanted(ByVal sender As Object, ByVal e As AxSftPrintPreviewLib10._ISftPrintPreviewEvents_HelpWantedEvent) Handles AxSftPrintPreview1.HelpWanted
MessageBox.Show("Sorry, this sample doesn't offer a help file")
End Sub
Private Sub AxSftPrintPreview1_CloseWanted(ByVal sender As Object, ByVal e As System.EventArgs) Handles AxSftPrintPreview1.CloseWanted
Application.Exit()
End Sub
Private Sub AxSftPrintPreview1_RenderContent(ByVal sender As Object, ByVal e As AxSftPrintPreviewLib10._ISftPrintPreviewEvents_RenderContentEvent) Handles AxSftPrintPreview1.RenderContent
' This function is called by SftPrintPreview to print pages, to initialize and
' terminate printing (to prepare and free resources) and for page positioning
If e.function = SftPrintPreviewRenderContentConstants.renderSftPrintPreview_Init Then
m_PrintFont = New Font("Arial", 10)
ElseIf e.function = SftPrintPreviewRenderContentConstants.renderSftPrintPreview_Term Then
m_PrintFont = Nothing
ElseIf e.function = SftPrintPreviewRenderContentConstants.renderSftPrintPreview_1Page Then
PrintOnePage(e.visitedPageInfo, e.lastPage)
End If
End Sub
Private Sub PrintOnePage(ByRef VisitedPageInfo As Object, ByRef LastPage As Integer)
' Print one page (can occur multiple times)
' RenderingInfo.CurrentPage has the absolute page # to print (0..n)
' RenderingInfo.PreviousVisitedPageInfo contains the value you returned in
' RenderingInfo.VisitedPageInfo when you finished printing the previous page
' This allows you to simply restart where you left off.
' The information you return in RenderingInfo.VisitedPageInfo is of type
' object, so it can be a simple Counter or even a complex object, with cached
' information.
' In this example we print 1 bitmap, then 50 lines of text,
' 20 times
' We use RenderingInfo.PreviousVisitedPageInfo to resume printing.
' We simply start at 0 and add 1 for each bitmap or line we
' printed. Using a simple formula, we can determine where we
' left off. In an application, the concept remains the same, but
' instead of a simple Counter, you could use RenderingInfo.VisitedPageInfo
' to store more complex information.
' Set up a Graphics object where we render the page
Dim g As Graphics = Graphics.FromHdc(New IntPtr(AxSftPrintPreview1.RenderingInfo.hDC))
g.PageUnit = GraphicsUnit.Pixel ' set it to pixel mode
' It is also possible to set it to GraphicsUnit.Inch or GraphicsUnit.Millimeter or the other
' unit modes. Information in RenderingInfo is available in pixels and inches.
Dim Counter As Integer = 0
Dim brush As SolidBrush = New SolidBrush(Color.Black) ' Color printers support other colors too
Dim outRect As Rectangle = New Rectangle(AxSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.left, AxSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.top, _
AxSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.right - AxSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.left, AxSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.bottom - AxSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.top)
If AxSftPrintPreview1.RenderingInfo.PreviousVisitedPageInfo <> Nothing Then
Counter = AxSftPrintPreview1.RenderingInfo.PreviousVisitedPageInfo ' we left off here on the previous page
End If
' starting output position on this page
Dim xPrinter As Integer, yPrinter As Integer
xPrinter = outRect.Left
yPrinter = outRect.Top
While True
If Counter >= (1 + 50) * 20 Then ' 1 bitmap, 50 lines of text, 20 times
' we have printed 1 bitmap and 50 lines 20 times, we're done
LastPage = AxSftPrintPreview1.RenderingInfo.CurrentPage ' return that this is the last page
Exit While
End If
If (Counter Mod (50 + 1)) = 0 Then
' Print a bitmap
' get bitmap size
Dim bmp As Bitmap = New Bitmap(pictureBox1.Image)
Dim wPrinterPix As Integer, hPrinterPix As Integer, wDispPix As Integer, hDispPix As Integer
Dim hBmp As IntPtr = bmp.GetHbitmap()
AxSftPrintPreview1.GetDDBSize(hBmp.ToInt32(), AxSftPrintPreview1.RenderingInfo.hDC, wPrinterPix, hPrinterPix, wDispPix, hDispPix)
' make sure entire image fits on remaining page
If yPrinter + hPrinterPix > outRect.Bottom Then
DeleteObject(hBmp)
Exit While
End If
' print bitmap, horizontally centered
AxSftPrintPreview1.PrintDDB(hBmp.ToInt32(), AxSftPrintPreview1.RenderingInfo.hDC, xPrinter + (outRect.Width - wPrinterPix) / 2, _
yPrinter, wPrinterPix, hPrinterPix, wDispPix, hDispPix)
DeleteObject(hBmp)
yPrinter += hPrinterPix ' next available space
Else
' Print line
' get text size
Dim s As SizeF = g.MeasureString(m_DrawText, m_PrintFont)
' make sure text fits on remaining page
If yPrinter + s.Height > outRect.Bottom Then
Exit While
End If
Dim pt As PointF = New PointF(outRect.Left + (outRect.Width - CInt(s.Width)) / 2, yPrinter)
g.DrawString(m_DrawText, m_PrintFont, brush, pt)
yPrinter += CInt(s.Height)
End If
Counter = Counter + 1 ' one more item done
End While
VisitedPageInfo = Counter ' we left off here
End Sub