我想将grid中的内容能按页按一定的缩放比例预览,但字体大小不知如何改变,如何分页
希望高手能指点一二!提供正确、完整答案者,送100分!
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.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
          form2.Image1.Canvas.Rectangle(x,y,(x+4+DBGrid1.Columns.items[i].Width)*pointx,pointy*(y+4+printstep));
          if y=topblank then
            form2.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Columns[i].Title.Caption)
          else
            form2.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;
      y:=y+(printstep+8);
    end;
    application.MessageBox('预览完成','提示',32);
  end;
  form2.Show;
end;

解决方案 »

  1.   

    直接把你在image中预览的图进行缩放吧
      

  2.   

    to: inforum(坛中人,不得不用VB) 
    小弟愚钝,说详细一些,行吗
      

  3.   

    本贴在此游荡了几天了,如果csdn没有高手能解决的话,我将去大富翁去看看,那里的人气比这儿旺,csdn原本挺喜欢的,现在。。
      

  4.   

    至于分页你只能通过程序去判断是否一页已经打满,如果满了再换一页(再创建一个Image,或者你一次只计算生成当前页面中显示的内容,等用户按了下一页/上一页,然后再重新计算绘画即可,打印也是一样)