Вы находитесь на странице: 1из 9

2/13/2017 PrintingText

Printing Text
Visual Studio 6.0

Printing text in BASIC is done with the Print statement. Similarly, in Visual Basic, you use the Print method. This method works on the object you wish to print. This object
can be an entire form, the Debug object, the Printer object, or a Picture control. Weve already talked about how the Debug.Print method directs output to the
Immediate window in Chapter 3. The other methods display their output on their respective objects:

Form1.Print sends output to Form1s background.

Picture1.Print sends the output to the Picture1 control.

Printer.Print sends the output to the printer.

WARNING: Recycled paper versus recycled electrons: When testing your printing programs, remember that most of the methods and properties you will use on the
Printer object also can be used with the Picture control. So for most of the examples in this chapter, I use the Picture control to show you how the various methods and
properties work. Feel free to try any of these programs out using the Printer object by substituting Printer for Picture1, sending your results directly to your printer. Only
your recycler knows the difference.

Printing to and beyond the Edges


The Print method works much as you would expect. Each time you call the Print method, the output will begin at the start of the next line, except if the previous Print
method ended with a comma or semicolon. In that case, the print would be continued on the same line. Listing 9.4 contains an example of code that allows printing
beyond the right edge, and Figure 9.3 shows the results.

Listing 9.4: Command1_Click Event in Print

PrivateSubCommand1_Click()
DimiAsInteger
Picture1.Cls
Fori=1To100
Picture1.Printabcdefg;
Nexti
EndSub

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 1/9
2/13/2017 PrintingText

Figure 9.3: Any printed output beyond the right edge of the control is lost.

One limitation of this approach is that, eventually, you will reach the end of the object. If you continue to print to the object, the text will fall off the end of the paper or
screen and not be visible. Likewise, if you continue to print on the same line, it will also fall off the edge and be lost. Neither of these conditions will generate an error or a
warning. Listing 9.5 contains an example of code that allows printing beyond the bottom edge, and Figure 9.4 shows the results.

Listing 9.5: Command2_Click Event in Print

PrivateSubCommand2_Click()
DimiAsInteger
Picture1.Cls
Fori=1To100
Picture1.Printabcdefg
Nexti
EndSub

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 2/9
2/13/2017 PrintingText

Figure 9.4: Any printed output beyond the bottom edge of the page is lost

NOTE: Clearing the object: The Cls method is used to clear the contents of a form or of a Picture control and to reposition the cursor to the beginning.

Printing in Columns
Just like in the original BASIC, if you separate values by commas, each value will start at the beginning of the next print zone. Print zones are aligned based on absolute
measurements, not characters. This makes it easier to create columns, as long as your data is not wider than a print zone. If its wider, you need to be careful to ensure that
you are starting the data in the proper print zone. The code shown in Listing 9.6 creates columns with commas. Figure 9.5 shows its output.

Listing 9.6: Command3_Click Event in Print

PrivateSubCommand3_Click()
Picture1.Cls
Picture1.Printabc,def,ghi,jkl,mno,pqr,_
stu,vwx
Picture1.Printabcdef,ghijkl,mnopqr,stuvwx
https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 3/9
2/13/2017 PrintingText

Picture1.Printabcdefghijkl,mnopqrstuvwx
Picture1.Printabcdefghijklmnopqrstuvwxyz,_
abcdefghijklmnopqrstuvwxyz
EndSub

Figure 9.5: When you use commas, columns will line up as long as they are close to the same size.

TIP: Things go better with Tab: One of the functions available for the Print method is the Tab function. The Tab function will position the output cursor at a particular
column in the output field. The width of a column is determined by the average width of all of the characters in the current font. This is not the most accurate way to align
columns of information, but it is better than relying on the effect of commas and semicolons.

Positioning the Cursor


Another way to control printing alignment is by positioning the cursor. Each object Form, Picture, and Printer maintains a cursor that describes the current position on
the object. Two properties describe the location of the cursor: CurrentX is the horizontal component, and CurrentY is the vertical component. These properties can be
read to find the current location or assigned a value to reset the cursor to a new position. As usual with these objects, all measurements are made in twips. Recall that one
twip is exactly onetwentieth of a printers point, and there are 1440 twips to the inch or 567 to the centimeter.
https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 4/9
2/13/2017 PrintingText

The code in Listing 9.7 shows how to move around a PictureBox control using the CurrentX and CurrentY properties. I save the values of CurrentX and CurrentY into the
string t before I execute the Print method so that these values remain unaffected by the printing process. Figure 9.6 shows the output.

Listing 9.7: Command4_Click Event in Print

PrivateSubCommand4_Click()
DimtAsString
Picture1.Cls
t=FormatNumber(Picture1.CurrentX,0)&,&_
FormatNumber(Picture1.CurrentY,0)
Picture1.Printt
Picture1.CurrentX=0
Picture1.CurrentY=2880
t=FormatNumber(Picture1.CurrentX,0)&,&_
FormatNumber(Picture1.CurrentY,0)
Picture1.Printt
Picture1.CurrentX=2880
Picture1.CurrentY=0
t=FormatNumber(Picture1.CurrentX,0)&,&_
FormatNumber(Picture1.CurrentY,0)
Picture1.Printt
Picture1.CurrentX=2880
Picture1.CurrentY=2880
t=FormatNumber(Picture1.CurrentX,0)&,&_
FormatNumber(Picture1.CurrentY,0)
Picture1.Printt
EndSub

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 5/9
2/13/2017 PrintingText

Figure 9.6: You can use the CurrentX and CurrentY properties to control the position of a PictureBox control.

Positioning Text
So far, I havent talked about where the cursor is oriented with respect to the text youre going to print. Maybe its obvious, but the cursor is always at the upperleft corner
of an imaginary box that surrounds the text. The actual size of the box is determined by the size of the tallest character in the text string, the sum of the widths of each
individual character in the text string, and the font used to display the text string.

Because this is a rather complicated process, Visual Basic includes two methods that return the size of the string: TextWidth and TextHeight. Also, if you have embedded
carriage returns, these methods will compute the total size of the box based on the size of the longest line and the total number of lines.

The code in Listing 9.8 shows how to display the same string of text in four different quadrants surrounding the center point of the cursor. Figure 9.7 shows the results.

NOTE: Why is there a small space below the text string and behind the text string? This is because the TextWidth method allows for space after the last character in
the string, and the TextHeight method includes space above and below the string. This way, you dont need to worry about where to place the next string.

Listing 9.8: Command5_Click Event in Print

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 6/9
2/13/2017 PrintingText

PrivateSubCommand5_Click()
DimtAsString
t=Hello
Picture1.Cls
Picture1.CurrentX=1440
Picture1.CurrentY=1440
Picture1.Printt
Picture1.CurrentX=1440Picture1.TextWidth(t)
Picture1.CurrentY=1440
Picture1.Printt
Picture1.CurrentX=1440
Picture1.CurrentY=1440Picture1.TextHeight(t)
Picture1.Printt
Picture1.CurrentX=1440Picture1.TextWidth(t)
Picture1.CurrentY=1440Picture1.TextHeight(t)
Picture1.Printt
EndSub

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 7/9
2/13/2017 PrintingText

Figure 9.7: You can use the TextHeight and TextWidth methods to control the position of text.

Inthis example, I begin by printing the first string starting at 1 inch from the top and 1 inch from the left margin remember, 1440 twips equal 1 inch. Next, I print the
second string immediately to the right of the first string. I compute its new X coordinate by subtracting the width of the string.

The third string is printed above the second. Its X coordinate is computed by subtracting the width of the string from the 1440twips X coordinate. Its Y coordinate is
computed by subtracting the height of the string from the 1440twips Y coordinate. Finally, the last string is printed above the first by subtracting the height of the string
from the 1inch Y coordinate.

Changing Font Characteristics


One of the nice features of Visual Basic is that it has the ability to use multiple fonts in a single object. This means that you can make a block of text bold, italic, or
underlined. You can also change the size or even the name of the font you wish to use. This allows you to present information more dramatically by emphasizing certain
items.

Doing this in Visual Basic is fairly easy. All you need to do is change the Font object associated with the object you are using. In Listing 9.9, you can see that I copied the
same code from the code shown in the previous section and inserted some changes to Picture1s Font property.

Listing 9.9: Command6_Click Event in Print

PrivateSubCommand6_Click()
DimtAsString
t=Hello
Picture1.Cls
Picture1.CurrentX=1440
Picture1.CurrentY=1440
Picture1.Printt
Picture1.Font.Bold=True
Picture1.CurrentX=1440Picture1.TextWidth(t)
Picture1.CurrentY=1440
Picture1.Printt
Picture1.Font.Italic=True
Picture1.CurrentX=1440
Picture1.CurrentY=1440Picture1.TextHeight(t)
Picture1.Printt
Picture1.Font.Size=18
Picture1.CurrentX=1440Picture1.TextWidth(t)
Picture1.CurrentY=1440Picture1.TextHeight(t)
Picture1.Printt
Picture1.Font.Size=8
Picture1.Font.Bold=False

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 8/9
2/13/2017 PrintingText

Picture1.Font.Italic=False
EndSub

As you can see in Figure 9.8, most of these changes did not materially change how the information is aligned. However, in the upperleft corner, where I changed the font
size to 18, you can see that the text is pulled slightly away from the other three text blocks. This is because the padding areas above, below, and to the right of the text are
greater in an 18point font than in the standard 8point font.

Figure 9.8: You can change font characteristics to emphasize text.

1998 SYBEX Inc. All rights reserved.

2017 Microsoft

https://msdn.microsoft.com/enus/library/aa227486(v=vs.60).aspx 9/9

Вам также может понравиться