在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值。
因为所有窗口在打开时都有居中问题,所以可以使用全局函数解决这个问题,以便在应用中的所有窗口都可以调用该函数。该函数的脚本如下:
//------------------------------------------------
//功能:将窗口移到屏幕的中央
//参数:aw_window 要处理的窗口
//返回值:(none)
//调用举例:gf_window_center(w_pay_mode)
//------------------------------------------------
Environment le_env
integer li_iscreenHeight,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_posy = (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文件中,当窗口打开时再将这些位置信息读出并用来设置窗口的位置。
当用户对窗口的大小进行调整时,窗口中的控件也应该相应地调整其大小和位置,这样才能保证整个窗口中控件的布局相对不动。可以在调整窗口大小的同时调整窗口中的控件及其相对位置,可以在窗口的Resize事件中编写脚本。首先定义如下实例变量:
integer ii_width,ii_height
在窗口的open事件中:
ii_width = this.width
ii_height = this.height
在窗口的Resize事件中:
integer 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[]是窗口的一个属性,用来标识窗口中的所有控件。

PB中的像素与PBU之间的转换相关推荐

  1. c 语言 uint8 转char,在C中的uint8和char之间的转换

    我有一个API来实现对EEPROM的写入操作.下面是它的声明:在C中的uint8和char之间的转换 CYBLE_API_RESULT_T CyBle_StoreAppData (uint8 * sr ...

  2. 经纬度坐标点与像素坐标点之间的转换

    经纬度到屏幕像素点的换算方法 相关问题点:1)地球是不规则的球体,两极扁,赤道鼓.不能简单地作为圆球体来计算.2)每纬度在地理位置上的距离是一致的(约111公里),但是每经度之间的距离是不同的(越往两 ...

  3. MFC中char*,string和CString之间的转换

    string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的: char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的.所以熟练掌握三者之间的转换十 ...

  4. python大小写转换_Python字符串中怎样进行大小字母之间的转换

    #编程语言# 我是"学海无涯自学不惜!",关注我,一同学习简单易懂的Python编程. 第七十六节:字母大小写的转换 在字符串的使用当中,经常会遇到字母大小写相互转换的应用,在Py ...

  5. 转发:C++中GB2312字符串和UTF-8之间的转换

    在编程过程中需要对字符串进行不同的转换,特别是Gb2312和Utf-8直接的转换.在几个开源的魔兽私服中,很多都是老外开发的,而暴雪为了能 够兼容世界上的各个字符集也使用了UTF-8.在中国使用VS( ...

  6. C# 实现Oracle中的数据与Excel之间的转换

    最近项目要求实现数据库之间数据在各个数据库之间导入导出,在此做个笔记 1. 将Oracle中的表导入到Excel中,反之亦然 private static readonly string connec ...

  7. Oracle中的数据类型和数据类型之间的转换

    Oracle中的数据类型 /*ORACLE 中的数据类型:char 长度固定 范围:1-2000VARCHAR2 长度可变 范围:1-4000LONG 长度可变 最大的范围2gb 长字符类型numbe ...

  8. qint64转为qstring qt_Qt中Qstring,char,int,QByteArray之间到转换

    11.各种数据类型的相互转换 char * 与 const char *的转换 char *ch1="hello11"; const char *ch2="hello22 ...

  9. java 数组 转set_java中的list,set,数组之间的转换

    使用该工具类import org.apache.commons.collections.CollectionUtils; 在Apache Jakarta Commons Collections中 St ...

最新文章

  1. modin pandas 加速
  2. 【AI杂谈】从一篇参考文献比正文还长的文章,杂谈深度学习综述
  3. QT的QPainterPath类的使用
  4. 【原创】ABAP动态编程之功能实现
  5. Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱
  6. form表单提交数据丢失问题
  7. win2008r2服务器维护,win2008 r2 服务器安全设置
  8. 语言基础(9):static, extern 和 inline
  9. python编程快速上手第四章_《Python编程快速上手——让繁琐的工作自动化》读书笔记 第四章 列表...
  10. 华为补助武汉员工,最高每日 2000 元;iPhone SE 2 量产或推迟;PowerShell 7.0 发布 | 极客头条...
  11. oracle XDB和XPT
  12. PyQt5:入门使用教程
  13. dell服务器分区表修复,完美恢复原产Dell Recovery软件、修复环境(添加教程)
  14. 用指针将字符串逆序输出
  15. java编译的类包含美元符号 $
  16. 怎么查看笔记本内存条型号_「电脑内存怎么看」电脑内存怎么看大小(内存条怎么看几代型号) - seo实验室...
  17. 用户态协议栈之epoll实现
  18. varnish 缓存php,php实现监控varnish缓存服务器的状态,php监控varnish缓存
  19. 世界十大经典汽车赛道盘点
  20. Copyright中的年份是什么意思

热门文章

  1. WPF工程出现编译错误:error CS0426: The type name 'Views' does not exist in the type 'Calibration'
  2. ChatGPT的前世今生(400多页的ppt)
  3. net::ERR_NAME_NOT_RESOLVED出现无法解决
  4. 山东标梵分享这些小程序开发干货让你不在犹豫
  5. 算法之路(四)----汉诺塔(又称河内之塔)
  6. 深度强化学习系列(15): TRPO算法原理及Tensorflow实现
  7. Java 中的设计模式
  8. python实现网页/HTML截图并转PDF
  9. 火车实时动态系统---记idea的死掉
  10. Motion Planning for Mobile Robots:总览