PB不同分辨率下效果问题。

irouse 2006-09-28 05:27:02
pb开发的时候,怎么让800*600和1024*768,也就是在不同分辨率下,显示效果一样.
我现在开发是在1024下开发的,换800*600运行,界面乱七八糟.
...全文
622 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kojiang 2006-10-20
  • 打赏
  • 举报
回复
MARK~!~
superdinosaur520 2006-10-19
  • 打赏
  • 举报
回复
收藏
立在心间 2006-10-18
  • 打赏
  • 举报
回复
// 以下代码实现在1024x768分辨率下,强制在1024x768分辨率下运行
int metricsX, metricsY
metricsX = getsystemmetrics(0)
metricsY = getsystemmetrics(1)
if metricsX <> 1024 or metricsY <> 768 then
messagebox('提示','本系统必须运行于1024x768分辨率下,请进行调整!')
return
end if

//extern v
FUNCTION long GetSystemMetrics(long cdir) LIBRARY "user32.dll"
jf_xs 2006-10-18
  • 打赏
  • 举报
回复
brisk_zhang(大漠) 担心的问题可以在dawugui(潇洒老乌龟) 的基础上加入改变控件坐标的代码,这个很简单.

只不过有了这段代码,程序的运行速度会明显变慢,刚开始还可以,时间长了,我也等得不耐烦了,何况客户了!
立在心间 2006-09-29
  • 打赏
  • 举报
回复
楼上:dawugui(潇洒老乌龟)会出现两个问题:

1、如果aw_window.Move(ll_posx ,ll_posy)后,窗口的一部分还是看不到,如果恰好一些操作按钮是在这部分上,那就无法显示了。

2、采用Resize事件中编写脚本这样写的窗口在最小化,然后最大化窗口界面一片空白!

这是我以前用的结果,一直不知道怎么办!

借楼主空间了:)
wlspeed 2006-09-29
  • 打赏
  • 举报
回复
下载一个可自动伸缩的基类吧,然后窗口里再进行注册,把每个控件的伸缩比例写一下
byimbba 2006-09-29
  • 打赏
  • 举报
回复
mark ,写的挺详细的。
tch789 2006-09-29
  • 打赏
  • 举报
回复
1)建议建立再一个窗口,该窗口继承原来的窗口
800*600 1024*768 根据环境选择打开不同的窗口.

2)Environment le_env
GetEnvironment(le_env) 获取环境,然后判断
allright_flash 2006-09-29
  • 打赏
  • 举报
回复
PixelsToUnits ( pixels, type )
allright_flash 2006-09-29
  • 打赏
  • 举报
回复
老乌龟厉害,up
xiaoyao88 2006-09-29
  • 打赏
  • 举报
回复
借用PFC ,里面有此类库
dawugui 2006-09-28
  • 打赏
  • 举报
回复
自动调整窗口

  在一定的屏幕分辨率下开发的应用程序到别的计算机上运行时,很可能遇到和开发环境中的分辨率不同的情况,这时要保证窗口界面仍然显示居中,就得在开发时考虑这个问题。解决方法是在窗口打开时判断屏幕的分辨率,根据分辨率来决定窗口显示的位置。要用到两个单位换算函数和一个获取运行环境信息的函数。
  在PowerBuilder中所有尺度都是用PowerBuilder单位(PBU)计量的,惟一例外是Window和DataWindow画板网格尺寸,这是用像素计量。PowerBuilder中的计量使用和Windows中相同的技术,都是基于系统字体。不同的是,Windows中采用系统字体宽度的1/4和高度的1/8,而PowerBuilder中采用系统字体宽度的1/32和高度的1/64,从而可以提供比Windows中更高的分辨率。但是,用户在PowerBuilder应用程序中调用外部函数来获取对象的尺寸或位置时就应该进行相应的转换。好在PowerBuilder本身也提供了进行单位换算的函数,所以应该尽量使用PowerBuilder本身的单位换算函数。
  函数UnitsToPixels()用于将PBU值换算成像素值。它的语法格式是:
  UnitsToPixels ( units, type )
  其中,Units是一个整型数值,是要转换成像素值的PBU值;Type是一个ConvertType类型的枚举值,可以是:
  XUnitsToPixels! 表示要转换成水平方向上的像素值;
  YUnitsToPixels! 表示要转换成垂直方向上的像素值。
  函数成功执行将返回转换后的像素值,如果执行错误,则返回-1,如果有参数为NULL,则返回NULL。
  函数PixelsToUnits用于将像素值换算成PBU值。它的语法格式是:
  PixelsToUnits ( pixels, type )
  各个参数的意义和上面函数的完全相同,执行的功能相反,是将指定像素值转换成指定方向上的PBU值。
  因为所有窗口在打开时都有居中问题,所以可以使用全局函数解决这个问题,以便在应用中的所有窗口都可以调用该函数。该函数的脚本如下:
  Environment le_env
  Int li_ScreenHeight, li_ScreenWidth
  Long ll_posx,ll_posy

  GetEnvironment(le_env)
  li_ScreenHeight = PixelsToUnits(le_env.ScreenHeight,YPixelsToUnits!)
  li_screenwidth = PixelsToUnits(le_env.ScreenWidth,XPixelsToUnits!)
  If aw_window.width > li_ScreenWidth Then //如果窗口超宽
   ll_posx = 1
  Else
   ll_posx = (li_ScreenWidth - aw_window.Width) / 2
  End If

  If aw_window.height > li_ScreenHeight Then //如果窗口超高
   ll_posy = 1
  Else
   ll_posy = (li_ScreenHeight - aw_window.Height) / 2
  End If
  aw_window.Move(ll_posx ,ll_posy)
  上面的脚本用函数GetEnvironment获取当前的环境信息,并将其成员变量ScreenWidth和ScreenHeight转换成PBU值,然后减去当前窗口的宽(高),取差值的1/2即为窗口居中时的起始坐标。
  有时窗口的位置要恢复到用户上次使用时的情况,可以借助于ini文件。在窗口关闭时将窗口的位置信息保存在一个特定的ini文件中,当窗口打开时再将这些位置信息读出并用来设置窗口的位置。具体可以参考前面MDI一章中介绍的两个函数wf_saveToolBar和wf_resToreToolBar的编程。
  当用户对窗口的大小进行调整时,窗口中的控件也应该相应地调整其大小和位置,这样才能保证整个窗口中控件的布局相对不动。可以在调整窗口大小的同时调整窗口中的控件及其相对位置,可以在窗口的Resize事件中编写脚本。首先定义如下实例变量:
  Int ii_width,ii_height
  在窗口的Open事件中:
  ii_width = This.Width
  ii_height = This.Height
  在窗口的Resize事件中:
  Int li_value
  DragObject lw_obj
  For li_value = 1 To UpperBound(This.Control[])
   lw_obj = control[li_value]
   lw_obj.x = lw_obj.x * (NewWidth / ii_width)
   lw_obj.width = lw_obj.width * (NewWidth / ii_width)
   lw_obj.y = lw_obj.y * (NewHeight / ii_height)
   lw_obj.height = lw_obj.height * (NewHeight / ii_height)
  Next
  ii_width = NewWidth
  ii_height = NewHeight
  其中,NewWidth和NewHeight是窗口Resize事件的参数,可以直接使用。NewWidth / ii_width是横向变动比例,NewHeight / ii_height是纵向变动比例。Control[]是窗口的一个属性,用来标识窗口中的所有控件。

bbdx2523 2006-09-28
  • 打赏
  • 举报
回复
那是肯定的,如果在1024*768状态下开发的,到了800*600状态下,可能有些控件会不显示出来,如以分辨率做为图形界面的定位单位,水平坐标>800,垂直坐标>600的就不会显示在屏幕上,这就如拿一枚放大镜来看书,只能看到局部。
如果要在两种分辨率下显示正常,则要控制控件的坐标和大小,

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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