急救:利用画布对DBGRID查询结果进行无级缩放的预览与打印;(200分)

  • 主题发起人 true_afei
  • 开始时间
T

true_afei

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将grid中的内容能按页按一定的缩放比例预览,但不知如何改变字体大小,如何分页及缩入
希望高手能指点一二!
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;
form2:=Tform2.Create(self);
Form2.Image1.Canvas.Font.Name:='宋体';
form2.Image1.Canvas.Font.Size:=10;
s:='商品信息';
printstep:=Form2.Image1.Canvas.TextHeight(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
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;

 
改用DBGridEh不就得了?
 
高手们不要不好意思,分数可再加,还望不吝赐教!
 
无级缩放的预览, 可以考虑用图元文件 TMetaFile结合TMetaFileCanvas.
 
TO:xuxincheng, 你能说具体一点,我只是个新手
 
例程如下:
procedure TForm1.Button1Click(Sender: TObject);
var
mymeta:Tmetafile;
MyMetaCanvas:TMetafileCanvas;
begin
mymeta:=Tmetafile.Create;
mymeta.Width:=100;
mymeta.Height:=100;
MymetaCanvas:=TMetafileCanvas.Create(mymeta,0);
MymetaCanvas.Ellipse(0,0,100,100);//画图
mymetacanvas.Free;
Form1.Canvas.Draw(0,0,mymeta);//将图画到form上
mymeta.Free;
end;

Btw: 你不像新手.
 
我这段程序可以将查询的结果打印出来,但不知道如何进行字体的缩放及如何分页,请赐教!
TO:xuxincheng,你的建议我会试一下,谢谢,分结贴时给你,不好意思。
 
分页,就是打印一页再打印下一页用enddoc,当然,你要计算好你每页能打印多少条记录
写满一页后再调用enddoc,然后再调用begin
doc.
 
TO:yanghai0437
但是如何对整个表进行缩放处理呢?
 
tcanvas里有个函数StretchDraw可以实现缩放
先按1:1的比例画在一个画布上,然后按比例创建另一个画布
StretchDraw到另一画布上
 
我先画在IMAGE上,但由于字段比较多,显示不下,打印时可以设为横向打印,但在IMAGE中
不知如何处理,且在IMAGE中我也不知如何分页呀?
 
高手们快来帮忙呀,哪怕再提一点建议也好
 
青春易逝,各位大哥可再提一点建议
 
http://www.tommstudio.com/
有你需要的报表控件,看它的源码就可以了。
 
可惜这个问题不知要到什么时候才能有一个完整的答案
 
多人接受答案了。
 
顶部