Solved

Printing DBGRID contents

Posted on 1998-09-03
3
290 Views
Last Modified: 2010-04-30
Hi,

I am working with a large DBGRID and I want to print out all the contents

I want it to span across several pages, because there are many columns.  I want to print out based on if the column is visible or not and I want it to print out the number of columns that fit on a page, so lets say 5 columns fit on a page, and there are 10 columns, on the first few pages I want the first five columns and the balance on the next pages.  And I also want to repeat the column headings.  

And how do I go about a print preview?

Thanks a lot for any help.

Mark Anders
0
Comment
Question by:MarkA
  • 2
3 Comments
 
LVL 1

Accepted Solution

by:
CarlosJac earned 100 total points
ID: 1432903
I use VSVIEW 3.0 from Videosoft.  This is an Activex Control to replace the printer object.
Download:
www.videosoft.com
0
 
LVL 14

Expert Comment

by:waty
ID: 1432904
Here are two solutions :

First : Use my Print Preview OCX (shareware). It is great. You can find it on my web site :
  Web Site : http://www.geocities.com/ResearchTriangle/6311/

With the PrintPreview OCX, you can replace your printer object in
all your code with this object. You will be able to :
    - You can preview your printed text on the screen
    - You can have many pages as you want
    - You can zoom/unzoom the pages (like in the Word)
    - You can preview two pages at one time
    - You can print the text
    - You can save the text in a structured file
    - You can reload saved printed text
    - You can save the text in an ASCII format
    - You can have the interface in multiple language
    - When you double clik on the page number,
      you can go directly to a specified page
    - You can search strings in all previewed pages
    - Load, preview and print bitmaps at any position
    - Make report based on data provided by you through APIs
    - You can use the Print Preview in Spanish
    - You can use the Print Preview in German
    - Toolbar with bitmap if desired
    - Possibility to use styles to format the text
    - Automatic alignment to left, center, right
    - Help file added
    - You can use Print Preview in Office (Excel, Outlook, Access...)
    - You can create a report based on a database and a query
    - New graphics possibilities : CheckBox, RadioButton
    - Word Wrap capabilities for long lines
    - Works with Chinese, Arab... character set
    - You can use the Print Preview in Dutch
    - You can use the Print Preview in Italian
    - New improved interface with some new features
    - You can set the zoom directly in your application
    - You can now setup all the user interface to interact with your user
    - You can save output to bitmap
    - You can add text with any angle you want
    - Win98 Interface with gradient title bar
    - You can configure all the user text in the Print Preview
    - Added all the API in HTML format
    - ... Many other features

0
 
LVL 14

Expert Comment

by:waty
ID: 1432905
Second : Use this function wich print a traditional Grid. You could modify it. (if you modify it, please send me the code, it could be useful for me) :

Sub GridPrint(Grid As Control, szTitle As String, bLines As Integer)
   ' *** Print a grid control ***
   
   Dim nRow          As Long
   Dim nCol          As Long
   Dim sCurrentX     As Single
   Dim sCurrentY     As Single
   Dim sMaxLine      As Single
   Dim nPage         As Integer
   Dim szPage        As String
   Dim sOldY         As Single
   Dim sPageWidth    As Single
   Dim sBeginLeft    As Single
   Dim sBeginGrid    As Single
   
   If (Grid.Rows = 0) Then Exit Sub
   
   ' *** We look for the maximum size for the fontsize ***
   sMaxLine = 99999999

   ' *** By default, we set the fontsize of the grid ***
   Printer.FontSize = Grid.FontSize

   ' *** Here is the maximum width of the page
   sPageWidth = Printer.Width * 0.94 - 200
   
   ' *** We calculate the maximum possible fontsize ***
   Do While (sMaxLine > sPageWidth) And (Printer.FontSize > 0)
      sMaxLine = 0
      For nCol = 0 To Grid.Cols - 1
    sMaxLine = sMaxLine + (Printer.FontSize / Grid.FontSize) * Grid.ColWidth(nCol)
      Next

      ' *** We change the fontsiz if needed ***
      If (sMaxLine > sPageWidth) Then Printer.FontSize = Printer.FontSize - 1
   Loop

   ' *** We begin on page 1 ***
   nPage = 1

   ' *** We put The title ***
   ' *** and the headers of each column ***
   GoSub PRINT_HEADERS
     
   For nRow = 1 To Grid.Rows - 1
      If (bLines = True) Then Printer.Line (sBeginLeft, sCurrentY)-(sMaxLine, sCurrentY)
     
      ' *** We print on a new page if needed ***
      If (sCurrentY >= Printer.Height * 0.93 - Printer.TextHeight("A")) Then
    If (bLines = True) Then
       ' *** Bottom line
       Printer.Line (sBeginLeft, sCurrentY - 4 * Printer.TwipsPerPixelY)-(sMaxLine, sCurrentY - 4 * Printer.TwipsPerPixelY)
       ' *** Left line ***
       Printer.Line (sBeginLeft, sBeginGrid)-(sBeginLeft, sCurrentY - 4 * Printer.TwipsPerPixelY)
       ' *** Right line ***
       Printer.Line (sMaxLine, sBeginGrid)-(sMaxLine, sCurrentY - 4 * Printer.TwipsPerPixelY)
    End If
   
    Printer.NewPage
    nPage = nPage + 1
   
    ' *** We put The title ***
    ' *** and the headers of each column ***
    GoSub PRINT_HEADERS
     
      End If

      sCurrentX = 4 * Printer.TwipsPerPixelX
     
      For nCol = 0 To Grid.Cols - 1
    If (nCol > 0) Then
       sCurrentX = sCurrentX + (Printer.FontSize / Grid.FontSize) * Grid.ColWidth(nCol - 1)
   
       If bLines = True Then Printer.Line (sCurrentX - 4 * Printer.TwipsPerPixelX, sBeginGrid)-(sCurrentX - 4 * Printer.TwipsPerPixelX, Printer.CurrentY + (Printer.TextHeight("A") / 2) - 4 * Printer.TwipsPerPixelY)
    End If
   
    ' *** Print cell text ***
    Grid.Col = nCol
    Grid.Row = nRow
    Printer.CurrentX = sCurrentX
    Printer.CurrentY = sCurrentY + (Printer.TextHeight("A") / 2)
    Printer.Print Grid.Text
      Next
     
      sCurrentY = sCurrentY + (Printer.TextHeight("A") * 2)
   Next
   If (bLines = True) Then
      ' *** Bottom line
      Printer.Line (sBeginLeft, sCurrentY - 4 * Printer.TwipsPerPixelY)-(sMaxLine, sCurrentY - 4 * Printer.TwipsPerPixelY)
      ' *** Left line ***
      Printer.Line (sBeginLeft, sBeginGrid)-(sBeginLeft, sCurrentY - 4 * Printer.TwipsPerPixelY)
      ' *** Right line ***
      Printer.Line (sMaxLine, sBeginGrid)-(sMaxLine, sCurrentY - 4 * Printer.TwipsPerPixelY)
   End If

   Printer.EndDoc
   
   Exit Sub
   
PRINT_HEADERS:
   ' *** We print the title ***
   sCurrentY = Printer.CurrentY
   Printer.FontBold = True
   Printer.Print szTitle
   Printer.FontBold = False
   Printer.Print ""

   ' *** We print the page number on the first line ***
   sOldY = Printer.CurrentY
   szPage = "Page " & CStr(nPage)
   Printer.FontItalic = True
   Printer.CurrentX = sPageWidth - Printer.TextWidth(szPage)
   Printer.CurrentY = sCurrentY
   Printer.Print szPage
   Printer.FontItalic = False
   Printer.CurrentY = sOldY
   
   ' *** We print the grid ***
   Printer.CurrentY = Printer.CurrentY + (Printer.TextHeight("A"))
   sCurrentY = Printer.CurrentY
   sBeginGrid = sCurrentY
   sBeginLeft = 0
   sCurrentX = 4 * Printer.TwipsPerPixelX
   
   ' *** We print the header of each column ***
   If (bLines = True) Then Printer.Line (sBeginLeft, sCurrentY)-(sMaxLine, sCurrentY)
   
   Printer.Print
   sCurrentY = Printer.CurrentY + (Printer.TextHeight("A") / 2)
   For nCol = 0 To Grid.Cols - 1
      If (nCol > 0) Then sCurrentX = sCurrentX + (Printer.FontSize / Grid.FontSize) * Grid.ColWidth(nCol - 1)
     
      ' *** Print cell text ***
      Grid.Col = nCol
      Grid.Row = 0
      Printer.CurrentX = sCurrentX
      Printer.CurrentY = sCurrentY
      Printer.Print Grid.Text
   Next
   
   sCurrentY = sCurrentY + (Printer.TextHeight("A") * 1.5)
   Printer.Print
   
   If (bLines = True) Then Printer.Line (sBeginLeft, sCurrentY)-(sMaxLine, sCurrentY)
   
   Return

End Sub

0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now