f_rpt_unit.srf 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. $PBExportHeader$f_rpt_unit.srf
  2. global type f_rpt_unit from function_object
  3. end type
  4. forward prototypes
  5. global function string f_rpt_unit (string as_dw, integer ai_unit)
  6. end prototypes
  7. global function string f_rpt_unit (string as_dw, integer ai_unit);datastore lds
  8. string ls[],sx[],ls1,ls2,ls3,ls4,ls5,ls6,lss,ls_type//暂时先用以下方法处理,如果发现有问题,最好不要采用先MODIFY的方法
  9. long j,m,n,o,q,ll,k,p
  10. decimal ln_bl=2.65295//单位换算比例
  11. lds=create datastore
  12. lss=as_dw
  13. lds.create(lss)
  14. q=long(lds.describe('datawindow.units'))//0=Pb单位,1=象素单位,3=0.1毫米
  15. if q=ai_unit then goto f_end
  16. p=f_atab(ls[],lds.describe('datawindow.bands'))
  17. k=f_atab(ls[],lds.describe('datawindow.bands')+'~t'+lds.describe('datawindow.objects')+'~tdatawindow')
  18. for j=1 to k
  19. ls_type=lds.describe(ls[j]+'.type')
  20. m=0
  21. choose case ls_type
  22. case 'line'
  23. m=5
  24. sx[1]='x1'
  25. sx[2]='y1'
  26. sx[3]='x2'
  27. sx[4]='y2'
  28. sx[5]='pen.width'
  29. case 'rectangle','ellipse','roundrectangle'
  30. m=5
  31. sx[1]='x'
  32. sx[2]='y'
  33. sx[3]='width'
  34. sx[4]='height'
  35. sx[5]='pen.width'
  36. case 'text','column','compute','bitmap','tableblob','report','button','groupbox','graph'
  37. m=5
  38. sx[1]='x'
  39. sx[2]='y'
  40. sx[3]='width'
  41. sx[4]='height'
  42. sx[5]='font.height'
  43. if ai_unit=1 or ls_type='graph' then
  44. m=4
  45. end if
  46. case else
  47. if j<=p then//'band'
  48. m=1
  49. sx[1]='height'
  50. elseif j=k then//'datawindow'
  51. m=4
  52. sx[1]='print.margin.left'
  53. sx[2]='print.margin.right'
  54. sx[3]='print.margin.top'
  55. sx[4]='print.margin.bottom'
  56. if lds.describe('datawindow.processing')='2' then
  57. m=10
  58. sx[5]='label.width'
  59. sx[6]='label.height'
  60. sx[7]='label.rows.spacing'
  61. sx[8]='label.columns.spacing'
  62. sx[9]='label.ellipse_height'
  63. sx[10]='label.ellipse_width'
  64. end if
  65. else
  66. continue
  67. end if
  68. end choose
  69. for n=1 to m
  70. if j<=p then//'band'
  71. ls5='datawindow.'+ls[j]+'.'+sx[n]
  72. else
  73. ls5=ls[j]+'.'+sx[n]
  74. end if
  75. ls1=lds.describe(ls5)
  76. if left(ls1,1)='"' then ls1=mid(ls1,2,len(ls1) -2)//有待检验
  77. o=pos(ls1,'~t')
  78. if o>0 then
  79. ls2=left(ls1,o -1)
  80. ls3=mid(ls1,o+1)
  81. else
  82. ls2=ls1
  83. ls3=''
  84. end if
  85. if pos('?!',ls2)>0 then continue
  86. choose case ai_unit
  87. case 1//目标单位为象素
  88. choose case q//原来计量单位
  89. case 0//PB
  90. if pos(',x,x1,x2,width,print.margin.left,print.margin.right,',','+sx[n]+',')>0 then
  91. ll=UnitsToPixels(long(ls2),xUnitsToPixels!)
  92. else
  93. ll=UnitsToPixels(long(ls2),yUnitsToPixels!)
  94. end if
  95. case 2//1/1000英寸
  96. ll=int(long(ls2)*2.54/(ln_bl*10))
  97. case 3//0.1毫米
  98. ll=int(long(ls2)/(ln_bl*10))
  99. end choose
  100. case 0//目标单位为PB
  101. choose case q//原来计量单位
  102. case 1//象素
  103. if pos(',x,x1,x2,width,print.margin.left,print.margin.right,',','+sx[n]+',')>0 then
  104. ll=PixelsToUnits(long(ls2),XPixelsToUnits!)
  105. else
  106. ll=PixelsToUnits(long(ls2),YPixelsToUnits!)
  107. end if
  108. case 2//1/1000英寸
  109. ll=PixelsToUnits(int(long(ls2)*2.54/(ln_bl*10)),XPixelsToUnits!)
  110. case 3//0.1毫米
  111. ll=PixelsToUnits(int(long(ls2)/(ln_bl*10)),XPixelsToUnits!)
  112. end choose
  113. end choose
  114. ls4=string(ll,'0')
  115. if ls3>'' then ls4=ls4+'~t'+ls3
  116. if j<=p then//'band'
  117. if ls[j]='background' then
  118. continue
  119. else
  120. ls5='datawindow.'+ls[j]+'.'+sx[n]+"="+ls4
  121. end if
  122. else
  123. ls5=ls[j]+'.'+sx[n]+"='"+ls4+"'"
  124. end if
  125. ls6=ls6+' '+ls5
  126. // ls1=lds.modify(ls5)//对于crosstab,单个column就modify会出现没有修改到的情况,所有对象一起modify反而没有问题
  127. next
  128. next
  129. lds.modify(ls6)//对于crosstab,单个column就modify会出现没有修改到的情况,所有对象一起modify反而没有问题
  130. lss=lds.describe('DataWindow.Syntax')
  131. lss=f_replace(lss,'units='+string(q),'units='+string(ai_unit))
  132. goto f_end
  133. f_end:
  134. destroy lds
  135. return lss
  136. end function