A two months ago Gareet Wilson answer this question and I tested that work fine... The best way I have found is to do the following, which uses the Windows printing routines, but sends data directly to the printer (you may have to changes things around, but this is a good outline}. I figured out a lot of this from "Three Printing Techniques for Windows 95 Console Applications," by David Tamashiro in the C/C++ User's Journal, January 1997. **First, include the following: var PrinterHandle:THandle; {the handle to the printer} uses WinSpool, Printers; type TDocInfo1=packed record {the replacement for DOC_INFO_1} lpszDocName: PAnsiChar; lpszOutputFile: PAnsiChar; lpszDatatype: PAnsiChar; end; **Then, open a printer according to its name: var CTitle:array[0..31] of Char; CMode:array[0..4] of Char; DocInfo:TDocInfo1; begin StrPLopy(CTitle, 'My Title'); {setup our title buffer} StrPCopy(CMode, 'RAW'); {put "RAW" in our mode buffer} FillChar(DocInfo, SizeOf(DocInfo), 0); {fill the DocInfo structure with zero's} with DocInfo do begin lpszDocName:=CTitle; {set the title of our document} lpszOutputFile:=nil; {specify no output file} lpszDatatype:=CMode; {set the mode, which we have specified as "RAW"} end; OpenPrinter('Printer Name Here', PrinterHandle, nil); StartDocPrinter(PrinterHandle, 1, @DocInfo); StartPagePrinter(PrinterHandle); **Now, print your text: var Count:DWord; {the number of bytes written} begin WritePrinter(PrinterHandle, PChar(printText), Length(printText), Count); **When you are finished printing, tidy things up: EndPagePrinter(PrinterHandle); {end the page} EndDocPrinter(PrinterHandle); {end the document} if PrinterHandle<>0 then {if we have a printer handle} begin ClosePrinter(PrinterHandle); {close the printer} PrinterHandle:=0; {show that we have closed the printer} end; I think that about covers it. Hope this helps.