收藏 分享(赏)

pb8.0-窗口与控件.doc

上传人:hwpkd79526 文档编号:7462979 上传时间:2019-05-19 格式:DOC 页数:11 大小:552.50KB
下载 相关 举报
pb8.0-窗口与控件.doc_第1页
第1页 / 共11页
pb8.0-窗口与控件.doc_第2页
第2页 / 共11页
pb8.0-窗口与控件.doc_第3页
第3页 / 共11页
pb8.0-窗口与控件.doc_第4页
第4页 / 共11页
pb8.0-窗口与控件.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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

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

3、动窗口、美观的状态条、图文并茂的菜单以及如何使用系统热键、创建图标栏、用 MDI 窗口显示背景图片、定制按钮、制作导航图界面、使窗口内控件大小与窗口大小同步、动态创建控件、使用控件融合、用窗口中控件显示 ToolTips 等实用技术。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 所

5、示。(3) 在 Splash 窗口放置相关控件以显示信息如图标、软件名称、版本和公司名称等,P图 1-1 Splash 窗口属性设置窗口与控件 31可根据软件需要加以选择。最后以“w_Splash”名称保存该窗口。(4) 为 w_Splash 窗口的相关事件编写脚本。 设定 Splash 窗口关闭时间,如 5 秒,并将 Splash 置于稍后打开的主窗口之上。在窗口的 Open 事件中加入脚本:=/设定关闭时间Timer(5,this)/将 Splash 窗口置于其他窗口之上This.SetPosition(Topmost!) = 窗口在 5 秒钟后接收到 Timer 事件,关闭 w_Spla

6、sh 窗口。在 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 窗口,并连接数据库,最后打开系统主窗口。在 Application 的 Open 事件加入如下脚本:=/调用 Splash 窗口Open(w_splash)/连接数据库/ Prof

7、ile EAS Demo DB V4SQLCA.DBMS = “ODBC“SQLCA.AutoCommit = FalseSQLCA.DBParm = “ConnectString=DSN=EAS Demo DB V4;UID=dba;PWD=sql“Connect;If sqlca.sqlcode 0 thenMessagebox(连接数据库失败,sqlca.sqlerrtext)HaltElse/打开系统主窗口Open(w_main)End If=PowerBuilder 8.0 进阶篇41.2 制作美观的状态条一个程序的微帮助状态栏常用于显示该系统的一些重要信息或帮助信息,其重要性是不言

8、而喻的。但 PowerBuilder 中的微帮助状态栏一直不尽如人意,单一并且不能定制,甚至连字体属性都不能修改,因此有必要自己创建状态栏,使之更加美观、漂亮。下面通过实例给出两种定制状态条的方法。1.2.1 利用 Popup 窗口这种方法的原理是利用一个 Popup!类型的窗口来放置状态栏的有关信息,如操作员、系统时间等,并将此窗口显示在 MDI 窗口状态栏合适的位置。这里给出一个在 MDI 窗口右下角实时显示系统时间的简单例子,运行效果如图 1-2 所示。图 1-2 状态栏右边显示系统时间实例创建步骤如下:(1) 创建 一 个 Popup!类 型 的 窗 口 w_popup_time, 并

9、 将 其 Visible 属 性 、 Enabled 属 性 设 置为 True, 其 他 属 性 都 设 为 False。 窗 口 大 小 、 位 置 设 置 :X: 0, Y: 0, Width: 230, Height: 52。(2) 在 w_popup_time 中放置两个控件: sle_time:单行编辑器,用于显示系统时间。将 Border 的属性设为False,BorderStyle 设为 StyleBox!。 st_1:静态文本框,用于分隔状态栏。将 Border 的属性设为 True,BorderStyle设为 StyleRaised!。(3) 在 w_pouup_time

10、窗口的如下事件中编写脚本。 Open 事件=/显示时间sle_time.text = string(now(),“hh:mm:ss“)Timer (1)窗口与控件 51/设置分隔文本的大小、位置st_1.Move (5, 0)st_1.Resize (16, this.Height)= Timer 事件=/刷新显示时间sle_time.text = string(now(),“hh:mm:ss“)=(4) 创建一个菜单 m_main 和一个 mdihelp!类型的窗口 w_main,并将菜单 m_main 关联至 w_main 窗口。w_main 作为系统的主窗口。定义 w_main 窗口的实

11、例变量:=/声明窗口w_Popup_Time iw_Popup_Time=(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.workspacewidth ( )open(iw_popup_time)/设定位置iw_popup_time.move(ll_wx + ll_ww - iw_popup_time.width - 1

12、00 , &ll_wy + ll_wh - iw_popup_time.height - 6)= Resize 事件=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 的位置要随之改变PowerBuilder 8.0 进阶篇6if IsValid (iw_popup_time) theniw_pop

13、up_time.move(ll_wx +ll_ww - iw_popup_time.width - 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 利用窗口内控件利用窗口内控件制作状态条的原理很简单,就是在运行过程中保持该控件与窗口的相对位置不变,并把相关信息显示在该控件中。本例利用数据窗口控件来显示状态栏信息。(1

14、) 创建一个 Tabular 风格,数据源为 External 的数据窗口 d_status_bar。各列定义参见表 1-1。表 1-1 d_status_bar 定义Name Type Length Dec NotesDepartment String 20 显示部门信息User String 10 用户名Sysdate Date 系统日期Other String 50 其他信息(2) 为数据窗口对象 d_status_bar 增加位图及线条等控件,如图 1-3 所示。这样做的目的是使定制的状态条更加美观。图 1-3 设计数据窗口 d_status_bar其中,在 sysdate 字段的后面

15、增加一个计算域 week,用来根据日期显示星期。计算域的表达式为:=case( daynumber(sysdate ) when 1 then 星期天 when 2 then 星期一 when 3 then 星期二 when 4 then 星期三 when 5 then 星期四 when 6 then 星期窗口与控件 71五 when 7 then 星期六 else )=计算域的文本字体(Text Color )设置为:case (daynumber(sysdate) when 1 then 255 when 7 then 255 else 0)这样设置的用途是:当日期逢周末(星期六、星期天)

16、时,“星期六”、“星期天”字体以红色显示。至于工具栏字体,尽可以在此数据窗口对象中设置成自己喜欢的。(3) 创建一个菜单 m_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,department,

17、 部门: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 事件=integer li_height,li_width/状态栏li_height = this.workspaceHeight()li_width = this.workspaceWidth()mdi_1.

18、x = this.workspacex()mdi_1.y = this.workspacey() - 4mdi_1.height = li_height - dw_status_bar.height + 8mdi_1.width = li_width/定位dw_status_bar.x = this.workspacex() - 4dw_status_bar.y = mdi_1.y + mdi_1.height dw_status_bar.width = li_width + 4=PowerBuilder 8.0 进阶篇8(6) 此状态条的运行效果如图 1-4 所示。本例中,在数据窗口对象 d

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

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

21、teger MOD_SHIFT = 4 /Shift 键窗口与控件 91=(2) 声明 API 函数:=FUNCTION Integer GlobalAddAtom(ref string lpString) LIBRARY “kernel32.dll“ ALIAS FOR “GlobalAddAtomA“ FUNCTION ulong RegisterHotKey(ulong hwnd,ulong id,ulong fsModifiers,ulong- vk) LIBRARY “user32.dll“=(3) 在窗口 w_hotkey 的 open 事件中编写脚本注册热键:=/注册热键long

22、 ll_RCstring ls_atomid ls_atomid = myatomidatomid = GlobalAddAtom(ls_atomid) /得到 ID,保证不和其他应用程序发生冲突 ll_RC = RegisterHotKey(Handle(this), atomid, MOD_ALT + MOD_CONTROL, 65) /注册的热键为 Ctrl+Alt+A ,65 为AIf ll_RC = 0 then /热键注册冲突Messagebox(“Error!“,“热键注册错误“) End if=(4) 在窗口 w_hotkey 的 other 事件中编写脚本:=/处理系统热键I

23、F wparam = atomid THEN /处理MessageBox(hello,你好!)END IF=1.4 实现图标栏应用图标栏应用是目前应用比较广泛的一种技术,系统运行后,在 Windows 操作系统的图标栏中显示该应用程序的图标,当双击图标时弹出相应的窗口,就像金山词霸、某些杀毒监控软件或 PowerBuilder 8.0 自带的 Adaptive Server Anywhere 7.0 数据库启动后一样。PowerBuilder 8.0 进阶篇10下面以一个实例来介绍在 PowerBuilder 中如何实现图标栏应用。1.4.1 实例运行效果 启动程序时自动加载图标到 Windo

24、ws 图标栏,当鼠标移至图标上时,显示提示信息,如系统名字等,如图 1-5 所示。图 1-5 图标栏应用 双击应用栏图标,显示系统主窗口,并更换不同图标,以表示已打开主窗口,如图 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 所示。窗口与控件 111图 1-8 结构 str_notifyicondata(4) 声明全局外部函数:=Public Function Integer Shell_NotifyIcon (Long dwMessage, Any lpData) Library

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报