home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Tool Box
/
SIMS_2.iso
/
vb_refer
/
hp_esc
/
hpesc.txt
Wrap
Text File
|
1992-05-28
|
5KB
|
119 lines
SENDING ESCAPE SEQUENCES FROM VISUAL BASIC TO HP III PRINTERS
=============================================================
Author : Peter O'Rourke (100064,475)
Company : Tunbridge Wells Equitable Friendly Society
Date : 9th May 1992
PURPOSE
=======
This document discusses a technique for sending printer ESCape
sequences from Visual Basic to an HPIII, something which a number of
people have been experiencing problems with. The text might be of
interest to users of other printers if they too are having problems.
INTRODUCTION
============
I have been working on a Visual Basic project for some time now.
One of the functions that the system needed to perform was the sending
of ESCape sequences to our HPIII printers. I was very disappointed to
discover that it was not possible to do so.
Despite extensive conversations with Microsoft UK & USA we were
unable to come up with a solution. We tried using the Windows API
function PASSTHROUGH without any success. We tried printing direct
to LPTx also without success. Either of these solutions would probably
work providing you sent ALL printer output via the same method. i.e
You must NOT try to intersperse Visual Basic's internal printing
commands. The major downside to this approach of course is that you
lose all of VB's printer handling functions. e.g. Font selection, size,
attributes and text alignment features.
SOLUTION
========
Robert Enigigl (76701,155) @ Microsoft suggested that I try using
using the API function TextOut, but only if I were prepared to send ALL of
my output via this method. I knocked together a test program, which didn't
work either. Then I discovered, quite by accident, that if I printed
something via Printer.Print first, and then sent my ESCapes via TextOut,
suddenly everything worked!
Now this didn't quite seem correct, since the function I had
written to use TextOut actualy sent something via Printer.Print before it
called the function, so that I could get the Printer Handle (HDc). After
further investigation I discovered that it was not WHAT I was printing
before I sent my ESCape sequences, but WHICH FONT I was using that
determined whether or not the ESCape seqences would work.
I then changed my code so that I was sending the ESCapes via the
Printer.Print ESCString$ method, which of course is where I started some
time ago now, and discovered that this worked fine as well.
As with most things in life the final solution is so simple and
obvious, that you want to kick yourself for not having thought of it in
the first place. Make sure you are using the correct font BEFORE you
send your ESCape seqences. Here is my sample code, which you can modify
to suit:-
Printer.Fontname = Printer.Fonts(ANumber)
Printer.Print Chr$(27) + "&f1001y3X"
Printer.Print Chr$(27) + "&f1004y3X"
Printer.Print Chr$(27) + "&f1010y3X"
Printer.Print Chr$(27) + "&f1024y3X"
Printer.Print Chr$(27) + "&f1042y3X"
Printer.Print "The rest of my data."
N.B. The above ESCape codes instruct an HPIII to invoke five prestored
macros which go to make up a composite background form for my app.
By default, my setup will cause Visual Basic to use Courier as
it's initial printer font. If I send the above ESCape sequences with
Courier as my default font, the ESCape character (1Bh) is changed to 7Fh,
which of course means nothing to the printer. This causes the following
nine bytes in the ESCape sequence to be interpreted as text.
The following table list the fonts that VB can access in my
environment, and it shows whether or not the ESCape sequence is sent
intact, or modified in some way. My environment consists of Windows 3.1
configured to use the HPIII printer driver, which VB reports as having 16
supported fonts.
Font No. Font Name Does It Work?
======== ========= =================================
1 Courier New Yes.
2 Times New Roman Yes.
3 Wingdings Yes.
4 Symbol Yes.
5 CG Times(WN) Yes. (Tested to printer correctly)
6 Courier No. Escape (1Bh) becomes 7Fh.
7 Fences No. Escape (1Bh) becomes 95h.
8 Line Printer No. Escape (1Bh) becomes 7Fh.
9 MT Extra No. Escape (1Bh) becomes 95h.
10 MT Symbol No. Escape (1Bh) becomes 95h.
11 Symbol Yes.
12 Univers(WN) Yes.
13 MS Line Draw No. Entire ESCape sequence lost!
14 Roman No. Entire ESCape sequence lost!
15 Script No. Entire ESCape sequence lost!
16 Modern No. Entire ESCape sequence lost!
N.B. The only font that I have actualy printed via, and therefore know
will work, is number 5 CG Times(WN). I have only examined the disk file
created when using the other fonts so I cannot guarantee that there won't
be somthing else in the output that might cause problems.
THANKS
======
My thanks to the various people on Compuserve who offered advice
along the way, but in particular Robert Einigl (76701,155) and Rick J.
Andrews (70742,1226). Live long and prosper.
Regards
Peter O'Rourke (100064,475)