预览时可以根据实际要求缩放,打印时可以吗!

解决方案 »

  1.   

    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的画布打印的部分程序,但有问题,希望提点建议
      

  2.   

    自己写一个Preview的Form
    在打印事件中使用ScaleBy方法将原报表改变大小就可以了
    我已经测试过了
    主要是Prevew.Zoom 与参数的设置问题
    需要调试一下
      

  3.   

    我个人觉得Qreport控件本身没有什么用处吧?你要控制它的大小干什么呢?
    反正你最后的控制都是用于打印的。我的程序中就基本上没有控制它们的大小。只是对其中的dbtext等控制了一下位置和大小。
      

  4.   

    借助于FINEPRINT软件,安装后会产生一个虚拟打印机,打印时打印到FINEPRINT,想打成什么样都行。用www.google.com搜索一下,下载