


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用PB做一个通用右键菜单对象被右键单击就弹出一个功能菜单是Windows应用程序一项不可缺少的功能。在PowerBuilder应用开发中,可在需弹出右键菜单对象的rbuttondown事件中调用该菜单的Popmenu( )方法实现这一功能。但多数情况下,应用中有多处要用到不同的弹出式菜单,如一一用这种方法就需要做大量的工作。能不能做一个通用的菜单,可以用任何对象的rbuttondown事件激发弹出,并在弹出前动态改变弹出菜单项的内容,当点击菜单项时又可执行被右击对象的相应用户事件?由于这一技术最大的特点是当函数创建成功后,可在任何应用的任何对象中随心所欲的使用,随时随地弹出自己想要显示的菜单项,并执行相应的自己需要的功能脚本,但目前各种资料上鲜有系统、成型的介绍。一、 创建弹出菜单m_popup 1、创建一个菜单m_popup,定义菜单条m_main,其下有十五个菜单项,分别命名为m_item1,m_item2,m_item1,各项的显示文本(text)分别为item1,item2, item15; 2、为m_popup菜单定义一个Powerobject类型的Instance Variables变量:Anyobject , 脚本为: Powerobject Anyobject 3、给m_item1,m_item2,m_item15各菜单项的Clicked事件下分别输入脚本: Anyobject.triggerevent(ue_item1) /m_item1的clicked事件Anyobject.triggerevent(ue_item2) Anyobject.triggerevent(ue_item15)4、定义几个菜单函数:- 1) setmenuitem(string itemstring),返回值为Null。/参数Itemstring是由多个子串组成的。各个子串间用“|”间隔,每个子串为一个菜单项的显示文本(text)。 /该函数功能是把itemstring分解为多个子串,并把子串赋给相应菜单项的text。脚本如下: int itempos,itemorder=1,li string currentitem /messagebox(len(itemstring),string(len(itemstring)if len(itemstring)=0 then return elseitempos=pos(itemstring,|)/messagebox(itempos,string(itempos)DO WHILE itempos0 / itempos为间隔符|的位置currentitem=left(itemstring,itempos -1) /取出子串 /messagebox(currentitem,string(currentitem)itemstring=mid(itemstring,itempos+1) this.m_main.itemitemorder.text=currentitemitempos=pos(itemstring,|) /messagebox(itempos=pos(itemstring,string(itempos)itemorder=itemorder+1 /messagebox(itemorder+,string(itemorder)LOOPthis.m_main.itemitemorder.text=itemstring for li=1 to itemorderthis.m_main.itemli.visible=true this.m_main.itemli.enabled=true nextend if for li=itemorder+1 to 15 this.m_main.itemli.visible=false next /2)setitemdisable(integer itemorder) 返回值Null。 /该函数把第itemorder菜单项置灰(disable)。 脚本如下: if itemorder15 then return elsethis.m_main.itemitemorder.enabled=false end if3)popupmenu(integer x, integer y) 返回值Null。/该函数弹出菜单条m_main。 脚本如下:this.m_main.popmenu(x,y)二、 rbuttondown事件激发弹出菜单m_popup至此,我们就可以在窗口中任意对象如DataWindow、 Picture、 SingleLineEdit、 ListBox、PictureListBox、 DropDownPictureListBox、 MultiLineEdit、 ListView、 TreeView等的rbuttondown事件中写脚本调用m_popup的函数来实现右键单击弹出一个菜单。下面以数据窗口dw_1为例,在其rbuttondown事件下写入脚本,使得右击dw_1 可弹出菜单:刷新/插入/删除/修改。步骤如下: 1、事先给窗口定义一个m_popup 型Instance变量om_1: m_popup om_1 2、dw_1的rbuttondown事件脚本:if not isvalid(om_1) then/m_popup om_1om_1= CREATE m_popupend if/把菜单的anyobject指向被右击的对象(dw_1)om_1.Anyobject=thism_popup.setmenuitem(刷新|插入|删除|修改|标签打印)/可在此调用om_1.setitemdisable(itemorder)函数disable某菜单项。m_popup.popupmenu(this.x+ this.pointerx(),this.y+this.pointery()3、 给dw_1定义用户事件ue_item1、ue_item2、ue_item3 及 ue_item4。返回值全为默认的NULL 事件ue_item1脚本:dw_1.retrieve() 事件ue_item2脚本:long newrow newrow=dw_1.insertrow(0) dw_1.scrolltorow(newrow)事件ue_item3脚本:dw_1.deleterow(0) 事件ue_item4脚本: dw_1.update()这样,只要用户单击dw_1弹出的右键菜单,就可完成对dw_1的插入、删除、修改等功能。三、 推广为全程函数 - 如果应用中有许多地方要用此功能,我们可以把dw_1的rbuttondown事件脚本改造成一个全程函数。- 1、将变量om_1定义为global变量: - m_popup om_1 - 2、定义一个全程函数 - pupmenu(powerobject sender,string itemstring,integer x,integer y) 返回值Null。其中参数sender为被右击的对象,itemstring为弹出菜单的菜单项字符串,x、y为菜单弹出的坐标位置。 脚本如下:if not isvalid(om_1) thenom_1= CREATE m_popupend ifom_1.anyobject=senderom_1.setmenuitem(itemstring)sender.triggerevent(ue_beforepop)/激活sender用户事件。om_1.popupmenu(x,y)这样,上述dw_1的rbuttondown事件脚本就可改写为:string items=刷新插入删除修改popmenu(this, items ,this.x+this.pointerx(),this.y+this.pointery()注意:在MDI 应用中,popmenu()函数需要改为:popmenu(this, items ,w_frame.pointerx(),w_frame.pointery()其中w_frame为MDI主窗口名。- 在函数popmenu中,又激活了被右击对象的ue_beforepop用户事件。如有必要,你可以给被右击对象定义一个ue_be
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管网施工安全防护与风险预警管理方案
- 风电场防雷接地系统设计方案
- 排水系统协同调度管理方案
- 建筑垃圾再生混凝土配比方案
- 标准厂房结构设计优化方案
- 铁矿采矿人员配置管理方案
- 共享储能项目设备采购与安装方案
- 内涝点实时监测技术应用方案
- 铁路毕业考试试题及答案
- 护理类双轨制面试题及答案
- 静脉治疗知识培训课件
- 学风建设科研诚信宣教课件
- 2025繁轩科技发展(天津)有限公司公开招聘工作人员35人备考题库及答案解析
- 2025年度水电项目工程结算与审计服务协议
- 国庆节英语介绍模板
- 《油气管道无人机智能巡检系统技术管理规范》
- 德育副校长在新学期德育工作部署会讲话范文
- 巡察工作基本流程课件
- 游艇火灾安全知识培训课件
- (2025年标准)学生玩耍纠纷协议书
- 《机械制图(多学时)》中职全套教学课件
评论
0/150
提交评论