//给你个例子,下面是我的程序片段:
//说明:users 里要加上printers
//定义变量 PPIX,PPIY,topmm,leftmm:integer;
//根据打印机分辩辩得出实际打印尺寸(毫米)
PPIX:=GetDeviceCaps(printer.Handle,LOGPIXELSX);
PPIY:=GetDeviceCaps(printer.Handle,LOGPIXELSY);
//取预设定的打印位置
with adoquery1do
begin
close;
sql.clear;
sql.Add('select * from dysz where 表类型=:vblx');
parameters.ParamByName('vblx').Value:='登记表';
open;
leftmargin:=Trunc(fieldbyname('左边距').AsInteger/25.4*PPIX);
topmargin:=Trunc(fieldbyname('上边距').AsInteger/25.4*PPIY);
end;
messagedlg('上好登记表后,按回车键开始打印.打印人:'+adoquery2.fieldbyname('姓名').asstring,mtinformation,[mbok],0);
printer.begin
Doc;
with adoquery2do
begin
with printer.Canvasdo
begin
// font.Charset:=ANSI_CHARSET;
font.Charset:=GB2312_CHARSET;
font.name:='宋体';
font.Style:=[fsBold];
font.Size:=8;
mkdywz('编号','cb',leftmm,topmm);//取字段'编号'的预设打印位置
TextOut(leftmargin+leftmm,topmargin+topmm,fieldbyname('户别').AsString+fieldbyname('编号').asstring);//在指定位置打印编号
mkdywz('姓名','cb',leftmm,topmm);//取字段'姓名'的预设打印位置
TextOut(leftmargin+leftmm,topmargin+topmm,fieldbyname('姓名').AsString);//在指定位置打印姓名
mkdywz('性别','cb',leftmm,topmm);//取字段性别预设打印位置
TextOut(leftmargin+leftmm,topmargin+topmm,fieldbyname('性别').AsString);//在指定位置打印性别;
....
....
printer.enddoc;
end;
//取打印位置的函数
声明
procedure mkdywz(Azdm,Ablx:string;var vleft,vtop:integer);
内容
procedure Tdybu.mkdywz(Azdm,Ablx:string;var vleft,vtop:integer);
begin
with adoquery1do
begin
close;
sql.Clear;
sql.Add('select * from dywz where zdm=:vzdm and blx=:vblx');
parameters.ParamByName('vzdm').Value:=Azdm;
parameters.ParamByName('vblx').Value:=Ablx;
open;
vleft:=trunc(fieldbyname('leftwz').AsInteger/25.4*PPIX);
vtop:=trunc(fieldbyname('topwz').AsInteger/25.4*PPIY);
end;
end;