做一个自适应屏幕分辨率的窗口,当成一个应用程序中所有窗体的基类。这样整个程序可以很好的适应屏幕分辨率的改变。实现的原理很简单,就是在窗口打开的时候去RESIZE窗口和窗口中的控件大小,位置。参看下面的源代码,可以很容易的看懂。
1。新建一个窗口。
为窗口写一个函数f_resize()大部分工作就在这里。 无输入参数 返回值为整形:
environment env integer ii_ScreenWidth,ii_ScreenHeight double WRadio,HRadio,Radio integer ii_WinBolderWidth,ii_WinBolderHeight getenvironment(env) ii_WinBolderWidth=this.width - this.WorkSpaceWidth()//取得窗体的边框宽度 ii_WinBolderHeight=this.height - this.WorkSpaceHeight() ii_ScreenWidth=env.screenwidth ii_ScreenHeight=env.screenheight //compute the radio that need be resize
WRadio=ii_ScreenWidth/800 //标准认为屏幕分辨率为800*600 HRadio=ii_ScreenHeight/600//计算出屏幕相对800*600分辨率的变化量 Radio=Min(WRadio,HRadio) if Radio=1.0 then //if the screen is default 800*600 return 0 end if this.hide() this.width=(this.width - ii_WinBolderWidth)*Radio + ii_WinBolderWidth this.height=(this.height - ii_WinBolderHeight)*Radio + ii_WinBolderHeight integer i dragobject temp//用于取各种控件
for i=1 to upperbound(this.control) temp=this.control[i]//调整大小,位置 temp.width=temp.width*Radio temp.x=temp.x*Radio temp.y=temp.y*Radio temp.Height=temp.Height*Radio choose case typeof(temp) case tab! tab mtab mtab=temp mtab.textsize = mtab.textsize*Radio//设置字体 case commandbutton! commandbutton cb cb = temp cb.textsize = cb.textsize*Radio
case singlelineedit! singlelineedit sle sle = temp sle.textsize=sle.textsize*Radio case editmask! editmask em em = temp em.textsize = em.textsize*Radio case statictext! statictext st st = temp st.textsize = st.textsize*Radio
case datawindow! // datawindows get zoomed datawindow dw dw = temp dw.Object.DataWindow.zoom = string(int(Radio*100))//注意DATAWINDOW与其它控件的不同
case picturebutton! picturebutton pb pb = temp pb.textsize = pb.textsize*Radio
case checkbox! checkbox cbx cbx = temp cbx.textsize = cbx.textsize*Radio
case dropdownlistbox! dropdownlistbox ddlb ddlb = temp ddlb.textsize = ddlb.textsize*Radio
case groupbox! groupbox gb gb = temp gb.textsize = gb.textsize*Radio
case listbox! listbox lb lb = temp lb.textsize = lb.textsize*Radio
case multilineedit! multilineedit mle mle = temp mle.textsize = mle.textsize*Radio
case radiobutton! radiobutton rb rb = temp rb.textsize = rb.textsize*Radio
end choose next this.show() return 0
函数写好以后,在窗体的OPEN事件里调用该函数即可.
|