📄 outmoney.pas
字号:
unit OutMoney;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, StdCtrls, Buttons, ToolWin,Printers,
ComCtrls;
type
TOutMoney_from = class(TForm)
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Panel1: TPanel;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
OutMoney_q: TADOQuery;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
OutMoney_from: TOutMoney_from;
implementation
uses NumberManger;
{$R *.dfm}
procedure TOutMoney_from.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TOutMoney_from.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TOutMoney_from.FormShow(Sender: TObject);
begin
OutMoney_q.close;
OutMoney_q.OPen;
end;
procedure TOutMoney_from.BitBtn1Click(Sender: TObject);
const
LeftBlank=1;//定义页边距单位厘米
RightBlank=1;
TopBlank=2;
BottomBlank=3;
var
PointX,PointY,lx,ly:integer;
PointScale,PrintStep:integer;
s:string;
x,y,y1:integer;
i,j:integer;
print_ti:boolean;
comno:string;
begin
print_ti:=false;
comno:='hl00';
//获取当前打印机的分辨率
PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);
//根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例
PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5);
j:=0;
//横向打印
for i:=0 to DBGrid1.FieldCount-1 do
begin
if DBGrid1.Columns[i].Visible then
begin
j:=j+1;
end;
end;
if j<10 then
printer.Orientation:=poPortrait
else
printer.Orientation:=poLandscape;
//打印的字体和大小
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=14;
//根据字体的大小确定每行的高度
s:='有限公司';
PrintStep:=printer.canvas.TextHeight(s)+26;
//打印的起点位置
x:=PointX*LeftBlank;
y:=PointY*TopBlank;
ly:=PointY*TopBlank+100;
//DataSource1是DBGrid1所连接的数据源
if ((DataSource1.DataSet).Active=true) and ((DataSource1.DataSet).RecordCount>0) then
begin
printer.BeginDoc;
(DataSource1.DataSet).First;
while not (DataSource1.DataSet).Eof do
begin //打印DBGrid中的所有列
for i:=0 to DBGrid1.FieldCount-1 do
begin
if DBGrid1.Columns[i].Visible then
begin
//假如所要打印的列超出了打印范围,则忽略该列
if (x+DBGrid1.Columns.Items[i].Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank)then
begin //画表格线
//**打印标题**//
if y=PointY*TopBlank then
begin
if not print_ti then
begin
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=18;
comno:=' 出口明细表 ' ;
Printer.Canvas.TextOut(x+60,y-160,comno);
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=14;
comno:='期号:'+saleperiod+' 打印时间:'+DateToStr(Date);
printer.Canvas.TextOut(x,y-20,comno);
print_ti:=true;
y:=y+100;
end;
end;
Printer.Canvas.Rectangle(x,y-8,x+DBGrid1.Columns.Items[i].Width*PointScale,y+PrintStep);
if y=ly then
begin
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=14;
Printer.Canvas.TextOut(x+8,y,DBGrid1.Columns[i].Title.Caption);
end
else
begin
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=14;
Printer.Canvas.TextOut(x+8,y,DBGrid1.Fields[i].asString);
end;
end;
//计算下一列的横坐标
x:=x+DBGrid1.Columns.Items[i].Width*PointScale;
end;
end;
//if not (y=PointY*TopBlank) then (DataSource1.DataSet).next;
if not (y=ly) then (DataSource1.DataSet).next;
x:=PointX*LeftBlank;
y:=y+PrintStep; //换页
if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
begin
Printer.NewPage;
y:=PointY*TopBlank;
print_ti:=false;
end;
end;
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=14;
//comno:='共'+IntToStr(emppaylistsp.RecordCount)+'条记录';
Printer.Canvas.TextOut(x+60,y+60,comno);
printer.EndDoc;
Application.MessageBox('打印完成','打印',32);
(DataSource1.DataSet).First;
end ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -