用DATAWINDOW设计通用的编码帮助窗口.doc
《用DATAWINDOW设计通用的编码帮助窗口.doc》由会员分享,可在线阅读,更多相关《用DATAWINDOW设计通用的编码帮助窗口.doc(6页珍藏版)》请在咨信网上搜索。
用DataWindow设计通用的编码帮助窗口 (深圳:独孤求败 2003-05-16) ---- 一、前言 ---- 用一组数字或键盘字符序列对具有某种相同属性的汉字词组或其它知识信息进行主动编码或被动自动编码,建立相应的编码库,以方便输入或助记,是大多数中文界面应用软件用以解决普通用户与应用软件交互瓶颈的基本方法,为此,设计者必须设计一个编码帮助处理程序,以满足编码信息处理的需要。一个较大的应用软件,该功能代码设计的质量,一方面关系到软件的开发效率,另一方面又关系到人机交互界面的友好程度。我们在许多股票分析软件中所看到的具有良好功能的股票代码帮助处理界面,它既能使用股票名称拼音首字母定位股票名称,又能用股票数字代码查找,就是一个不错的代码帮助处理人机接口 ---- PowerBuilder(以下简称PB)作为C/S环境下的数据库前端开发工具,其面向对象、图形用户界面、可视化,以及方便移植等特点,成为众多程序员的最理想选择之一。笔者在用PB开发应用系统时,用DataWindow设计了一个通用的代码帮助窗口,很好地解决了上述问题。 ---- 二、实现方法及步骤 ---- 1. 用结构画笔新建一结构s_help,其元素列表如下: 序号 变量名 类型 注 释 1 dw_name DataStore 编码和关键词关系对照表DataStore 2 help_nam String DataStore中关键词列名 3 help_code String DataStore中数字编码列名 4 help_pybm String DataStore中拼音编码列名 5 help_now_bm String DataStore当前编码筛选所使用的编码 6 w_title String 编码帮助窗口的title值 ---- 2. 定义全局变量gs_bm、gs_mc: ---- string gs_bm,gs_mc // 用来存放编码帮助处理程序所返回的数字编码列和其对应的关键词列的值。 ---- 3. 定义实例变量istru_help、is_getfocus: ---- s_help istru_help // 入口参数结构变量 ---- string is_getfocus = 'mle_2' // 当前得到焦点的对象名,初始值为多行编辑器mle_2 ---- 4. 用窗口画笔新建一响应式窗口(Response)w_help,并在其内放置如下控件: 序号 控件名 控件类型 属性 值 1 w_help Window TitleBar True WindowType Response 2 dw_help DataWindow TabOrder 20 3 mle_1 MultiLineEdit Enabled False Text 编码帮助窗口 Width 105 Height 2012 TabOrder 0 4 mle_2 MultiLineEdit Text 0 TabOrder 10 0 5 st_1 StaticText Text 快速定位 ---- 5. 定义用户事件: ---- ①在dw_help对象上点鼠标右键,进入数据窗口脚本编辑器,选菜单"Declare → User Event",定义"Event Name"为"ue_keydown","Event ID"为"pbm_dwnkey",点击OK退出; ---- ②同法为mle_2对象定义用户事件,"Event Name"为"ue_keydown","Event ID"为"pbm_char",点出OK退出。 ---- 6. 为窗口w_help编写脚本: ---- ①Open事件脚本: istru_help = message.PowerObjectParm dw_help.dataobject = istru_help.dw_name.dataobject istru_help.dw_name.ShareData(dw_help) if dw_help.RowCount() < 1 then gs_bm = '' gs_mc = '' messagebox("错误!","编码表没数据。请先录入!") close(this) return else this.title=istru_help.w_title end if ---- ②Close事件脚本: // 将过虑缓冲区中的数据传回主区 dw_help.SetFilter("") dw_help.Filter() ---- 7. 为数据窗口dw_help编写脚本: ---- ①getfous事件脚本: is_getfocus = "dw_help" ---- ②doubleclicked事件脚本: is_getfocus = "dw_help" gs_bm = this.GetItemString(this.Getrow(),istru_help.help_code) gs_mc = this.GetItemString(this.Getrow(),istru_help.help_name) close(parent) ---- ③itemfocuschanged事件脚本: if row > 0 then this.selectrow(0,false) this.selectrow(row,true) end if ---- ④ue_keydown用户事件脚本: integer li_key string ls_key,ls_filter boolean ls_flag = true if keydown(KeyTab!) then if is_getfocus = "dw_help" then mle_2.setfocus() end if return end if if keydown(KeyEnter!) or keydown(KeyEscape!) then if keydown(KeyEnter!) then gs_bm = this.GetItemString(this.Getrow(),istru_help.help_code) gs_mc = this.GetItemString(this.Getrow(),istru_help.help_name) close(parent) return else gs_bm = '' gs_mc = '' close(parent) return end if else // 检测是否有退格键被按下 if keydown(keyback!) then ls_key=left(mle_2.text,len(mle_2.text)-1) ls_flag = false if len(ls_key) < 1 then istru_help.help_now_bm = istru_help.help_code end if end if // 检测是否有数字键 0 ~ 9 被按下 if ls_flag then for li_key = 48 to 57 if keydown(li_key) then ls_key=mle_2.text+char(li_key) ls_flag = false exit end if next end if // 检测是否有数字键 A ~ Z 被按下 if ls_flag then for li_key = 65 to 90 if keydown(li_key) then ls_key=mle_2.text+char(li_key) ls_flag = false if len(mle_2.text) < 1 then istru_help.help_now_bm = istru_help.help_pybm end if exit end if next end if // 检测是否有数字键 a ~ z 被按下 if ls_flag then for li_key = 95 to 122 if keydown(li_key) then ls_key=mle_2.text+char(li_key) ls_flag = false if len(mle_2.text) < 1 then istru_help.help_now_bm = istru_help.help_pybm end if exit end if next end if if not ls_flag then if is_getfocus = "dw_help" then mle_2.text=ls_key end if this.SetRedraw(false) if len(trim(ls_key)) > 0 then /* 用户键入的字符串序列不为空时,筛选列名不变,否者 以刚输入的第一个字符来判断,为数字则以数字编码列 名作为筛选列,否者以拼音编码列名为筛选列。 */ if istru_help.help_now_bm = istru_help.help_pybm then ls_filter = trim(istru_help.help_now_bm) +" like '%"+ Upper(trim(ls_key)) +"%'" else ls_filter = trim(istru_help.help_now_bm) +" like '"+trim(ls_key)+"%'" end if else ls_filter = "" end if this.SetFilter(ls_filter) this.Filter() this.SetRedraw(true) if this.rowcount() > 0 then this.selectrow(0,false) this.selectrow(1,true) end if end if end if ---- 8. 为多行编辑器mle_2对象编写脚本: ---- ①getfous事件脚本: is_getfocus = "mle_2" send(handle(this),256,35,long(0,0)) // 送End消息键使光标移到编辑区的尾部 ---- ②ue_keydown事件脚本: dw_help.triggerevent("ue_keydown") ---- 三、调用方法: ---- 在调用通用代码帮助窗口w_help之前,应先创建一DataStore对象, 该DataStore对象必须具有数字编码列、拼音编码列和被编码的关键词列,并从与之关联的表中检索出数据,之后,在任一须调用处编写以下代码(以油品名称编码对照表为例,其上述三列分别为ypbm(油品编码)、pybm(拼音字头编码,液代汽编为"YHQ"),ypmc(油品名称,如"液化汽")): s_help ls_help // 局部结构变量 ls_help.dw_name = ids_ypbm // 事先定义并完成了数据检索的一 DataStore实例变量 ls_help.help_name = "ypmc" ls_help.help_code = "ypbm" ls_help.help_pybm = "ypbm" ls_help.help_now_bm = "ypbm" // 默认为首先使用数字编码检索方案 ls_help.w_title = "油品名称编码对照表帮助窗口" OpenWithParm(w_help,ls_help) ---- 四、功能特点 ---- "通用编码帮助窗口"具有以下功能特点: ---- 1.能根据用户键入的字符序列对dw_help对象中的数据行进行筛选,如果键入的第一个字符为0~9间的数字字符,则根据数字编码字段筛选,否则以拼音编码字段筛选,从而实现 快速定位; ---- 2.用户可按Tab键实现从多行编辑器对象mle_2到DataWindow对象dw_help间的焦点切换; ---- 3.无论当前焦点处在对象dw_help上,还是处在对象mle_2上,均使得用户的键入在对象mle_2的Text属性中同步表现,并相应地触发对对象dw_help的数据行进行筛选;任何时候用户都可按Escape键不选择任何数据行而退出并关闭帮助窗口; ---- 4.支持Backspace键按"先进后出"的方式依次删除键入的字符,并同步触发对象dw_help中的数据行的筛选; ---- 5.当当前焦点处在对象dw_help上时,可用上、下光标键让光带在数据行上滚动;按回车键或双击鼠标左键选中数据行退出并关闭帮助窗口。 ---- 五、总结 ---- "通用编码帮助窗口"的设计,在充分利用PB独特的DataWindow对象特点的同时,巧妙地运用其过滤器函数Filter( ),使DataWindow对象dw_help中的主要缓冲区(Primary Buffer)与过滤缓冲区(Filter Buffer)中的数据行,能根据用户的键入,相应地进行调度,以达到满足用户快速检索的需要;一次性地从后台数据库中检索数据编码对照表,并把数据保存在一DataStore对象(本地内存)中,通过数据共享函数ShareData( )完成其数据行到编码帮助窗口对象dw_help的传递,大大节省了(网络后台)数据库检索的开销,极大地提高了窗口的响应速度。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DATAWINDOW 设计 通用 编码 帮助 窗口
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【仙人****88】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【仙人****88】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【仙人****88】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【仙人****88】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文