急急!!!!!!!!1PB程序和分辨率的问题?有请高手指点!

liyuesoft 2002-08-14 04:21:35
我用PB开发的程序在800×600的模式下运行一切正常,但是当
到了1024×768时候运行,所有的控件却缩到了中间,该怎样解决?
各位大侠千万不要告诉我去一一计算控件的位置来调整。
...全文
41 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
TianChong 2002-08-15
  • 打赏
  • 举报
回复
可以参考PFC里的resize服务,PFC例程在PB的安装目录下的PFC目录下.
咖啡 2002-08-14
  • 打赏
  • 举报
回复
到了最后才想办法解决恐怕没有简单的办法了。
zhanwei 2002-08-14
  • 打赏
  • 举报
回复
在程序中改系统的分辨率,我没有试过,你不妨一试:

Change screen resolution
[Local external function declaration]
FUNCTION long ChangeDisplaySettingsA (ref devmode lpst, ulong Flags) &
LIBRARY "USER32.DLL"

[structure definition, devmode]
character dmdevicename[32]
integer dmspecversion
integer dmdriverversion
integer dmsize
integer dmdriverextra
long dmfields
integer dmorientation
integer dmpapersize
integer dmpaperlength
integer dmpaperwidth
integer dmscale
integer dmdefaultsource
integer dmprintquality
integer dmcolor
integer dmduplex
integer dmresolution
integer dmttoption
integer dmcollate
character dmformname[32]
integer dmlogpixels
long dmbitsperpel
long dmpelswidth
long dmpelsheight
long dmdisplayflags
long dmdisplayfrequency
long dmicmmethod
long dmicmintent
long dmmediatype
long dmdithertype
long dmreserved1
long dmreserved2

[Instance variable declaration]
Ulong CDS_FORCE = 8*16*16*16*16*16*16*16
long DM_BITSPERPEL_H = 4*16*16*16*16
long DM_PELSWIDTH_H = 8*16*16*16*16
long DM_PELSHEIGHT_H = 16*16*16*16*16
long DM_DISPLAYFLAGS_H = 2*16*16*16*16*16

[powerscript to switch to 800x600]
devmode dm
long a

dm.dmPelsWidth = 800
dm.dmPelsHeight = 600
dm.dmBitsPerPel = 16
dm.dmFields = DM_PELSWIDTH_H + DM_BITSPERPEL_H
dm.dmSize = 188
a = ChangeDisplaySettingsA(dm, CDS_FORCE)

[powerscript to switch to 1024x768]
devmode dm
long a

dm.dmPelsWidth = 1024
dm.dmPelsHeight = 768
dm.dmBitsPerPel = 16
dm.dmFields = DM_PELSWIDTH_H + DM_BITSPERPEL_H
dm.dmSize = 188
a = ChangeDisplaySettingsA(dm, CDS_FORCE)


pbsql 2002-08-14
  • 打赏
  • 举报
回复
为窗口写一个函数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事件里调用该函数即可.
taomsf 2002-08-14
  • 打赏
  • 举报
回复
有好方法也别忘了告诉我一声.
why0302 2002-08-14
  • 打赏
  • 举报
回复
GetEnvironment ( l_g )获得系统环境信息
l_g.screenwidth
便知其分辨模式,再去调相应控件位置.
海洋‘s 2002-08-14
  • 打赏
  • 举报
回复
在Resize事件中写代码控制即可
xiongxiao 2002-08-14
  • 打赏
  • 举报
回复
有更好的方法别忘了通知我一下
jeking 2002-08-14
  • 打赏
  • 举报
回复
不会吧,你肯定是写了事件了.
否则,控件应该在你制定的位置。

/------------------\
苦命……命苦……
一切由自己决定!
\------------------/
ldk 2002-08-14
  • 打赏
  • 举报
回复
有更好的办法吗?
ddtid 2002-08-14
  • 打赏
  • 举报
回复
窗口居中吧
或者用MDI,在每个打开的窗口中的resize事件中动态调整控件位置和大小,甚至包括dw中的列
xingxing 2002-08-14
  • 打赏
  • 举报
回复
如果你要窗口可以随便大小的话,那时唯一的方法!!!
hzhxxx 2002-08-14
  • 打赏
  • 举报
回复
设置为 800*600啊!

401

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧