PB DW内容自适应 原创

PB开发者
发布于 2023-4-3 09:22
8644浏览
0收藏

演示GIF

PB DW内容自适应-鸿蒙开发者社区

思路

1、记录上一次DW大小、名称等信息。
2、根据DW最新大小除以上一次记录的DW大小,计算出缩放比列。
3、循环出DW中字段、控件等、根据类型分别计算出长宽高、X、Y坐标等。

源码

1、创建Custom Class对象、命名为uo_dwresize
2、使用

uo_dwresize dwresize
//open事件中
//实例化
dwresize = create uo_dwresize
//记录初始DW大小
dwresize.of_add_dwsize(dw_1)

//根据特定需求增加自适应方法
//根据DW大小,内容自适应
dwresize.of_draw_dwsize()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

3、源码

forward
global type uo_dwresize from nonvisualobject
end type
type str_dwsize from structure within uo_dwresize
end type
end forward

global type str_dwsize from structure
	string	ls_classname
	long		ll_width
	long		ll_height
	datawindow		ldw_datawindow
end type

global type uo_dwresize from nonvisualobject
end type
global uo_dwresize uo_dwresize

type variables

any iany_arr[]
end variables

forward prototypes
public function any of_split (string as_bj, string as_input)
public subroutine of_add_dwsize (datawindow adw_dw)
public subroutine of_draw_dwsize ()
end prototypes

public function any of_split (string as_bj, string as_input);//================================================
//按符号分割字符串
//_of_split(as_bj,as_input)
//as_bj:符号
//as_input:字符串
//===============================================
string ls_list[] //接收返回的字符串列表
string ls_temp
integer i = 1
long  ll_pos
integer li_len

li_len = len(as_bj)  //分割符的长度
ll_pos = pos(as_input,as_bj)

do
	if ll_pos = 0 then
		ls_list[i] = as_input
	else  
		ls_list[i] = left(as_input,ll_pos - 1) 
		i++  
		as_input = mid(as_input,ll_pos + li_len)
		ll_pos = pos(as_input,as_bj)
		if ll_pos = 0 then ls_list[i] = as_input
	end if
loop while ll_pos <> 0

return ls_list
end function

public subroutine of_add_dwsize (datawindow adw_dw);long ll_for,ll_find = 0
str_dwsize str_size

for ll_for = 1 to upperbound(iany_arr)
	str_size = iany_arr[1]
	if str_size.ls_classname = adw_dw.classname() then exit
next

str_size.ls_classname = adw_dw.classname()
str_size.ll_width = adw_dw.width
str_size.ll_height = adw_dw.height
str_size.ldw_datawindow = adw_dw

if ll_find = 0 then iany_arr[upperbound(iany_arr) + 1] = str_size


end subroutine

public subroutine of_draw_dwsize ();long ll_widthOld = 0,ll_heightOld = 0
string ls_input='',ls_list[],ls_type = '',ls_band=''
dec ldc_RadioW = 0,ldc_RadioH = 0	
int ll_DWX,ll_DWY,ll_DWX2,ll_DWY2,ll_ApartW,ll_Processing
int ll_i,ll_ContentW,ll_ContentH,ll_DWHeaderH,ll_DWDetailH
long ll_textsize,ll_KJheight,ll_row
str_dwsize str_size
datawindow ldw_dw 

for ll_row = 1 to upperbound(iany_arr)
	str_size = iany_arr[ll_row]
	ldw_dw = str_size.ldw_datawindow
	
	ll_widthOld = str_size.ll_width
	ll_heightOld = str_size.ll_height
	
	str_size.ll_width = ldw_dw.width
	str_size.ll_height = ldw_dw.height
	iany_arr[ll_row] = str_size

	ldc_RadioW = ldw_dw.width / ll_widthOld
	ldc_RadioH = ldw_dw.height / ll_heightOld

	ldw_dw.setredraw(false)
	
	ls_input = ldw_dw.Describe("DataWindow.Objects")
	ls_list = of_split('	',ls_input)
	
	ll_DWHeaderH = long(ldw_dw.describe("datawindow.header.height"))
	ll_DWDetailH = long(ldw_dw.describe("datawindow.detail.height"))
	ll_DWHeaderH = ll_DWHeaderH * ldc_RadioH
	ll_DWDetailH = ll_DWDetailH * ldc_RadioH
	ldw_dw.Modify("datawindow.header.height = '"+string(ll_DWHeaderH)+"'")
	ldw_dw.Modify("datawindow.detail.height = '"+string(ll_DWDetailH)+"'")
	
	for ll_i = 1 to upperbound(ls_list)
		ls_band = ldw_dw.describe(ls_list[ll_i] + ".band")
		ls_type = ldw_dw.describe(ls_list[ll_i] + ".type")

		if ls_band <> '!'  then
			if ls_type = 'text' or ls_type = 'column'   or ls_type = 'compute' then
				if long(ldw_dw.describe(ls_list[ll_i] + ".visible")) = 0 then continue;
				ll_ContentW = long(ldw_dw.describe(ls_list[ll_i] + ".width"))
				ll_ContentH = long(ldw_dw.describe(ls_list[ll_i] + ".height"))
				ll_DWX = long(ldw_dw.describe(ls_list[ll_i] + ".x"))
				ll_DWY = long(ldw_dw.describe(ls_list[ll_i] + ".y"))
				ll_Processing = long(ldw_dw.Object.DataWindow.Processing)
				
				//Grid 只改变宽度;不改变X,Y
				if ll_Processing = 1 then
				else
					ldw_dw.Modify(ls_list[ll_i]+".x = '"+string(ll_DWX * ldc_RadioW)+"'")
					ldw_dw.Modify(ls_list[ll_i]+".y = '"+string(ll_DWY * ldc_RadioH)+"'")
				end if
				ldw_dw.Modify(ls_list[ll_i]+".width = '"+string(ll_ContentW * ldc_RadioW)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".height = '"+string(ll_ContentH * ldc_RadioH)+"'")
			elseif ls_type = 'line'  then
				ll_DWX = long(ldw_dw.describe(ls_list[ll_i] + ".x1"))
				ll_DWY = long(ldw_dw.describe(ls_list[ll_i] + ".y1"))
				ll_DWX2 = long(ldw_dw.describe(ls_list[ll_i] + ".x2"))
				ll_DWY2 = long(ldw_dw.describe(ls_list[ll_i] + ".y2"))
		
				ldw_dw.Modify(ls_list[ll_i]+".x1 = '"+string(ll_DWX * ldc_RadioW)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".y1 = '"+string(ll_DWY * ldc_RadioH)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".x2 = '"+string(ll_DWX2 * ldc_RadioW)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".y2 = '"+string(ll_DWY2 * ldc_RadioH)+"'")
			elseif ls_type = 'rectangle' or ls_type = 'button' or ls_type = 'roundrectangle' or ls_type = 'ellipse' or ls_type = 'report' or ls_type = 'bitmap' or ls_type = 'graph' then 
				ll_ContentW = long(ldw_dw.describe(ls_list[ll_i] + ".width"))
				ll_ContentH = long(ldw_dw.describe(ls_list[ll_i] + ".height"))
				ll_DWX = long(ldw_dw.describe(ls_list[ll_i] + ".x"))
				ll_DWY = long(ldw_dw.describe(ls_list[ll_i] + ".y"))
				
				ldw_dw.Modify(ls_list[ll_i]+".x = '"+string(ll_DWX * ldc_RadioW)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".y = '"+string(ll_DWY * ldc_RadioH)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".width = '"+string(ll_ContentW * ldc_RadioW)+"'")
				ldw_dw.Modify(ls_list[ll_i]+".height = '"+string(ll_ContentH * ldc_RadioH)+"'")
			end if
		end if
	next
	
	ldw_dw.setredraw(true)
next

end subroutine

on uo_dwresize.create
call super::create
TriggerEvent( this, "constructor" )
end on

on uo_dwresize.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
DW按比例放大.zip 58.49K 36次下载
已于2023-4-3 09:25:55修改
收藏
回复
举报
回复
    相关推荐