中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>数据库开发>打印报表>文章内容

delphi 在打印中间改变打印设置

来源:站内 关于:bill 发布时间:2007-06-23   [收藏] [推荐]

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.


[浏览: 次]   
上一篇:delphi 获取打印机边距   下一篇:delphi 改变打印机的打印端口
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi 获取打印机状态
·delphi 打印时改变纸张大小
·delphi 判断打印机能否打印的PostScrip
·delphi 检测存在打印机
·delphi Tmemo,TstringList,Tstrings打
·delphi 如何保存打印机信息到注册表
·delphi 判断系统是否有打印机连接
·delphi 获取打印驱动,打印端口名
·delphi 改变打印机的打印端口
·delphi 使用打印机内置字体打印
·delphi 打印LabelsVCL组件
·delphi 如何发二进制字符到打印机
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932