📄 使用powerbuilder另外500个函数.txt
字号:
使用PowerBuilder另外500个函数(上)
乍一看到这个题目,我们可能会觉得很玄。PowerBuilder系统自身提供的函数大约只有200多个(不考虑多态函数),我们何从得到另外500多个函数呢?
我们在以前讨论过如何使用Windows API标准调用外部函数的问题。而使用过WindowsSDK编程的开发人员都知道,在USER.EXE、GDI.EXE等可执行文件和动态连接库中,Windows本身提供了大量函数。这些函数在PowerBuilder中都是可以直接调用的。这样我们的函数库就一下子又扩充了500多个。
在这些API函数中,相当一部分是非常有用的,我们将分类向大家介绍。本期介绍一些在处理自动卷滚条时用到的函数。
自动卷滚条
缺省情况下,MDI表单是可以重新设定大小的。这样用户就可以将窗口设成比原先的小。这种情况下,必须对窗口设置卷滚条的属性,以访问窗口上的一些控件。而另一方面,除非窗口确实小到不足以显示所有的控件,否则没有必要提供卷滚条。
许多Windows的MDI应用在处理这一问题时是这样做的:当窗口小到无法显示所有控件时,打开卷滚条;而窗口大小合适时,关闭卷滚条。PowerBuilder系统本身并没有提供自动处理上述操作的功能,但是我们自己加上这一功能是很容易的,而且实现上述自动卷滚条的功能也用不到Windows API调用,只需在MDI表单窗口的resize事件中触发另一个事件,以判断在当前窗口尺寸小于某一阈值时显示卷滚条(后面将介绍为什么要另外触发一个事件,而不在resize事件中直接做)。此后用户在滚动卷滚条时,窗口会自动随之滚动;当用户再次改变窗口大小并大于该阈值时,我们应该关闭卷滚条,我们仍然可以不调用Windows API而做到这一点。然而在整个例子中,真正有难度的是在关闭卷滚条之前,我们需要检查用户是否滚动了卷滚条。如果用户滚动了卷滚条,我们则应当首先将窗口移回原始状态,这就要用到Windows API函数了。因为我们需要确定:卷滚条的滚动范围、滚动块在卷滚条上的当前位置。为了做到这一点,我们需要使用两个Windows API调用:GetScrollPos和GetScrollRange。
为了使用这两个API函数,首先在需要使用它们的窗口中将它们声明为local external函数。在Local external函数对话框中,加入如下语句:
Function int GetScrollPos(uint Handle,int Bar)Library"USER.EXE"
SubRoutine GetScrollRange(uint Handle,int Bar,Ref int MinPos,RefintMaxPos)Library"USER.EXE"同时在该窗口中声明如下实例变量:
//判断用户是否要最小化窗口
Boolean ib_minimized=FALSE
//判断是否显示卷滚框
int ii_desired_height=1000
int ii_desired_width=2000
其中的两个整形变量ii_desired_height和ii_desired_width是用来决定什么时候打开或移去卷滚条的阈值。当然,每个窗口中都必须设置这两个变量。为了使窗口更为通用,我们也可以定义一个窗口级的函数,该函数在窗口的open事件中能分析窗口的control
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -