數(shù)據(jù)窗口自適應(yīng)打印紙張大小

字號(hào):

函數(shù)名: f_dw_Zoom
     Written by Vial.Z
     參數(shù):
     datawindow dw_print--> 要打印的數(shù)據(jù)窗口
     integer nMinZoom --> 極限縮小比例(縮小范圍不能太大,否則不清晰)
     返回值:
     -1 error
     0 找不到合適的值
     >0 找到的合理值
     作用:
      紙張大小滿足數(shù)據(jù)窗口的要求,返回100;
     當(dāng)數(shù)據(jù)窗口寬度太大,無(wú)法在一頁(yè)紙張上打印時(shí),該程序?qū)ふ乙粋€(gè)縮小比例值,
     使得數(shù)據(jù)窗口的內(nèi)容恰好能在當(dāng)前設(shè)定的紙張下打印出來(lái)。
     如窗口縮小到85%可以在一頁(yè)上打印時(shí),返回值為85
    -------------------------------------------------------*/
    if not IsValid(dw_print) then
     return -1
    end if
    dw_print.object.datawindow.print.preview = true /*預(yù)覽模式必須打開*/
    dw_print.SetRedraw(FALSE) /*調(diào)整放大比例過(guò)程中,停止重繪控件,節(jié)省程序時(shí)間*/
    string ls_H_Page /*水平打印占據(jù)的頁(yè)數(shù)*/
    string ls_zoom /*設(shè)定的縮小百分比整數(shù)值*/
    Integer li_max = 100 /*從百分百大小開始測(cè)試*/
    integer li_min /*極限縮小值,最多縮小到nn%*/
    Integer li_use /*當(dāng)前測(cè)試值*/
    Integer li_OK = 0 /*可用值*/
    Integer li_count = 0 /*算法循環(huán)執(zhí)行的次數(shù)*/
    li_min = nMinZoom /*賦最小測(cè)試值*/
    li_use = li_max /*從原始大小(100)開始測(cè)試。逐漸縮小放大比例*/
    do while li_min <= li_max
     li_count ++
     /*調(diào)整 zoom值,并測(cè)試當(dāng)前寬度打印時(shí)橫向所占的面數(shù)*/
     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 /*一頁(yè)足以打印出來(lái)*/
     li_OK = li_use /*記錄這個(gè)可用的縮小比例*/
     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) /*小于等于的最小整數(shù)*/
     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) /*恢復(fù)重繪控件*/
    return li_OK