📄 hwprint.pas.svn-base
字号:
{***********************************************}
{ }
{ 名 称:通用打印程序 }
{ 作 者:李洪辉 }
{ 创建日期: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 + -