Hacker’s Guide to Visual FoxPro
An irreverent look at how Visual FoxPro really works. Tells you the inside scoop on every command, function, property, event and method of Visual FoxPro.
EJECT PAGE
, ON PAGE
EJECT and EJECT PAGE
both send ejects to the printer, but clean up from it differently. EJECT is intended for use with @…SAY output, while EJECT PAGE
is meant to work with ? and ?? streaming output. ON PAGE
lets you establish an event handler for reaching the end of the page (or a specified line) in streaming output.
EJECT
EJECT PAGE
EJECT sends a formfeed to the printer. But it doesn’t take effect until you SET PRINT TO to finish the print job. EJECT PAGE
also sends a formfeed, but it resets a bunch of the printer variables, as well. It’s a better choice in a program using streaming output.
ON PAGE [ AT LINE nTriggerLine ] [ Command ]
ON PAGE
is an event handler. In streamed output, when you reach the end of the page, the specified command is executed. If you include the AT clause, the command is executed when you reach that line. The ON PAGE
handler lets you leave top and bottom margins and include a header or footer.
Be sure to turn off the ON PAGE
handler (by issuing ON PAGE
with nothing following) before you SET PRINT OFF. If you’re redirecting output to a file and don’t do so, you end up sending a blank page to the printer.
When you issue EJECT PAGE
inside an ON PAGE
handler, it uses linefeeds to complete the page regardless of the setting of _PADVANCE.
We haven’t used these commands since FoxBase days and we don’t expect to start doing so now. Use the Report Designer or a third-party reporting tool.
SET PRINT TO test.txt
SET PRINT ON
_PAGENO = 1
_PLENGTH = 15
ON PAGE AT LINE 12 DO footer
FOR ncnt=1 TO 3
?"Page "+PADL(_pageno,2)
FOR ncnt2 = 1 TO 20
_PCOLNO = 2*ncnt2
??"Line "+PADL(ncnt2,2)
?
ENDFOR
ENDFOR
ON PAGE
SET PRINT OFF
SET PRINT TO
PROCEDURE footer
?"This is the end of the page"
EJECT PAGE
ENDPROC