'Joe C. Hecht' Below are some code snippets to change the printer settings. Wherever the changes are made, you could instead examine the printer settings. See the documentation for ExtDeviceMode and the TDEVMODE structure as well the printer escape GETSETPAPERBINS and GetDeviceCaps(). ********************************************* One way to change printer settings at the start of a print job is to change the printers devicemode. Example: -------------------------------------------------------------------------------- var Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDMode : THandle; PDMode : PDEVMODE; begin Printer.PrinterIndex := Printer.PrinterIndex; Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin pDMode^.dmFields := pDMode^.dmFields or DM_COPIES; pDMode^.dmCopies := 5; GlobalUnlock(hDMode); end; GlobalFree(hDMode); end; Printer.PrinterIndex := Printer.PrinterIndex; Printer.BeginDoc; Printer.Canvas.TextOut(100,100, 'Test 1'); Printer.EndDoc; -------------------------------------------------------------------------------- Another way is to change TPrinter. This will enable you to change settings in mid job. You must make the change >>>between<<< pages. To do this: Before every startpage() command in printers.pas in the Source\VCL directory add something like: -------------------------------------------------------------------------------- DevMode.dmPaperSize:=DMPAPER_LEGAL {any other devicemode settings go here} Windows.ResetDc(dc,Devmode^); -------------------------------------------------------------------------------- This will reset the pagesize. you can look up DEVMODE in the help to find other paper sizes. You will need to rebuild the vcl source for this to work, by adding the path to the VCL source directory to the beginning of the library path s tatement under tools..options.. library...libaray path. Quit Delphi then do a build all. Another quick note... When changing printers, be aware that fontsizes may not always scale properly. To ensure proper scaling set the PixelsPerInch property of the font. Here are two examples: -------------------------------------------------------------------------------- uses Printers; var MyFile: TextFile; begin AssignPrn(MyFile); Rewrite(MyFile); Printer.Canvas.Font.Name := 'Courier New'; Printer.Canvas.Font.Style := [fsBold]; Printer.Canvas.Font.PixelsPerInch:= GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY); Writeln(MyFile, 'Print this text'); System.CloseFile(MyFile); end; uses Printers; begin Printer.BeginDoc; Printer.Canvas.Font.Name := 'Courier New'; Printer.Canvas.Font.Style := [fsBold]; Printer.Canvas.Font.PixelsPerInch:= GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY); Printer.Canvas.Textout(10, 10, 'Print this text'); Printer.EndDoc; end;