procedure TForm1.Button3Click(Sender: TObject);
var
xPrt:TPrinter;
Left,Top,WordHeight , wordWidth : Integer;
j,k:integer; //循环变量
PWidth:integer; //纸张宽度 XmlRoot:IXMLNode;
XmlNode:IXMLNode;
StrName,StrMobileNum,StrReDate,StrPrtDate:String; //存放客户信息
PrtIni:TIniFile;
IntCCnt:integer; //列行数
IniLeft:integer; //ini文件定义的左起始位
IniTitle:String; //ini文件定义的标题
begin
//取客户信息
XMLDocument.LoadFromFile('Dtl.xml');
XmlRoot:=XMLDocument.DocumentElement;
XmlNode:= XmlRoot.ChildNodes[0];
StrName:= XmlNode.Text;
XmlNode:= XmlRoot.ChildNodes[1];
StrMobileNum:= XmlNode.Text;
XmlNode:= XmlRoot.ChildNodes[2];
StrReDate:= XmlNode.Text;
XmlNode:= XmlRoot.ChildNodes[3];
StrPrtDate:= XmlNode.Text; XmlNode:=XmlRoot.ChildNodes[4];
xPrt:=Tprinter.Create;
xPrt.PrinterIndex:=xPrt.Printers.IndexOf('Star TUP942 Raster Printer');
with xPrt do
begin
BeginDoc;
Canvas.Font.Name:='宋体';
Canvas.Font.Size:=9;
WordHeight:=Canvas.TextHeight('字');
wordWidth:=Canvas.TextWidth('字'); Left:=20;
Top:=0;
//打印标题
//先定位到纸的中间位置,再向左偏移字数*每个字宽度的一半,这样信息才可以居中显示
PWidth:=xPrt.PageWidth;
//Canvas.TextOut();
Canvas.TextOut(Round(((PWidth-Left)/2)-7*WordWidth) ,Top,'客户详单');//今天这里出错,显示地址冲突之类的错误
INC(Top,WordHeight+1);//换行
Canvas.TextOut(Left,Top,'客户名称:'+StrName);
Canvas.TextOut(Round((xPrt.PageWidth-Left)/2),Top,'客户号码:'+StrMobileNum);
INC(Top,WordHeight+1);
Canvas.TextOut(Left,Top,'查询帐期:'+StrReDate);
INC(Top,WordHeight+1);
Canvas.TextOut(Left,Top,'查询日期:'+StrPrtDate);
INC(Top,WordHeight+1);
{开始打印详单内容信息 }
//开始打印标题
PrtIni:=TIniFile.Create('D:\z\delphi打印\project\prt.ini');
IntCCnt:=PrtIni.ReadInteger('Dtl','CCnt',9); for j:=1 to IntCCnt do
begin
IniLeft:=PrtIni.ReadInteger('Dtl','CLeft_'+inttostr(j),0);
IniTitle:=PrtIni.ReadString('Dtl','CName_'+inttostr(j),'');
//Canvas.MoveTo(IniLeft,Top);
Canvas.TextOut(IniLeft,Top,IniTitle); //昨天这里出错,也是地址冲突之类
end;
INC(Top,WordHeight+1);
EndDoc;
end;
xPrt.Free;
PrtIni.Free;
end;
var
xPrt:TPrinter;
Left,Top,WordHeight , wordWidth : Integer;
j,k:integer; //循环变量
PWidth:integer; //纸张宽度 XmlRoot:IXMLNode;
XmlNode:IXMLNode;
StrName,StrMobileNum,StrReDate,StrPrtDate:String; //存放客户信息
PrtIni:TIniFile;
IntCCnt:integer; //列行数
IniLeft:integer; //ini文件定义的左起始位
IniTitle:String; //ini文件定义的标题
begin
//取客户信息
XMLDocument.LoadFromFile('Dtl.xml');
XmlRoot:=XMLDocument.DocumentElement;
XmlNode:= XmlRoot.ChildNodes[0];
StrName:= XmlNode.Text;
XmlNode:= XmlRoot.ChildNodes[1];
StrMobileNum:= XmlNode.Text;
XmlNode:= XmlRoot.ChildNodes[2];
StrReDate:= XmlNode.Text;
XmlNode:= XmlRoot.ChildNodes[3];
StrPrtDate:= XmlNode.Text; XmlNode:=XmlRoot.ChildNodes[4];
xPrt:=Tprinter.Create;
xPrt.PrinterIndex:=xPrt.Printers.IndexOf('Star TUP942 Raster Printer');
with xPrt do
begin
BeginDoc;
Canvas.Font.Name:='宋体';
Canvas.Font.Size:=9;
WordHeight:=Canvas.TextHeight('字');
wordWidth:=Canvas.TextWidth('字'); Left:=20;
Top:=0;
//打印标题
//先定位到纸的中间位置,再向左偏移字数*每个字宽度的一半,这样信息才可以居中显示
PWidth:=xPrt.PageWidth;
//Canvas.TextOut();
Canvas.TextOut(Round(((PWidth-Left)/2)-7*WordWidth) ,Top,'客户详单');//今天这里出错,显示地址冲突之类的错误
INC(Top,WordHeight+1);//换行
Canvas.TextOut(Left,Top,'客户名称:'+StrName);
Canvas.TextOut(Round((xPrt.PageWidth-Left)/2),Top,'客户号码:'+StrMobileNum);
INC(Top,WordHeight+1);
Canvas.TextOut(Left,Top,'查询帐期:'+StrReDate);
INC(Top,WordHeight+1);
Canvas.TextOut(Left,Top,'查询日期:'+StrPrtDate);
INC(Top,WordHeight+1);
{开始打印详单内容信息 }
//开始打印标题
PrtIni:=TIniFile.Create('D:\z\delphi打印\project\prt.ini');
IntCCnt:=PrtIni.ReadInteger('Dtl','CCnt',9); for j:=1 to IntCCnt do
begin
IniLeft:=PrtIni.ReadInteger('Dtl','CLeft_'+inttostr(j),0);
IniTitle:=PrtIni.ReadString('Dtl','CName_'+inttostr(j),'');
//Canvas.MoveTo(IniLeft,Top);
Canvas.TextOut(IniLeft,Top,IniTitle); //昨天这里出错,也是地址冲突之类
end;
INC(Top,WordHeight+1);
EndDoc;
end;
xPrt.Free;
PrtIni.Free;
end;
try
....
PrtIni:=TIniFile.Create('D:\z\delphi打印\project\prt.ini');
try
.....
finally
PrtIni.free;
end;
finally
xPrt.free;
end; 保证都能正确的释放
xPrt:=Tprinter.Create;
应该是xPrt:=printer.Create; 还有就是它不需要free,否则关闭窗体的时候会出错。