网站首页

家园论坛

老版论坛

家园博客

业界新闻

技术文档

下载中心

速查中心

图片中心

硬件资讯
上一篇:pb中使用winapi生成唯一的永不重复字符串(UUID) 下一篇:根据显示器分辨率设置窗口显示位置
数据窗口自适应打印纸张大小。

来源: 作者: 添加日期:2005-9-4 19:19:56 点击次数:

/*------------------------------------------------------------
  函数名: f_dw_Zoom
  Written by  Vial.Z
  参数:
     datawindow dw_print--> 要打印的数据窗口
     integer    nMinZoom --> 极限缩小比例(缩小范围不能太大,否则不清晰)
  返回值:
     -1   error
     0   找不到合适的值
     >0  找到的合理值
  作用:
     纸张大小满足数据窗口的要求,返回100;
     当数据窗口宽度太大,无法在一页纸张上打印时,该程序寻找一个最佳缩小比例值,
     使得数据窗口的内容恰好能在当前设定的纸张下打印出来。
     如窗口缩小到85%可以在一页上打印时,返回值为85
-------------------------------------------------------------------*/

if not IsValid(dw_print) then
 return -1
end if

dw_print.object.datawindow.print.preview = true   /*预览模式必须打开*/
dw_print.SetRedraw(FALSE)  /*调整放大比例过程中,停止重绘控件,节省程序时间*/

string ls_H_Page     /*水平打印占据的页数*/
string ls_zoom      /*设定的缩小百分比整数值*/
Integer li_max = 100    /*从百分百大小开始测试*/
integer li_min     /*极限缩小值,最多缩小到nn%*/
Integer li_use       /*当前测试值*/
Integer li_OK  = 0    /*最优可用值*/
Integer li_count = 0    /*算法循环执行的次数*/


li_min = nMinZoom            /*赋最小测试值*/

li_use = li_max     /*从原始大小(100)开始测试。逐渐缩小放大比例*/
do while li_min <= li_max 
 li_count ++
  /*调整 zoom值,并测试当前宽度打印时横向所占的面数*/
  ls_zoom = string(li_use)
  dw_print.modify("datawindow.zoom = " + ls_zoom)
  ls_H_Page = dw_print.describe( " evaluate('PageCountAcross()',"+string(dw_print.object.datawindow.firstrowonpage)+")"  )
  
  if Integer(ls_H_Page) = 1 then  /*一页足以打印出来*/
   li_OK = li_use         /*记录这个可用的缩小比例*/
   li_min = li_use + 1
  else
   li_max = li_use - 1
  end if
      
  choose case li_max - li_min
   case IS < 0
    exit
   case 0
    li_use = li_min
   case 1
    li_use = li_min
   case else
    li_use = Int((li_max + li_min)/2)  /*小于等于的最小整数*/
  end choose     
loop

/*还原窗口原大小*/
if li_OK <> 100 then
 dw_print.modify("datawindow.zoom = 100 " )
end if
dw_print.object.datawindow.print.preview = false   
dw_print.SetRedraw(TRUE)          /*恢复重绘控件*/

return li_OK

 


 

 
设为首页 | 加入收藏 | 业务办理 | 友情链接 | 论坛版面 | 浙ICP备07502118号 |