unit Unit1;
interface
{$IFDEF WIN32}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Printers;
{$ELSE}
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Printers, Print;
{$ENDIF}
type
TForm1 = class(TForm)
PrintDialog1: TPrintDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function PageSetup : bool;
function NewPage : bool;
public
{ Public declarations }
PageNumber : integer;
CanReset : bool;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}
function TForm1.PageSetup : bool;
var
pDevice : pChar;
pDriver : pChar;
pPort : pChar;
hDMode : THandle;
PDMode : PDEVMODE;
PrnHandle : THandle;
begin
result := false;
GetMem(pDevice, cchDeviceName);
GetMem(pDriver, MAX_PATH);
GetMem(pPort, MAX_PATH);
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
if hDMode <> 0 then begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then begin
{Change your printing settings here}
if not odd(PageNumber) then begin
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_LETTER;
end else begin
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_LEGAL;
end;
if Printer.Printing then
PrnHandle := Printer.Canvas.Handle
else
PrnHandle := Printer.Handle;
{$IFDEF WIN32}
if ResetDc(PrnHandle, pDMode^) <> 0 then
{$ELSE}
if ResetDc(PrnHandle, pDMode) <> 0 then
{$ENDIF}
CanReset := true else
CanReset := false;
Result := true;
GlobalUnlock(hDMode);
end;
end;
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;
function TForm1.NewPage : bool;
begin
Result := true;
if CanReset then
EndPage(Printer.Canvas.Handle) else
Printer.EndDoc;
Inc(PageNumber);
if PageSetUp then begin
if CanReset then begin
StartPage(Printer.Canvas.Handle);
Printer.Canvas.Refresh;
end else
Printer.BeginDoc;
end else begin
if CanReset then begin
StartPage(Printer.Canvas.Handle);
Printer.Abort;
end;
Result := false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if PrintDialog1.Execute then begin
{Setup printing}
PageNumber := 1;
if not PageSetUp then begin
ShowMessage('Unable to customize printer settings');
exit;
end;
Printer.BeginDoc;
{Print page one}
Printer.Canvas.TextOut(100,100, 'Test Page 1');
if not NewPage then begin
ShowMessage('Unable to customize printer settings');
exit;
end;
{Print page two}
Printer.Canvas.TextOut(100,100, 'Test Page 2');
if not NewPage then begin
ShowMessage('Unable to customize printer settings');
exit;
end;
{Print page three}
Printer.Canvas.TextOut(100,100, 'Test Page 3');
Printer.EndDoc;
end;
end;
end.