意思
当前位置:首页 > 其他范文 > 意思 > 列表页

powerbuilder中的句柄是什么意思

小草范文网  发布于:2017-04-19  分类: 意思 手机版

篇一:PowerBuilder(类、事件、数据类型、API)

基本目录整理: 事件含义

5种类: custom class :不可见用户自定义类 ,如实现函数的多态

standard class :标准不可见控件 扩展类

custom visual :用户自定义 可见类

External Visual: 外部可视类,如ocx引入

Standard Visual: PB标准可视控件扩展

“Control”和“Object”的区别:

在PB里,“Control”和“Object”都是类,只不过前者是可视类,后者是不可视类,叫法不同罢了。无论使用哪种方式创建的,对于PB库画板来说,都是UserObject,通过Insert-Object-UserObject或Insert-Control-UserObject都可以把它插入到Window里,当然,这个对象应该是可视的。另外的插入办法是通过PB的IDE左侧的对象树,直接用鼠标Drag就可以了,这种方法不仅可以插入可视的UserObject,还可以插入不可视的类(可以通过View-Non Visual object llist看到它)

对于拷贝来的代码,可以用一下方式判读是从哪里继承来的:

双击该对象,观察样式

1:如果仅仅是一个DataWindow或其它控件,说明该对象是从Standsrt Visual 继承的;

2:如果是多个控件的复合体,说明它是从Custom Visual继承的

3:如果是一个PB中不存在的控件,说明它可能是从External Visual 继承的 4:如果它没有Layout视图,说明它是从Custom Class 中继承的

5:如果它LayOut视图,但没有什么控件,说明它是从Standard Class中继承的

还有一个办法是右击该对象,选择Edit source,看看它的声明,Global type XXX from YYY,YYY就是祖先的类型

总的来说,从横向和纵向来看:

横向--standard,custom

纵向--visual,nonvisual

既然是标准,就有pb基本控件的事件,属性等,反之custom则得自定义很多事件和属性

投机的检查代码:

选择Edit source,看看它的声明,Global type XXX from YYY,YYY就是祖先的类型

如果是external visual就可以看到以下代码:

global type b from userobject

integer width = 288 integer height = 168

userobjects objecttype = externalvisual!

事件的含义

单选或多选按钮消息(前缀:pbm_bm) pbm_bmgetcheck 单选按钮或多选按钮是否被选。

pbm_bmgetstate 按钮是否加亮。

pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然。 pbm_bmsetstate 加亮或不加亮按钮。

pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框。

单选或多选按钮通知消息(前缀:pbm_bn) pbm_bnclicked 按钮控件被点中。 pbm_bndisable 使按钮控件无效。

pbm_bndoubleclicked 按钮控件被双点。

pbm_bndragdrop 一个对象被放到按钮控件。

pbm_bndragenter 一个对象被拖到按钮控件。

pbm_bndragleave 一个对象被拖离按钮控件。

pbm_bndragover 一个对象被拖经按钮控件。

pbm_bnhilite 按钮控件被加亮。

powerbuilder中的句柄是什么意思

pbm_bnpaint 按钮控件被绘制。

pbm_bnsetfocus 按钮控件获得聚焦。

pbm_bnunhilite 按钮控件不被加亮。

通用对话框消息(前缀:pbm_cb) pbm_cbaddstring 将字符串加到通用对话框。

pbm_cbdeletestring 从通用对话框删除一个字符串。

pbm_cbdir 加一个目录列表到通用对话框。

pbm_cbfindstring 搜索以一组字符开头的字符串。

pbm_cbfindstringexact 搜索与所提供的字符完全匹配的字符串。 pbm_cbgetcount 列表框中的项数。

pbm_cbgetcursel 当前被选项的数目。

pbm_cbgetdroppedcontrolset 列表框在屏幕上的坐标位置。

pbm_cbgeteditsel 编辑器控件中被选字符的范围。

pbm_cbgetextendedui 缺省或扩展的用户界面。

pbm_cbgetitemdata 重画的列表框中的4字节(32位)项。

pbm_cbgetitemheight 列表框中某一项的高度。

pbm_cbgetlbtext 列表框中的文本。

pbm_cbgetlbtextlen 列表框中文本的长度。

pbm_cbinsertstring 向列表框中增加新的字符串或4字节项。

pbm_cblimittext 限制能被输入到列表框中的字符数。

pbm_cbresetcontent 删除列表框中所有元素。

pbm_cbselectstring 搜索匹配的字符串并显示。

pbm_cbsetcursel 在列表框中选择并显示一项。

pbm_cbseteditsel 在列表框的编辑区域中选择一块文本。

pbm_cbsetextendedui 设置缺省或扩展的用户界面。

pbm_cbsetitemdata 在列表框中设定4字节(32位)项。

pbm_cbsetitemheight 设置列表框中项的高度。

pbm_cbshowdropdown 转换(显示或隐藏)列表框中拖放区域。

通用对话框通知消息(前缀:pbm_cbn) pbm_cbndblclk 用户在列表中某一项上双点。

pbm_cbndragdrop 一个对象被放到通用对话框控件上。

pbm_cbndragenter 一个对象被拖到通用对话框控件上。

pbm_cbndragleave 一个对象被拖离通用对话框控件。

pbm_cbndragover 一个对象被拖经通用对话框控件。

pbm_cbndropdown 列表框的下放区域即将被显示。

pbm_cbneditchange 编辑器控件中的文本发生变化。

pbm_cbneditupdate 列表框编辑器控件中的文本即将被改变。

pbm_cbnerrspace 列表框满,不能再向其中加入项。

pbm_cbnkillfocus 通用列表框失去聚焦。

pbm_cbnselchange 列表框中被选文本被改变。

pbm_cbnselendcancel 用户按下了"取消"按钮。

pbm_cbnselendok 用户按下了"确认"按钮。

pbm_cbnsetfocus 通用对话控件拥有聚焦。

数据窗口消息(前缀:pbm_dw) pbm_dwclosedropdown 关闭下拉式数据窗口。

pbm_dwscrollend 在数据窗口中卷滚到最后一行。

篇二:SendMessage API函数在PowerBuilder中应用

SendMessage API函数在PowerBuilder中应用

一、引言

在Powerbulider巧妙地调用API函数SendMessage,可以完成Pb中的一些用常规的方法而很难实

现的功能,特将对该api函数在Powerbuilder中的使用,例举几个方面的运用,以期起到抛砖引玉的效果

二、函数说明

SendMessage函数说明:

说明

调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, SendMessageByString是该函数的“类型安全”声明形式 返回值

Long,由具体的消息决定

参数表

参数 类型及说明

hwnd Long,要接收消息的那个窗口的句柄

wMsg Long,消息的标识符

wParam Long,具体取决于消息

lParam Any,具体取决于消息

Powerbuilder中已使用函数Send函数对其进行了封装

函数原形:Send ( handle, message#, lowword, long )

Send函数说明:

说明

调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。

返回值

Long,由具体的消息决定

参数表

参数 类型及说明

handle Long,要接收消息的那个窗口的句柄

message# Long,消息的标识符

lowword Long,具体取决于消息

long long,具体取决于消息

3、 应用举例

定义外部函数引用声明:

funcation long SendMessage (long hwnd As Long,long wMsg , long wParam,long lParam) Library "user32.dll" Alias for "SendMessageA"

funcation long ReleaseCapture() Library "user32.dll"

定义实例变量:

Constant long LB_ITEMFROMPOINT = 425

Constant long HTCAPTION = 2

Constant long WM_NCLBUTTONDOWN = 161

Constant long EM_GETLINE = 404

Constant long EM_GETLINECOUNT = 399

Constant long EM_GETLINECOUNT = 186

Constant long EM_GETLINE = 196

Constant long TVM_SETITEMHEIGHT = 4379

Constant long EM_LINESCROLL = 182

Constant long EM_LIMITTEXT=197

1、列表框中鼠标移动时检测位置项

Powerscript:

在列表框的自定义事件ue_mousemove(pbm_mousemove)中写入如下代码: pos = unitstopixels(parent.pointerx(),XUnitsToPixels!)+

unitstopixels(parent.pointery(),yUnitsToPixels!) * 65536

idx = SendMessage(handle(this), LB_ITEMFROMPOINT, 0, pos)

If idx < 65536 Then sle_1.Text = lb_1.text(idx)

2、在列表框中查找匹配的项目

Powerscript:

窗口的open事件:

lb_1.AddItem ("软件")

lb_1.AddItem("电脑游戏")

lb_1.AddItem("电视机")

lb_1.AddItem("电视台")

lb_1.AddItem("电脑")

lb_1.AddItem("电脑游戏软件")

singlelineedit控件的modified事件:

long li_index

li_index= SendMessage(handle(this), EM_GETLINECOUNT, -1, sle_1.text) lb_1.selectitem(li_index)

3、为ListBox添加水平滚动条

Powerscript:

窗口的open事件:

lb_1.AddItem("软件")

lb_1.AddItem("电脑游戏")

lb_1.AddItem("电视机")

lb_1.AddItem("电视台")

lb_1.AddItem("电脑")

lb_1.AddItem("电脑游戏软件")

SendMessage (handle(this), EM_GETLINE, 250, 0)

4、实现拖动无标题栏窗体

Powerscript:

在窗口的自定义事件ue_lbuttondown(pbm_lbuttondown)

long ReturnVal

x = ReleaseCapture()

ReturnVal = SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)

5、获取多行文本框行数

Powerscript:

Commandbutton的clicked事件

Messagebox(“”, SendMessage(handle(mle_1), EM_GETLINECOUNT, 0, 0))

6、设置树型列表控件标题行高度

Powerscript:

tv_1的constructor事件:

SendMessage(handle(tv_1), TVM_SETITEMHEIGHT, 60, 0)

7、突破Powerbuilder中的多行文本框32k的限制

Powerscript:

SendMessage(handle(mle_1), EM_LIMITTEXT, 65534, 0)

8、用程序代码控制文本框的滚行与滚列

Powerscript:

SendMessage(handle(sle_1), EM_LINESCROLL, 0, 1)//下卷一行 SendMessage(handle(sle_1), EM_LINESCROLL, 0, -1)//上卷一行 SendMessage(handle(sle_1), EM_LINESCROLL, 1, 0)//右卷一列 SendMessage(handle(sle_1), EM_LINESCROLL, -1, 0)//左卷一列

三、结束语

在编写Powerbuilder应用时,应该充分调用相关的api函数来扩充pb的一些不足。

篇三:pb函数Post

Post()

功能将指定消息加入到某个窗口的消息队列中,这个窗口既可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。

语法Post( handle, messageno, word, long )

参数handle:long类型,指定窗口的系统句柄,将向该窗口邮寄消息messageno:UnsignedInteger类型,指定要邮寄的消息号 word:long类型,指定与消息一起邮寄的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0long:long类型或string,指定与消息一起邮寄的long型参数值或字符串返回值Boolean。如果任何参数的值为NULL,Post()函数返回NULL。

用法Post()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序中,它并不等待相应事件事件处理程序的执行。这一点与Send()函数不同,Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Post()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。如果应用程序要邮寄PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用PostEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Post()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口。 ProfileInt()

功能从初始化文件(.ini)中读取整型设置值。

语法ProfileInt ( filename, section, key, default )

参数filename:string类型,指定初始化文件的名称,可以包括路径,省略路径时,该函数按操作系统的标准路径搜索指定文件section:string类型,指定要得到的值所在的节(Section)key:string类型,指定要得到的值的名称,不用区分大小写default:integer类型,当指定的文件、节名、项目名不存在或不能转换为整数时,函数返回该参数指定的值返回值Integer。函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值;如果指定的文件、节名、项目名不存在或不能转换为整数时,函数返回default参数指定的缺省值。如果发生错误,函数返回-1。如果任何参数的值为NULL,ProfileInt()函数返回NULL。

本文已影响