⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwprint.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
{***********************************************}
{                                               }
{       名    称:通用打印程序                  }
{       作    者:李洪辉                        }
{       创建日期:2003-05-02                    }
{       修改日期:2003-05-02                    }
{                                               }
{***********************************************}
unit HwPrint;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, Buttons, Grids, CheckLst, fr_prntr,
  Db, Printers, ExtCtrls, fr_Class, fr_DBSet;

type
  THwPrintForm = class(TForm)
    PageControl1: TPageControl;
    tsFields: TTabSheet;
    tsPage: TTabSheet;
    lblSelected: TLabel;
    lblTitle: TLabel;
    edtReportTitle: TEdit;
    bbtnPrint: TBitBtn;
    bbtnExit: TBitBtn;
    CheckListBox1: TCheckListBox;
    DataSource1: TDataSource;
    sgFields: TStringGrid;
    GroupBox3: TGroupBox;
    lblWidth: TLabel;
    lblHeight: TLabel;
    cbPaper: TComboBox;
    edtWidth: TEdit;
    edtHeight: TEdit;
    GroupBox2: TGroupBox;
    Image2: TImage;
    Image1: TImage;
    rbVertical: TRadioButton;
    rbHorizontal: TRadioButton;
    GroupBox4: TGroupBox;
    lblTop: TLabel;
    lblBottom: TLabel;
    lblLeft: TLabel;
    lblRight: TLabel;
    edtTop: TEdit;
    upTop: TUpDown;
    edtBottom: TEdit;
    udBottom: TUpDown;
    edtLeft: TEdit;
    udLeft: TUpDown;
    edtRight: TEdit;
    udRight: TUpDown;
    tsFont: TTabSheet;
    pnlTitle: TPanel;
    pnlColumn: TPanel;
    pnlData: TPanel;
    pnlFoot: TPanel;
    bbtnTitle: TBitBtn;
    FontDialog1: TFontDialog;
    bbtnColumn: TBitBtn;
    bbtnData: TBitBtn;
    bbtnFoot: TBitBtn;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    lblFields: TLabel;
    frReport1: TfrReport;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbtnPrintClick(Sender: TObject);
    procedure bbtnExitClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure cbPaperClick(Sender: TObject);
    procedure rbVerticalClick(Sender: TObject);
    procedure rbHorizontalClick(Sender: TObject);
    procedure bbtnTitleClick(Sender: TObject);
    procedure bbtnColumnClick(Sender: TObject);
    procedure bbtnDataClick(Sender: TObject);
    procedure bbtnFootClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure sgFieldsSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure sgFieldsKeyPress(Sender: TObject; var Key: Char);
  private
    Page:TfrPage;
    FDataSet:TDataSet;
    FReportDataSet: TfrDBDataSet;
//    FColumnDataSet: TfrUserDataSet;
    ACols, ARows: Integer;
    function GetPrintWidth(AFieldName:string):string;
    function GetFieldName(AFieldName:string):string;
    { Private declarations }
  public
    function OpenPrint(ADataSet:TDataSet):variant;
    procedure SetInterface;
    { Public declarations }
  end;

var
  HwPrintForm: THwPrintForm;

implementation

uses CommFun;

{$R *.DFM}

function THwPrintForm.OpenPrint(ADataSet:TDataSet):variant;
var
  I:integer;
begin
  DataSource1.DataSet:=ADataSet;
  FDataSet:=ADataSet;
  if not ADataSet.Active then ADataSet.Open;
  CheckListBox1.Items.Clear;
  for I:=0 to ADataSet.FieldCount-1 do
  begin
    if ADataSet.Fields[I].Visible then
      CheckListBox1.Items.Add(ADataSet.Fields[I].DisplayLabel);
  end;
end;

procedure THwPrintForm.SetInterface;
begin
  Font.Name:=AFontName;
  Caption:=GetDBString('PRT10001001');  //自定义打印
  sgFields.Cells[0,0]:=GetDBString('PRT10001002');  //项目名称
  sgFields.Cells[1,0]:=GetDBString('PRT10001003');  //宽度(毫米)
  bbtnPrint.Caption:=GetDBString('PRT10001004');   //打印(&P)
  bbtnExit.Caption:=GetDBString('PRT10001005');    //退出(&X)
  tsFields.Caption:=GetDBString('PRT10001006');  //项目选择
  tsPage.Caption:=GetDBString('PRT10001007');  //页面设定
  tsFont.Caption:=GetDBString('PRT10001008');  //字体设置
  lblSelected.Caption:=GetDBString('PRT10001009');  //项目选择
  lblFields.Caption:=GetDBString('PRT10001010');  //打印项目
  lblTitle.Caption:=GetDBString('PRT10001011');  //报表标题
  GroupBox2.Caption:=GetDBString('PRT10001012');  //方向
  GroupBox3.Caption:=GetDBString('PRT10001013');  //页面尺寸
  GroupBox4.Caption:=GetDBString('PRT10001014');  //边距
  lblWidth.Caption:=GetDBString('PRT10001015');  //宽度(毫米)
  lblHeight.Caption:=GetDBString('PRT10001016');  //高度(毫米)
  lblTop.Caption:=GetDBString('PRT10001017');  //上边界(毫米)
  lblBottom.Caption:=GetDBString('PRT10001018');  //下边界(毫米)
  lblLeft.Caption:=GetDBString('PRT10001019');  //左边界(毫米)
  lblRight.Caption:=GetDBString('PRT10001020');  //右边界(毫米)
  rbVertical.Caption:=GetDBString('PRT10001021');  //纵向
  rbHorizontal.Caption:=GetDBString('PRT10001022');  //横向
  pnlTitle.Caption:=GetDBString('PRT10001023');  //报表名称
  pnlColumn.Caption:=GetDBString('PRT10001024');  //列标题
  pnlData.Caption:=GetDBString('PRT10001025');  //数据行
  pnlFoot.Caption:=GetDBString('PRT10001026');  //报表页脚
  bbtnTitle.Caption:=GetDBString('PRT10001027');  //字体
  bbtnColumn.Caption:=bbtnTitle.Caption;
  bbtnData.Caption:=bbtnTitle.Caption;
  bbtnFoot.Caption:=bbtnTitle.Caption;
  PageControl1.ActivePageIndex:=0;
end;

procedure THwPrintForm.FormCreate(Sender: TObject);
begin
  frReport1.Clear;
  frReport1.Pages.Add;
  Page:=frReport1.Pages[0];
  cbPaper.Items:=Prn.PaperNames;
  cbPaper.ItemIndex:=Prn.GetSizeIndex(Page.pgSize);
  cbPaper.OnClick(Self);
  if Page.pgor=poPortrait then
    rbVertical.Checked:=True
  else
    rbHorizontal.Checked:=True;

  //自定义纸张大小
  edtWidth.Text := '';
  edtHeight.Text := '';
  if Page.pgSize = $100 then
  begin
    edtWidth.Text := FloatToStrF(Page.pgWidth / 10, ffGeneral, 4, 2);
    edtHeight.Text := FloatToStrF(Page.pgHeight / 10, ffGeneral, 4, 2);
  end;
  edtTop.Text := FloatToStrF(Page.pgMargins.Top * 5 / 18, ffGeneral, 4, 2);
  edtBottom.Text := FloatToStrF(Page.pgMargins.Bottom * 5 / 18, ffGeneral, 4, 2);
  edtLeft.Text := FloatToStrF(Page.pgMargins.Left * 5 / 18, ffGeneral, 4, 2);
  edtRight.Text := FloatToStrF(Page.pgMargins.Right * 5 / 18, ffGeneral, 4, 2);
  //设置界面信息
  SetInterface;
end;

procedure THwPrintForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//
end;

procedure THwPrintForm.bbtnPrintClick(Sender: TObject);
var
  v: TfrView;
  b: TfrBandView;
  w, h, p: Integer;
  I:Integer;
  FLeft,FWidth:Integer;
  SavePlace:TBookmark;
  AWidth,AColWidth:Integer;
begin
//打印
  if FDataSet = nil then Exit;

  AWidth:=0;
  AColWidth:=0;
  for I:=1 to sgFields.RowCount-1 do
  begin
    try
      AColWidth:=StrToInt(sgFields.Cells[1,I]);
    except
    end;
    AWidth:=AWidth+AColWidth;
  end;
  if AWidth=0 then
  begin
    ShowMsg('UMS10000346');  //没有选择打印的项目或打印项目的宽度为零
    Abort;
  end;

  frReport1.Clear;
  frReport1.Pages.Add;
  frReport1.DoublePass:=True;
  Page := frReport1.Pages[0];
  if rbVertical.Checked then Page.pgOr := poPortrait else Page.pgOr := poLandscape;
  p := Prn.PaperSizes[cbPaper.ItemIndex];
  w := 0; h := 0;
  if p = $100 then
  begin
    try
      w := Round(StrToFloat(edtWidth.Text) * 10);
      h := Round(StrToFloat(edtHeight.Text) * 10);
    except
      p := 9; // A4
    end;
  end;
  try
    Page.pgMargins := Rect(Round(StrToFloat(edtTop.Text) * 18 / 5),
                      Round(StrToFloat(edtBottom.Text) * 18 / 5),
                      Round(StrToFloat(edtLeft.Text) * 18 / 5),
                      Round(StrToFloat(edtRight.Text) * 18 / 5));
  except
    Page.pgMargins := Rect(0, 0, 0, 0);
  end;
  Page.ChangePaper(p, w, h, Page.pgBin, Page.pgOr);

  with Page do
  begin
    pgMargins.Top:=Round(StrToFloat(edtTop.Text)* 18 / 5);
    pgMargins.Bottom:=Round(StrToFloat(edtBottom.Text)* 18 / 5);
    pgMargins.Left:=Round(StrToFloat(edtLeft.Text)* 18 / 5);
    pgMargins.Right:=Round(StrToFloat(edtRight.Text)* 18 / 5);
  end;

  if AWidth*10>=Page.pgWidth then
  begin
    ShowMsg('UMS10000347');  //打印项目宽度超过页面宽度
    Abort;
  end;

  SavePlace:=FDataSet.GetBookmark;
  FDataSet.DisableControls;

  FReportDataSet:=TfrDBDataSet.Create(Self);
  FReportDataSet.Name:='frDBDataSet1';
  FReportDataSet.DataSet:=FDataSet;

  //报表标题  Page header
  b := TfrBandView(frCreateObject(gtBand, ''));
  b.BandType := btPageHeader;
  b.SetBounds(0, 160, 1000, 80);
  Page.Objects.Add(b);

  v := frCreateObject(gtMemo, '');
  v.SetBounds(0, 20, 140, 30);
  v.BandAlign := baWidth;
  TfrMemoView(v).Alignment := frtaCenter + frtaMiddle;
  TfrMemoView(v).Font := pnlTitle.Font;
  v.Memo.Add(ACompanyName);
  Page.Objects.Add(v);

  v := frCreateObject(gtMemo, '');
  v.SetBounds(0, 50, 120, 30);
  v.BandAlign := baWidth;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -