
1997年
.第10期
.软件与编程版
技术讲座
PowerBuilder应用开发系列讲座(14)
PowerBuilder的事件
华天新技术开发公司 张健姿(Email:sjhzyz@public.bta.net.cn)
熟悉Windows编程的人员都知道,Windows的API为程序员提供了大量的消息,约有200多个。在PowerBuilder中,系统将每个Windows消息作为事件传递给程序员处理,并且为大多数普通的事件提供了缺省处理。PowerBuilder在语句描绘器中为每一个标准的控件设定了一些常用事件,一般的编程人员基于这些事件就基本可以完成常见的操作。如果我们遇到事件的处理需要另外截获Windows的消息,我们可以在语句描绘器菜单的"Declare|UserEvent..."中加入一个新的事件,同时
指出您所希望对应的Windows消息。Windows API的消息一般以两到三个字符的标识开始,这个标识标明了该消息的来源或对象。例如:pbm_active实际上对应的是WM_ACTIVATE,WM说明该消息是一窗口消息。其它的消息前缀包括:
*BM 按钮消息
*BN 按钮通知消息*CB 通用对话框消息*CBN 通用对话框通知消息*DM 对话框消息*EM 编辑器控件消息*EN 编辑器控件通知消息*LB 列表框消息*LBN 列表框通知消息*MM 多媒体消息*SBN 卷滚条通知消息此外还有一个DDE消息,DDE消息从技术上来说属于窗口消息,但在这里我们把它们分离出
来,因为PowerBuilder并不完全支持全部的DDE消息。消息一般告诉某个对象(如按钮)去执行一些动作。通知消息一般由某个控件发出,它通知应用程序某些事件在其上发生了。WaiteGroup的《Windows API编程字典》详细描述了这200多个消息的具体含义。这些消息,我们在PowerBuilder中也可以用Send(handle,message_no,word,long)函数发出。所有的PowerBuilder自动映射的事件名都以"Pbm"为前缀,例如,BM_GETCHECK变成了pbm_bmgetcheck。通过向定义用户事件对话框中增加事件,程序员可以在需要的时候截获这些消
息。PowerBuilder还有另一类消息是标准的Windows API所不提供的消息。这类消息以"dw"或"dwn"开头,如pbm_dwnretrieveend。这些是与数据窗口有关的消息和通知消息,因为数据窗口不是标准窗口对象,它们有它们自己的事件。下面我们解释一下PowerBuilder中以pbm开头的内部映射事件的含义。限于篇幅,我们不能全部介绍,只能按类举一些主要例子,其余的事件类推。单选或多选按钮消息(前缀:pbm_bm)
getcheck 单选按钮或多选按钮是否被选
getstate 按钮是否加亮setcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然setstate 加亮或不加亮按钮change 改变按钮的风格,例如,改为单选按钮或组合框单选或多选按钮通知消息(前缀:pbm_bn)clicked 按钮控件被点中disable 使按钮控件无效double-clicked 按钮控件被双点dragdrop 一个对象被放到按钮控件dragenter 一个对象被拖到按钮控件dragleave 一个对象被拖离按钮控件dragover 一个对象被拖经按钮控件hilite 按钮控件被加亮paint 按钮控件被绘制setfocus 按钮控件获得聚焦unhilite 按钮控件不被加亮通用对话框消息(前缀:pbm_cb)addstring 将字符串加到通用对话框deletestring 从通用对话框删除一个字符串dir 加一个目录列表到通用对话框findstring 搜索以一组字符开头的字符串findstringexact 搜索与所提供的字符完全匹配的字符串getcount 列表框中的项数getcursel 当前被选项的数目getdroppedcontrolset 列表框在屏幕上的坐标位置geteditsel 编辑器控件中被选字符的范围getextendedui 缺省或扩展的用户界面getitemdata 重画的列表框中的4字节(32位)项getitemheight 列表框中某一项的高度getlbtext 列表框中的文本getlbtextlen 列表框中文本的长度insertstring 向列表框中增加新的字符串或4字节项limittext 限制能被输入到列表框中的字符数resetcontent 删除列表框中所有元素selectstring 搜索匹配的字符串并显示setcursel 在列表框中选择并显示一项seteditsel 在列表框的编辑区域中选择一块文本setextendedui 设置缺省或扩展的用户界面setitemdata 在列表框中设定4字节(32位)项setitemheight 设置列表框中项的高度showdropdown转换(显示或隐藏)列表框中拖放区域通用对话框通知消息(前缀:pbm_cbn)dblclk 用户在列表中某一项上双点dragdrop 一个对象被放到通用对话框控件上dragenter 一个对象被拖到通用对话框控件上dragleave 一个对象被拖离通用对话框控件dragover 一个对象被拖经通用对话框控件dropdown 列表框的下放区域即将被显示editchange 编辑器控件中的文本发生变化editupdate列表框编辑器控件中的文本即将被改变errspace列表框满,不能再向其中加入项killfocus通用列表框失去聚焦selchange列表框中被选文本被改变selendcancel用户按下了"取消"按钮selendok用户按下了"确认"按钮setfocus通用对话控件拥有聚焦数据窗口消息(前缀:pbm_dw)closedropdown关闭下拉式数据窗口scrollend在数据窗口中卷滚到最后一行scrollhome在数据窗口中卷滚到第一行scrolllineend卷滚到当前行的行尾(水平方向)scrolllinehome卷滚到当前行的行首(水平方向)数据窗口通知消息(前缀:pbm_dwn)backtabout即将通过Shift+Tab组合键离开该控件changing控件即将被改变dropdown下拉式列表框的下拉部分即将可见graphcreate即将创建图形itemchangefocus数据窗口控件中当前项的聚焦改变itemvalidationerror对当前项的修改引起了一个合法性检查错误key有键被按下。使用KeyDown()处理键盘值lbuttondown鼠标左键被按下lbuttonup鼠标左键被松开mbuttonclk鼠标中键点击mbuttondbclk鼠标中键双击mousemove鼠标移动printmarginchange打印边界被改变processenter回车键被按下rowchange数据窗口中聚焦从一行转向另一行tabdownout用户在数据窗口最后一行按了下箭头键tabout用户在数据窗口的最后一行/列中按了tab键tabupout用户在数据窗口第一行中按了上箭头键动态数据交换(DDE)消息(前缀:pbm_dde)ddeack收到一个DDE消息ddeinitiate开始一个DDE会话ddeterminate终止一个DDE会话编辑器控件消息(前缀:pbm_em)canundo编辑器控件是否能撤消上一次修改emptyundobuffer清空由Windows管理的取消操作的缓冲区fmtlines在多行编辑器控件的行尾增加或删除回车换行getfirstvisibleline返回编辑器控件中可见的第一行的行号gethandle获得编辑器控件使用的内存句柄getline从编辑器控件中复制一行到内存中的一个缓冲区getlinecount返回多行编辑器控件的行数getmodify文本是否被用户修改getrect返回控件的长方形域getsel返回被选文本的起始位置limittext限制用户键入的文本长度linefromchar返回被选文本的行号lineindex返回编辑器控件中被选行第一个字符在编辑串中的位置linelength返回编辑器控件中被选行中的字符数linescroll水平或垂直卷滚编辑器控件replacesel从剪贴板或从键盘上用新文本替换被选文本sethandle设置编辑器控件的句柄指向内存中的一个缓冲区setmodify设置编辑器控件的modified标志setpasswordchar设置用户输入任何文本时显示的字符,在输入密码时的显示setrect设置/重置编辑器控件所在的长方形区域,编辑器控件中的文本被重画。setrectnp除了不重画文本,大致与setrect相同setsel选择字符settabstops在多行编辑器控件中设置tabstopssetwordbreak设置新的词拆分函数setwordbreakproc设置新的词拆分过程undo撤消最近的编辑操作编辑控件通知消息(前缀:pbm_en)change编辑器控件中的文本发生改变errspace编辑器控件内存缓冲区溢出hscroll用户点中上水平卷滚条maxtext用户试图输入比允许更多的文本update编辑器控件即将显示用户的修改vscroll用户点中了垂直卷滚条(未完待续)