You're missing the SET PRINTER commands that set and reset the printer, creating a print job. Try the following instead:
SET PRINTER TO LPT1: (or windows printer name)
SET DEVICE TO PRINT
@ 2,46 SAY 'test'
SET DEVICE TO SCREEN
SET PRINTER TO
In a PRG, by the way, you would want to add SET CONSOLE OFF before SET PRINTER... and SET CONSOLE ON after the last SET PRINTER.
>
>I tried this in the command window and a PRG:
>
>SET DEVICE TO PRINT
>@ 2,46 SAY 'test'
>SET PRINT TO
>SET DEVICE TO SCREEN
>
>and it sends output to printer as I would expect in both cases. However, if I call this PRG from another PRG or even place this code within a form method, nothing happens when this code fires. I traced it through the debugger, the code is being executed, but no output is sent to the printer. I then issue the above commands in the command window and I get my output correctly. What am I missing here?
>
>>Hiya Jim ----
>>
>>It has more to do with the way Windows and/or the network works. The entire print job is released to the printer at once. It makes sense when you think about the way a network has to manage resources.
>>
>>So, the practical solution is to SET PRINTER TO {whatever} before the @..SAYs and SET PRINTER TO {blank} afterward and the entire job spools to the network. You're not going to find a way to do it line by line and that would, indeed create some messy situations if someone else sent something to that printer.
>>
>>
>>>I'm not an old dbase guy (just happen to have an old dbase report I'm rewriting), so I'm asking this out of ignorance. When I run dbase 3 in windows I can issue SET DEVICE TO PRINT and immediately see output directed to the printer line by line with @...SAY (Output is not spooled). Am I forced to spool output with VFP? I guess there's nothing wrong with that, I just assumed I'd see the same output behavior as DBASE.
>>>
>>>>Hiya Rich ---
>>>>
>>>>
>>>>>
>>>>>You sort of answered your own question here.
>>>>>
>>>>>SET PRINT ON redirects @...SAY to the printer. (SET DEVICE TO PRINT redirects ? commands to the printer. Or did I get them backwards?)
>>>>>
>>>>
>>>>You've got them backwards but, hey, not bad for memory of old stuff.
>>>>
>>>>>SET PRINTER TO [anything] flushes the printer buffer. FoxPro buffers direct output to the printer until you change printers (or pretend to).
>>>>>
>>>>
>>>>Eloquently stated.
------------------------------------------------
John Koziol, ex-MVP, ex-MS, ex-FoxTeam. Just call me "X"
"When the going gets weird, the weird turn pro" - Hunter Thompson (Gonzo) RIP 2/19/05