Solved

Printing Landscape with VB

Posted on 1998-12-01
2
859 Views
Last Modified: 2008-01-16
Can anyone tell me if there is a way to force a print to come out in Landscape instead of Portrait.

0
Comment
Question by:BLumas
2 Comments
 
LVL 13

Accepted Solution

by:
Mirkwood earned 30 total points
Comment Utility
VB3 How to Set Landscape or Portrait for Printer from VB App

Last reviewed: January 9, 1997
Article ID: Q80185 The information in this article applies to:

- Standard and Professional Editions of Microsoft Visual Basic for

  Windows, versions 2.0 and 3.0



- Microsoft Visual Basic programming system for Windows, version 1.0





SUMMARY

Some printers support changing the orientation of the paper output to landscape. With the Windows API Escape() function, you can change the settings of the printer to either landscape or portrait. In addition, if you have one of the following products, you can use the Common Dialog box to allow users to set the mode inside a Visual Basic Application:

•Visual Basic version 1.0 Professional Toolkit •Professional Edition of Visual Basic version 2.0 •Standard or Professional Edition of Visual Basic version 3.0



Below is an example showing how to invoke the Windows API Escape() function from Microsoft Visual Basic.



NOTE: The Windows API Escape() function is provided in Windows versions 3.0 and 3.1 for backward compatibility with earlier versions of Microsoft Windows. Applications are supposed to use the GDI DeviceCapabilities() and ExtDeviceMode() functions instead of the Escape() function, but neither DeviceCapabilities() nor ExtDeviceMode() can be called directly from Visual Basic. This is because they are exported by the printer driver, not by the Windows GDI. The only way to use ExtDeviceMode() or DeviceCapabilities() in Visual Basic is to create a DLL and call them from there.





MORE INFORMATION

Normally, output for the printer is in portrait mode, where output is printed horizontally across the narrower dimension of a paper. In landscape mode, the output is printed horizontally across the longer dimension of the paper.

You can use the Escape() function to change the orientation of the printer by passing GETSETPAPERORIENT as an argument. When you initially print text to the printer, Visual Basic will use the currently selected orientation. Sending the Escape() function will not take effect until you perform a Printer.EndDoc. After you perform a Printer.EndDoc, output will print in the orientation that you have selected.

To determine if your printer supports landscape mode, do the following:



1.From the Windows Program Manager, run Control Panel.

2.From the Control Panel, select the Printers icon.

3.From the Printers dialog box, choose the Configure button.

4.The Configure dialog box will contain an option for landscape orientation if landscape is supported on your printer.







How to Check the Current Orientation of the Printer

To check the current orientation of the printer, use the following code:



' Enter the following Declare statement as one, single line:
Declare Function Escape% Lib "GDI" (ByVal hDC%, ByVal nEsc%, ByVal nLen%,
   lpData As Any, lpOut As Any)

Sub Command1_Click ()
   Const PORTRAIT = 1
   Const LANDSCAPE = 2
   Const GETSETPAPERORIENT = 30

   Dim Orient As OrientStructure
   Printer.Print ""
   Orient.Orientation = LANDSCAPE
   x% = Escape(Printer.hDC, GETSETPAPERORIENT, Len(Orient), "", Null)
   Print x%
End Sub






How to Change the Printer Orientation to Landscape

The following example below demonstrates how to change the printer orientation to landscape. Please note that your printer must support landscape mode for these commands to have any effect.



1.Start a new project in Visual Basic (ALT, F, N). Form1 is created by default.

2.Add a command button (Command1) to Form1.

3.Add the following code to the global module:

Type OrientStructure



      Orientation As Long
      Pad As String * 16



End Type

   ' Enter the following Declare statement on one, single line:
   Declare Function Escape% Lib "GDI" (ByVal hDc%, ByVal nEsc%,
               ByVal nLen%, lpData As OrientStructure, lpOut As Any)






4.Add the following code to the Command1_Click event procedure of the Command1 button:



   Sub Command1_Click ()
      Const PORTRAIT = 1
      Const LANDSCAPE = 2
      Const GETSETPAPERORIENT = 30

      Dim Orient As OrientStructure

      '* Start the printer
      Printer.Print ""

      '* Specify the orientation
      Orient.Orientation = LANDSCAPE

      '* Send escape sequence to change orientation
      x% = Escape(Printer.hDC, GETSETPAPERORIENT,
                Len(Orient), Orient, NULL)
      '* The EndDoc will now re-initialize the printer
      Printer.EndDoc

      Printer.Print "Should print in landscape mode"
      Printer.EndDoc
   End Sub
0
 

Expert Comment

by:Eyalt
Comment Utility
There is a real problem using the common dialog for printer, I'm looking for a way to print using API
 functionsin VB5 for NT & WIN95.

0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
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…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

772 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

15 Experts available now in Live!

Get 1:1 Help Now