TO: dupenf(飞跃人生): 五星级高手啊!佩服。但如果我用画布进行缩放打印,但不知如何进行控制,烦大师帮忙看一下如下程序有何问题,给点提示: procedure Tform1.Button4Click(Sender: TObject); const leftblank=1; rightblank=1; topblank=1; bottomblank=1; var pointx,pointy:integer; printstep:integer; x,y,i:integer; s:string; begin previewscale:=strtoint(edit1.Text); pointx:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);// div previewscale; pointy:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);// div previewscale; form3:=Tform3.Create(self); Form3.Image1.Canvas.Font.Name:='宋体'; form3.Image1.Canvas.Font.Size:=10; s:='商品信息'; printstep:=Form3.Image1.Canvas.TextHeight(s); x:=leftblank; y:=topblank; if (query1.Active=true) and (query1.RecordCount>0) then begin query1.first; while not query1.eof do begin for i:=0 to DBGrid1.FieldCount-1 do begin if (x+DBGrid1.Columns.Items[i].Width)<=(Printer.PageWidth-pointx*rightblank) then begin form3.Image1.Canvas.Rectangle(x,y,(x+4+DBGrid1.Columns.items[i].Width)*pointx,pointy*(y+4+printstep)); if y=topblank then form3.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Columns[i].Title.Caption) else form3.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Fields[i].AsString); end; x:=x+DBGrid1.Columns.Items[i].Width; end; if not (y=pointy*topblank) then query1.Next; x:=leftblank; if y+(printstep+8)>=form3.Image1.Height-bottommargin then begin y:=topmargin; end else y:=y+(printstep+8); end; application.MessageBox('预览完成','提示',32); end; form3.AutoSize:=true; form3.Image1.AutoSize:=true; form3.Show; form3.Repaint; end; 以上是DBGRID查询结果通过IMAGE的画布打印的部分程序,但有问题,希望提点建议
五星级高手啊!佩服。但如果我用画布进行缩放打印,但不知如何进行控制,烦大师帮忙看一下如下程序有何问题,给点提示:
procedure Tform1.Button4Click(Sender: TObject);
const
leftblank=1;
rightblank=1;
topblank=1;
bottomblank=1;
var
pointx,pointy:integer;
printstep:integer;
x,y,i:integer;
s:string;
begin
previewscale:=strtoint(edit1.Text);
pointx:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);// div previewscale;
pointy:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);// div previewscale;
form3:=Tform3.Create(self);
Form3.Image1.Canvas.Font.Name:='宋体';
form3.Image1.Canvas.Font.Size:=10;
s:='商品信息';
printstep:=Form3.Image1.Canvas.TextHeight(s);
x:=leftblank;
y:=topblank;
if (query1.Active=true) and (query1.RecordCount>0) then
begin
query1.first;
while not query1.eof do
begin
for i:=0 to DBGrid1.FieldCount-1 do
begin
if (x+DBGrid1.Columns.Items[i].Width)<=(Printer.PageWidth-pointx*rightblank) then
begin
form3.Image1.Canvas.Rectangle(x,y,(x+4+DBGrid1.Columns.items[i].Width)*pointx,pointy*(y+4+printstep));
if y=topblank then
form3.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Columns[i].Title.Caption)
else
form3.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Fields[i].AsString);
end;
x:=x+DBGrid1.Columns.Items[i].Width;
end;
if not (y=pointy*topblank) then query1.Next;
x:=leftblank;
if y+(printstep+8)>=form3.Image1.Height-bottommargin then
begin
y:=topmargin;
end
else
y:=y+(printstep+8);
end;
application.MessageBox('预览完成','提示',32);
end;
form3.AutoSize:=true;
form3.Image1.AutoSize:=true;
form3.Show;
form3.Repaint;
end; 以上是DBGRID查询结果通过IMAGE的画布打印的部分程序,但有问题,希望提点建议
在打印事件中使用ScaleBy方法将原报表改变大小就可以了
我已经测试过了
主要是Prevew.Zoom 与参数的设置问题
需要调试一下
反正你最后的控制都是用于打印的。我的程序中就基本上没有控制它们的大小。只是对其中的dbtext等控制了一下位置和大小。