|
/*------------------------------------------------------------ 函数名: 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
|