ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:552.50KB ,
资源ID:7693325      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7693325.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(pb8.0-窗口与控件.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

pb8.0-窗口与控件.doc

1、·11· 窗口与控件1 第 章 1 窗口与控件 窗口与控件专题所涉及的范围比较广,如特殊功能控件的实现,友好漂亮界面的制作, 这些都是PB程序员比较感兴趣的话题。在PowerBuilder中,如果善于运用数据窗口与API技术,开发出的应用定将与众不同。本章结合实例介绍如下专题: 制作Splash窗口 制作美观的状态条 系统热键的实现 创建图标栏应用 MDI窗口显示背景图片 定制有特色的图标按钮 导航图界面的制作 制作图文并茂的菜单 窗口内控件大小与窗口大小同步 动态创建控件

2、控件融合技术 窗口中控件显示ToolTips P owerBuilder编程离不开窗口与控件,从某种程度上可以说,现在的可视化编程无非就是将各种控件垒加到窗口中,再加上编写的一些代码,就构成了一个应用程序。因此可以这么理解:窗口与控件是可视化编程的基础。PowerBuilder 8.0提供了类型丰富的窗口及控件,灵活使用它们可以为应用开发提供极大的方便。 很多人认为,PowerBuilder在界面制作方面功能不是很强,很难制作出Delphi那样的漂亮界面。其实只要肯思考,善于利用数据窗口及API等技术,PowerBuilder一样可以制作出美观、友好的用户界面。 本章将结

3、合实例介绍在PowerBuilder中如何制作Splash启动窗口、美观的状态条、图文并茂的菜单以及如何使用系统热键、创建图标栏、用MDI 窗口显示背景图片、定制按钮、制作导航图界面、使窗口内控件大小与窗口大小同步、动态创建控件、使用控件融合、用窗口中控件显示ToolTips等实用技术。 1.1 制作Splash窗口 图1-1 Splash窗口属性设置 现在很多商业软件如PowerBuilder、Word、金山词霸等都会在程序启动时呈现一个Splash窗口,窗口上有软件名称、版本、图标等相关信息或“正在加载,请稍候…”等提示信息,该窗口显示一段时间后会自动关闭。如果在自己开发的系

4、统中启动时也加上一个Splash窗口,虽然不会改善程序性能,但会使应用程序添色不少。 下面介绍在PowerBuilder中如何实现启动时的Splash窗口。实例创建步骤如下: (1) 创建Splash窗口。选择工具栏中的New图标,弹出New对话框,选择PB Object标签页,再选择Window新建一个窗口。 (2) 设置Splash窗口的属性。其中窗口类型设为Popup!,Visible属性、Enabled属性和Center(居中)属性设为True,其他属性都设为False。属性设置如图1-1所示。 (3) 在Splash窗口放置相关控件以显示信息如图标、软件名称、版本和公司名称等

5、可根据软件需要加以选择。最后以“w_Splash”名称保存该窗口。 (4) 为w_Splash窗口的相关事件编写脚本。 ö 设定Splash窗口关闭时间,如5秒,并将Splash置于稍后打开的主窗口之上。在窗口的Open事件中加入脚本: ===================================================================== //设定关闭时间 Timer(5,this) //将Splash窗口置于其他窗口之上 This.SetPosition(Topmost!) ==============================

6、 ö 窗口在5秒钟后接收到Timer事件,关闭w_Splash窗口。在w_Splash的Timer事件中加入: Close(this)//关闭窗口 ö 在窗口的Close事件中关闭Timer事件: Timer(0,this) (5) 为了测试,另外创建一个菜单m_main和一个mdihelp!类型的窗口w_main,并将菜单m_main关联至w_main窗口。w_main作为系统的主窗口。 (6) 调用Splash窗口。程序启动时调用Splash窗口,并连接数据库,最后打开系统主窗口。在Applicati

7、on的Open事件加入如下脚本: ===================================================================== //调用Splash窗口 Open(w_splash) //连接数据库 // Profile EAS Demo DB V4 SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=EAS Demo DB V4;UID=dba;PWD=sql'" Connect; If sqlca.sqlcode

8、<> 0 then Messagebox('连接数据库失败',sqlca.sqlerrtext) Halt Else //打开系统主窗口 Open(w_main) End If ===================================================================== 1.2 制作美观的状态条 一个程序的微帮助状态栏常用于显示该系统的一些重要信息或帮助信息,其重要性是不言而喻的。但PowerBuilder中的微帮助状态栏一直不尽如人意,单一并且不能定制,甚至连字体属性都不能修改,因此有必要自己创建状态栏,使之更加美观

9、漂亮。下面通过实例给出两种定制状态条的方法。 1.2.1 利用Popup窗口 这种方法的原理是利用一个Popup!类型的窗口来放置状态栏的有关信息,如操作员、系统时间等,并将此窗口显示在MDI窗口状态栏合适的位置。这里给出一个在MDI窗口右下角实时显示系统时间的简单例子,运行效果如图1-2所示。 图1-2 状态栏右边显示系统时间 实例创建步骤如下: (1) 创建一个Popup!类型的窗口w_popup_time,并将其Visible属性、Enabled属性设置为True,其他属性都设为False。窗口大小、位置设置:X:0,Y:0,Width:230,Height:52。

10、 (2) 在w_popup_time中放置两个控件: ö sle_time:单行编辑器,用于显示系统时间。将Border的属性设为False,BorderStyle设为StyleBox!。 ö st_1:静态文本框,用于分隔状态栏。将Border的属性设为True,BorderStyle设为StyleRaised!。 (3) 在w_pouup_time窗口的如下事件中编写脚本。 ö Open事件 ===================================================================== //显示时间 sle_time.text =

11、string(now(),"hh:mm:ss") Timer (1) //设置分隔文本的大小、位置 st_1.Move (5, 0) st_1.Resize (16, this.Height) ===================================================================== ö Timer事件 ===================================================================== //刷新显示时间 sle_time.text = string(now(),"hh:mm

12、ss") ===================================================================== (4) 创建一个菜单m_main和一个mdihelp!类型的窗口w_main,并将菜单m_main关联至w_main窗口。w_main作为系统的主窗口。定义w_main窗口的实例变量: ===================================================================== //声明窗口 w_Popup_Time iw_Popup_Time =====================

13、 (5) 在w_main窗口的如下事件中编写脚本: ö Open事件 ===================================================================== long ll_wx,ll_wy,ll_wh,ll_ww ll_wx = this.workspacex ( ) ll_wy = this.workspacey ( ) ll_wh = this.workspaceheight ( ) ll_ww = this.works

14、pacewidth ( ) open(iw_popup_time) //设定位置 iw_popup_time.move(ll_wx + ll_ww - iw_popup_time.width - 100 , & ll_wy + ll_wh - iw_popup_time.height - 6) ===================================================================== ö Resize事件 ======================================================

15、 integer ll_wx ,ll_wy ,ll_wh ,ll_ww ll_wx =this.workspacex ( ) ll_wy =this.workspacey ( ) ll_wh =this.workspaceheight ( ) ll_ww =this.workspacewidth ( ) //MDI窗口改变大小时,iw_popup_time的位置要随之改变 if IsValid (iw_popup_time) then iw_popup_time.move(ll_wx +ll_ww - iw_popup_time.w

16、idth - 100,& ll_wy +ll_wh - iw_popup_time.height - 6 ) end if ===================================================================== ö Ue_move事件(用户自定义事件,Event ID:pbm_move) MDI窗口移动时,iw_popup_time的位置要随之改变,并保持与MDI窗口的相对位置不变。脚本同Resize事件。 1.2.2 利用窗口内控件 利用窗口内控件制作状态条的原理很简单,就是在运行过程中保持该控件与窗口的相对位

17、置不变,并把相关信息显示在该控件中。 本例利用数据窗口控件来显示状态栏信息。 (1) 创建一个Tabular风格,数据源为External的数据窗口d_status_bar。各列定义参见表1-1。 表1-1 d_status_bar 定义 Name Type Length Dec Notes Department String 20 显示部门信息 User String 10 用户名 Sysdate Date 系统日期 Other String 50 其他信息 (2) 为数据窗口对象d_status_bar增加位图及线条

18、等控件,如图1-3所示。这样做的目的是使定制的状态条更加美观。 图1-3 设计数据窗口d_status_bar 其中,在sysdate字段的后面增加一个计算域week,用来根据日期显示星期。计算域的表达式为: ===================================================================== case( daynumber(sysdate ) when 1 then '星期天' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四'

19、when 6 then '星期五' when 7 then '星期六' else '') ===================================================================== 计算域的文本字体(Text Color)设置为: case (daynumber(sysdate) when 1 then 255 when 7 then 255 else 0) 这样设置的用途是:当日期逢周末(星期六、星期天)时,“星期六”、“星期天”字体以红色显示。 至于工具栏字体,尽可以在此数据窗口对象中设置成自己喜欢的。 (3) 创建一个菜单m_

20、main和一个mdi!类型的窗口w_mdi,并将菜单m_main关联至w_mdi窗口。w_ mdi作为系统的主窗口。 (4) 在w_ mdi窗口中加入一个数据窗口控件dw_status_bar,其数据窗口对象为前面创建的d_status_bar。 (5) 为w_ mdi窗口的如下事件中编写脚本: ö Open事件 ===================================================================== //显示状态栏信息 dw_status_bar.Insertrow(0) dw_status_bar.Setitem(1,'de

21、partment', '部门:PowerBuilder编程俱乐部') dw_status_bar.Setitem(1, 'user',' 柜员:柯建勋' ) dw_status_bar.Setitem(1, 'sysdate',now()) //dw_status_bar.Setitem(1, 'other',' 其他信息' ) dw_status_bar.Object.DataWindow.ReadOnly = True ===================================================================== ö Resize事件

22、 ===================================================================== integer li_height,li_width //状态栏 li_height = this.workspaceHeight() li_width = this.workspaceWidth() mdi_1.x = this.workspacex() mdi_1.y = this.workspacey() - 4 mdi_1.height = li_height - dw_status_bar.height + 8 mdi_1

23、width = li_width //定位 dw_status_bar.x = this.workspacex() - 4 dw_status_bar.y = mdi_1.y + mdi_1.height dw_status_bar.width = li_width + 4 ===================================================================== (6) 此状态条的运行效果如图1-4所示。 本例中,在数据窗口对象d_status_bar定制了“部门”、“柜员”、“日期”和“其他信息”四个栏目,在实际应用中

24、可以根据需要来进行扩展、灵活掌握。 不过上面两种方法虽然可以定义出非常漂亮的工具栏,但都不能算严格意义上的可定制状态条,可定制状态条应该是可以在程序中定制和扩展的,请参考第5章“用户对象”的第5.1.3节所给出的实现方法。 图1-4 运行效果 1.3 系统热键的实现 在不少大型应用软件中,用户可以通过使用Ctrl+Alt+F2之类的组合键来方便地进行功能切换和处理,加快用户的操作速度;或者在一些软件中,需要在非本软件窗口中实现热键响应功能,如在很多屏幕捕捉软件中使用热键快速捉图。下面给出在PowerBuilder中系统热键的实现方法。 Windows中系统热键的实现方法首先通

25、过调用API函数RegisterHotKey()为窗口注册热键,当热键按下后,Windows会发送消息给窗口,这时可以在窗口的other事件中处理。关于API应用将在第6章“外部函数和Windows API应用”中详细讲解。 具体步骤如下: (1) 新建一个窗口w_hotkey并定义窗口实例变量: ===================================================================== long atomid Constant integer MOD_ALT = 1 //Alt键 Constant integer MOD_CONT

26、ROL = 2 //Ctrl键 Constant integer MOD_SHIFT = 4 //Shift键 ===================================================================== (2) 声明API函数: ===================================================================== FUNCTION Integer GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR

27、"GlobalAddAtomA" FUNCTION ulong RegisterHotKey(ulong hwnd,ulong id,ulong fsModifiers,ulong- vk) LIBRARY "user32.dll" ===================================================================== (3) 在窗口w_hotkey的open事件中编写脚本注册热键: ===================================================================== //注册

28、热键 long ll_RC string ls_atomid ls_atomid = 'myatomid' atomid = GlobalAddAtom(ls_atomid) //得到ID,保证不和其他应用程序发生冲突 ll_RC = RegisterHotKey(Handle(this), atomid, MOD_ALT + MOD_CONTROL, 65) //注册的热键为Ctrl+Alt+A ,65为'A' If ll_RC = 0 then //热键注册冲突 Messagebox("Error!","热键注册错误") End if =====

29、 (4) 在窗口w_hotkey的other事件中编写脚本: ===================================================================== //处理系统热键 IF wparam = atomid THEN //处理… MessageBox('hello','你好!') END IF ====================================================

30、 1.4 实现图标栏应用 图标栏应用是目前应用比较广泛的一种技术,系统运行后,在Windows操作系统的图标栏中显示该应用程序的图标,当双击图标时弹出相应的窗口,就像金山词霸、某些杀毒监控软件或PowerBuilder 8.0自带的Adaptive Server Anywhere 7.0数据库启动后一样。下面以一个实例来介绍在PowerBuilder中如何实现图标栏应用。 1.4.1 实例运行效果 ö 启动程序时自动加载图标到Windows图标栏,当鼠标移至图标上时,显示提示信息,如系统名字等,如图1-5所示。 图1-5 图标栏应用 ö

31、双击应用栏图标,显示系统主窗口,并更换不同图标,以表示已打开主窗口,如图1-6所示。 ö 右击应用栏图标,弹出功能菜单,如图1-7所示。此时选择不同菜单项,可启动不同功能项。 图1-6 双击应用栏图标,显示系统主窗口 图1-7 右键菜单 1.4.2 实例创建步骤 (1) 准备资源文件。在创建程序前,先准备两个用于在图标栏中显示的图标文件(.ICO),本例中选用了sysicon1.ico和sysicon2.ico。 (2) 建立一个应用程序对象及Main!类型的窗口w_systray。 (3) 创建结构str_notifyicondata,结构定义如图1-8所示。 图1-8 结构str_notifyicondata (4) 声明全局外部函数: ===================================================================== Public Function Integer Shell_NotifyIcon (Long dwMessage, Any lpData) Library

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服