Database 版 (精华区)

发信人: wodeji (西西), 信区: Database
标  题: [转载] PowerBuilder 开 发 系 列 谈 (15) 
发信站: 紫 丁 香 (Tue Sep 29 17:51:56 1998), 站内信件

【 以下文字转载自 Programming 讨论区 】
【 原文由 two 所发表 】


 Email: sjhzyz@public.bta.net.cn
 列表框消息(前缀:pbm_lb)
 addstring              向列表框控件中增加一项或一个字符串
 deletestring           从列表框中删除一项
 dir                    用目录列表填充列表框
 findstring             在列表框中搜索部分与所给字符串相匹配的第一项
 findstringexact        在列表框中搜索与所给字符串精确匹配的第一项。
 getcaretindex          在列表框中搜索拥有聚焦的项
 getcount               确定列表框中的项数
 getcursel              确定所选项的是第几项
 gethorizontalextent    获得列表框的宽度、计算水平卷滚
 getitemheight          确定列表框控件中一项的高度
 getitemrect            确定列表框的尺寸
 getsel                 获得列表框中当前所选的项
 getselcount            在多选列表框中获得所选项的数目
 getselitems            用列表框中所表框各自的项号填充一个给定的整数数组
 gettext                获得列表框中当前所选的项的文本
 gettextlen             获得列表框中当前所选的项的文本中的字符数
 gettopindex            确定列表框中可见的最上面一项的项号
 insertstring           向列表框中加入一个新字符串
 resetcontent           重置(消除)列表框中的内容
 selectstring           搜索并加亮与所给字符匹配的字符串
 selitemrange           选择/取消列表框中某一范围中的项
 setcaretindex          设置列表框中的某一项拥有聚焦
 setcolumnwidth         设置列表框中列的宽度
 setcursel              在列表框中选择并加亮一项。如果需要,卷滚到列表框
 sethorizontaltext      设置可以列表框中被水平卷滚的单元数。
 setitemdata            设置与列表框相关的32位/4字节值
 setitemheight          设置与列表框中一项的高度。
 setsel                 在列表框中选择一个字符串
 settabstops            设置列表框控件中tab stops的位置
 settopindex            卷滚列表框使特定的项成为可见的最上面的一项。
                        列表框通知消息(前缀:pbm_en)
 dblclk                 用户在列表框控件中的某一项上双点
 errspace               用户试图超越可在列表框中输入字符的最大限制
 selcancel              当前选取文本被取消
 selchange              用户在列表框中选择或取消了一项窗口消息(前缀:pbm_)
 activateapp            被激活的窗口属于另外一个应用
 askcbformatname        要求剪贴板中的内容被复制到一个使用自定义格式的文本缓
                        冲区中
 char                   传送键盘上按下的键
 chartoitem             通过转换键盘来的字符,帮助列表框定位其中的项
 childactivate          一个子窗口被移动或激活
 clear                  用户要删除当前编辑器控件中的内容
 command                用户选择了一个菜单项,控件,或使用了加速键
 compacting             系统内存资源不足。当windows占用了多于 1/8的 CPU时间
                        用于紧缩内存时,产生这条消息
 compareitem            当新的一项被加入列表框或组合框时产生此消息。Window
                        用这条消息方便项之间的比较
 ctlcolor               一个控件即将被画出。可在此时改变控件的颜色
 deadchar               用户选择了一种非英语字符集或其它特殊字符集,这将改变下
                        面将要输入的字符
 deleteitem             一项被从列表框或通用对话框中移去
 destroyclipboard       剪贴板内容被清除
 devmodechanged          WIN.INI中的一个设备名被修改
 drawclipboard          剪贴板内容发生改变
 drawitem               列表框或通用对话框的一项内容被改变
 dropfiles              当鼠标左键在一个注册为拖放文件接受器的应用上释放时,发
                        出该消息
 erasebkgnd             窗口的客户区需要重画
 fontchange             应用可用的字体数改变
 getdlgcode             通知消息,说明当前使用哪种类型的键盘
 getfont                获取当前激活的字体
 getminmaxinto           Windows正在检查最大化或最大化窗口的尺寸
 gettext                从一个控件(如按钮或编辑器控件)中复制文本到一个内存缓冲
                        区
 gettextlength          用来确定一个控件中的字符数
 hscrollclipboard       剪贴板的水平卷滚条被使用
 iconerasebkgnd         一个最小化窗口需要重化背景
 initdialog             一个对话框即将被显示
 initmenu               一个菜单即将被显示
 initmenupopup          一个弹出式窗口即将将显示
 keydown                键盘上的一个键被按下
 keyup                  键盘上的一个键被释放
 mdiactive              一个MDI子窗口(表单)被激活
 mdicascade             以重叠的形式重排所有的表单
 mdicreate              创建一个MDI子窗口(表单)
 mdidestroy             从MDI框架中移去一个表单
 mdigetactive           获得当前活动的MDI表单的句柄
 mdiiconrange           在一个MDI框架中重排最小化表单的图标
 mdimaximize            最大化一个MDI子表单
 mdinext                激活下一个MDI表单(紧接着活动表单的表单)
 mdirestore             恢复MDI表单到它原来的大小
 mdisetmenu             将一个菜单与一个MDI表单联系起来
 mdifitle               平铺所有的MDI表单
 measureitem            这个消息被送给即将创建的、内有按钮或其它控件的窗口
 menuchar               用户使用了一个快捷键,但该快捷键系统不支持
 menuselect             用户选择了一个菜单项
 mouseactivate          用户在一个非活动窗口中点击了鼠标
 mousemove              用户移动了鼠标
 ncactivate             窗口的非客户区即将被激活
 nccalcsize             窗口的尺寸需要重新计算
 nccreate               窗口即将创建它的非客户区
 ncdestroy              窗口的非共享区被析构
 nchittest              每次非客户区被移动时都发送该消息
 nclbuttondblclk        用户在非客户区双点了鼠标左键
 ncpaint                非客户需要画出
 nextdlgctl             在对话框中将聚焦转给另一个控件
 paint                  窗口的客户区需要被画出
 paintclipboard         剪贴板应用有剪贴操作,剪贴板查看器需重画
 palettechanged         系统调色板被改变
 paletteischanging      系统调色板即将被改变
 parentnotify           通知父窗口一个子窗口即将被创建
 querydragicon          用户要拖一个最小化窗口
 queryendsession        通知消息,说明窗口即将被关闭
 querynewpalette        应用即将收到输入聚焦,应该执行任何必要的颜色调整
 queryopen              一个最小化窗口即将被恢复
 quit                   应用处理的最后一个消息
 renderallformats       通知一个剪贴板格式的拥有者,应用将失去所有的格式
 renderformats          通知消息,说明放在剪贴板中的数据应该用一种特殊格式传送
 setcursor              通知消息,说明鼠标指针在一个窗口中移动
 setfont                用来在对话框中改变字体
 setredraw              在加一个新项之前发送给列表框或通用对话框
 settext                用来改变窗口的标题或文本
 sizeclipboard          剪贴板查看器应用改变尺寸
 spoolerstatus          一个打印管理器任务被添加或删除
 syschar                 键和其它某键同时被按下
 syscolorchange         一种或多种系统颜色被改变
 syscommand             用户选择了一个系统菜单命令
 sysdeadchar            通知消息,说明一种非英语字符集被选定
 syskeydown             用户按下某键的同时按下了键
 syskeyup               用户释放了ALT组合键
 timechange             系统时钟被修改
 undo                   从undo缓冲区复制文本到编辑器控件
 vkeytoitem             当一个列表框拥有聚焦时,用户按下了一个键
 vscroll                用户点击了垂直卷滚条
 vscrollclipboard       剪贴板查看器的垂直卷滚条被点击
 windowposchanged       窗口位置发生改变
 windowposchanging      窗口位置即将发生改变
 wininichange            WIN.INI文件被修改

        例 如 许 多 最 终 用 户 曾 长 期 使 用 基 于 DOS 平 台 或 基 于 字 符 终 端 的 软 件
 应 用, 在 这 些 软 件 中, 同 一 个 窗 口 下 的 多 个 输 入 列 之 间 聚 焦 的 转 换 一
 般 是 靠 键 入 回 车 驱 动 的, 因 此 大 多 数 的 录 入 员 都 习 惯 于 使 用 键 盘 右 侧
 的 数 字 键 盘 录 入 数 据, 每 项 数 据 录 入 后 敲 击 回 车, 转 到 下 一 个 输 入
 项。 在 Windows 环 境 下, 同 一 个 窗 口 下 的 不 同 控 件 之 间 的 转 换 是 用 tab 键
 实 现 的, 在 一 个 DataWindow 中 无 论 是 FreeForm 形 式 还 是 Tabular 或 Grid 形 式,
 系 统 缺 省 都 是 使 用 tab 键 或 Shift-tab 键 转 换 到 下 一 个 数 据 列 或 上 一 个 数 据
 列, 而 用 户 敲 击 回 车 键, 系 统 会 将 聚 焦 转 到 下 一 条 记 录 的 第 一 个 输 入
 列 上。 这 样 有 时 用 户 就 会 向 开 发 者 提 出 这 样 的 需 求: 希 望 用 回 车 键 来
 实 现 列 之 间 的 切 换, 以 符 合 录 入 员 固 有 录 入 习 惯。 

        如 果 我 们 熟 悉 了 DataWindow 的 事 件 定 义, 就 可 以 非 常 轻 易 地 实 现 上
 述 功 能。 我 们 在 DataWindow 中 定 义 一 个 EnterKey 的 事 件, 以 捕 捉 用 户 在
 DataWindow 中 敲 击 了 回 车 键, 对 其 应 实 现 的 功 能 进 行 转 换。 

        在 User Events... 的 对 话 框 中 加 入 Event Name 为 EnterKey, Event ID 为
 pbm_dwnprocessenter 的 事 件, 对 其 事 件 编 程 如 下: 

 int li_CurCol
 int li_cnt
 //得到当前光标所在的列数
 li_CurCol = getcolumn()
 //假设这个 DataWindow共有 6列
 if li_CurCol < 6 then
 //如果当前列不是最后一列,将聚焦转到下一列
         setcolumn(li_CurCol + 1)
 elseif rowcount() <= getrow() then
 //当前列是最后一列,而且当前行是最后一行, 
 //则增加一行,并将聚焦转至该行的第一列
         li_cnt = insertrow(0)
         scrolltorow(li_cnt)
         setcolumn(1)
 else
 //当前列是最后一列,当前行不是最后一行, 
 //则将聚焦转至下一行的第一列
         li_cnt = getrow() + 1
         setrow( li_cnt )
         scrolltorow( li_cnt )
         setcolumn(1)
 end if
 //将系统固有的操作屏蔽,每一个返回值
 //的不同含义,以前的文章曾有叙述。

                       


--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.97.236.132]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: whs.hit.edu.cn]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: cadcam.hit.edu.c]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:210.623毫秒