From: "Peter Below (TeamB)" <100113.1101@compuXXserve.com> Subject: Re: What's wrong with this code (set paper size on NT) Date: 26 May 2000 00:00:00 GMT Message-ID: Content-Transfer-Encoding: 8bit References: <8glhuq$3474@bornews.borland.com> Content-Type: text/plain; charset=iso-8859-1 X-Trace: 26 May 2000 14:34:22 -0800, 193.159.3.192 Organization: TeamB Mime-Version: 1.0 Reply-To: 100113.1101@compuXXserve.com Newsgroups: borland.public.delphi.winapi In article <8glhuq$3474@bornews.borland.com>, Michael Tsai wrote: > Hello, > I'm trying to add a custom paper size on NT/Win2000, > using the code: > > function SetCustomPaperSize: Boolean; -snip- > procedure TForm1.btnTestClick(Sender: TObject); > begin > if not SetCustomPaperSize then > Exit; > // Print test > Printer.BeginDoc; > Printer.Canvas.TextOut(100, 100, 'Hello, this is Michael!'); > Printer.EndDoc; > end; > > The SetCustomerPaperSize returns true, but the paper' length > seems still be A4 size (it should be set to half an A4 size). > Would you please give me some suggestion?? Michael, adding a form does not make your printer automatically use it. You have to modify the printers DEVMODE too. var Device, Driver, Port: array[0..80] of Char; DevMode: THandle; pDevmode: PDeviceMode; begin // Get printer device name etc. Printer.GetPrinter(Device, Driver, Port, DevMode); // force reload of DEVMODE Printer.SetPrinter(Device, Driver, Port, 0) ; // get DEVMODE handle Printer.GetPrinter(Device, Driver, Port, DevMode); If Devmode <> 0 Then Begin // lock it to get pointer to DEVMODE record pDevMode := GlobalLock( Devmode ); If pDevmode <> Nil Then try With pDevmode^ Do Begin // modify form StrLCopy( dmFormname, 'TestPaper', CCHFORMNAME-1 ); // tell printer driver that dmFormname field contains // data it needs to inspect. dmFields := dmFields or DM_FORMNAME; End; finally // unlock devmode handle. GlobalUnlock( Devmode ); end; End; { If } end; > Peter Below (TeamB) 100113.1101@compuserve.com) No replies in private e-mail, please, unless explicitly requested!