---------- LOTS OF PRINTING QUESTIONS -----------

Several printing questions here, so hope that someone can help me out. I guess maybe some of them are pretty simple, but not having used VB to print before then for me they are all equally mystifying.

a) How can I print a bitmap file to a printer from a given  pathname, or do I need to have it in a picture box ? Either way I'm not sure how to do it.

b) I've got a small print routine that sets the printer font to Tahoma and fontsize to 18 and fontbold to true. The first time I use it then all is well, but try it again and it goes back to the printer defaults, even though it goes through the same code again. Am I missing something ?

c) Is it possible to print a control ? By this I mean that if I want a checkbox in the printout, or a command button for example then can I get it to do this - I basically want checkboxes in certain positions in the report. Do I need to have an image of a checkbox and print this instead ? If so then same as question (a)

Well, think thats all for now - hope someone can help out.
I know there are plenty of shareware controls to do printy type things from VB  but really need to know how to do it myself.
Thanks in advance.
Who is Participating?
mark2150Connect With a Mentor Commented:
a) You have to load the bitmap into some control and then Printer.PrintPicture Control.Image to print the image. You can't print direct from the disk file. But the control doesn't have to be visible so it's not that great a handicap. Also be sure to set AutoSize to true so it'll grow/shrink if all of your disk .BMP's are not exactly the same size.

b) Is known bug in VB where sometimes you have to hit the .FontStyle twice for it to stick. It's also sequence sensitive where you need to set font style, then size, then attributes.

c) Yes you can print a control. No, you won't like the results. The reason is that when you print the control it is rendered like a screen snapshot - at the rez of the screen. Your printer generally will have a much higher rez than the screen and this means that you get a little teeny, hi-rez version or a 1:1 lo-rez version - neither looks particulary good.

One thing you *CAN* to that is neat with VB is that you can have the *SAME* print routine render to both a screen based object and the printer. Simply pass the target into the routine as an OBJECT parameter. If the object is, say, an image control, then your stuff shows up there. If the object is the printer, then your stuff prints there. The neat part is that both are rendered with MAXIMUM POSSIBLE QUALITY. This will give you crisp, sharp text on the printer along with nice, high quality graphics.

Set up your print routine like this:

Tgt.Print ...

Then if you have:

SET TARGET = (some control)

That will show up on your control

if you instead code:


Now it'll print.

You have to put a little conditional logic in your Render() routine to isolate printer/control specific items. For instance a .CLS doesn't apply to printers and you can't .EndDoc a control. Is not that hard tho.

eMail me and I'll send you operational code if you need more help.



I can find a good performance with Vsview 3.0 (VideoSoft) You can find a free demo.
This is the more flexible tools for print

dgb001Author Commented:
Thanks for your proposed answer Renato, and I'm sure the tool you mention is probably useful, but as I said in the question I really do need to know how to do this myself. (i.e the actual code)

Thanks anyway

dgb001Author Commented:
Thanks Mark, that all looks pretty good stuff. I will almost certainly e-mail you in the next couple of days (unfortunately my company e-mail isn't working at the moment so I need to keep logging in to Experts Exchange to see if there are any comments or answers - hence I can't e-mail you at the moment either).

Thanks again,
daveb@banet.net (this is my home e-mail address)

dgb001Author Commented:
Just for anyone elses benefit in the future then the following link may prove of use :
All Courses

From novice to tech pro — start learning today.