谁能解释这几个问题,请高手入内 (100分)

  • 主题发起人 blad_pitt
  • 开始时间
B

blad_pitt

Unregistered / Unconfirmed
GUEST, unregistred user!
得到一些源代码,是关于打印的,由于没有注释,有几处不甚明白,望各位指点。
procedure TForm1.Button1Click(Sender: TObject);
const
leftblank=1;
rightblank=1;
topblank=1;
bottomblank=1;
var
pointx,pointy:integer;
printstep:integer;
previewscale,x,y,i:integer;
s:string;
begin

previewscale:=strtoint(edit1.Text);
pointx:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);// div previewscale;{得到页边距后为什么要除2.54呢?}
pointy:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);// div previewscale;
form2:=Tform2.Create(self);
Form2.Image1.Canvas.Font.Name:='宋体';
form2.Image1.Canvas.Font.Size:=10;
s:='商品信息';
printstep:=Form2.Image1.Canvas.TextHeight(s);
{这个s的高度是怎么回事?}
x:=leftblank;
y:=topblank;
if (query1.Active=true) and (query1.RecordCount>0) then
begin
query1.first;
while not query1.eofdo
begin
for i:=0 to DBGrid1.FieldCount-1do
begin
if (x+DBGrid1.Columns.Items.Width)<=(Printer.PageWidth-pointx*rightblank) then

{pointx*rightblank得到的是什么?}
begin
form2.Image1.Canvas.Rectangle(x,y,(x+4+DBGrid1.Columns.items.Width)*pointx,pointy*(y+4+printstep));
if y=topblank then
form2.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Columns.Title.Caption)
else
form2.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Fields.AsString);
end;
x:=x+DBGrid1.Columns.Items.Width;
end;
if not (y=pointy*topblank) then
query1.Next;
x:=leftblank;
y:=y+(printstep+8);
end;
application.MessageBox('预览完成','提示',32);
end;
form2.Show;
end;

end.

还有就是这段程序执行后发现预览中少了一行记录,是第一行,这又是怎么搞的?
 
1、除以2.54是把厘米换算成英寸,GetDeviceCaps计算出每英寸的点数(ppi),除以2.54就是每厘米的点数。
2、高度s是取字符串在画布上的显示高度,用于控制行距。
3、pointx是个比例因子,用于统一“Printer.PageWidth”和“rightblank”的单位。
 
to fatalexception:
你还差最后一个问题了,答出来立刻给分。
 
这句
if not (y=pointy*topblank) then
query1.Next;
改为
if not (y=topblank) then
query1.Next;
就是“预览完成”往上数第四行。
 
老兄,还在吗?
 

再不放分我要报警了啊 :)
我过几天要做项目了,现在攒点分好问问题,我分也不多,你在大富翁里资格比我老,技术
比我高,分数比我多,啊,快放分啦! :)
 
打劫!!!不给你就死定了饿。
 
接受答案了.
 
分怎么给boy1979了,都是fatalexception回答的。
 
fatalexception 用心良苦呀[:D]
 
顶部