第 章
1
窗口与控件
窗口与控件专题所涉及的范围比较广,如特殊功能控件的实现,友好漂亮界面的制作,
这些都是PB程序员比较感兴趣的话题。在PowerBuilder中,如果善于运用数据窗口与API技术,开发出的应用定将与众不同。本章结合实例介绍如下专题:
制作Splash窗口 制作美观的状态条 系统热键的实现 创建图标栏应用 MDI窗口显示背景图片 定制有特色的图标按钮 导航图界面的制作 制作图文并茂的菜单
窗口内控件大小与窗口大小同步 动态创建控件
控件融合技术
窗口中控件显示ToolTips
·2·
PowerBuilder 8.0进阶篇
P
owerBuilder编程离不开窗口与控件,从某种程度上可以说,现在的可视化编程无非就是将各种控件垒加到窗口中,再加上编写的一些代码,就构成了一个应用程序。因此可以这么理解:窗口与控件是可视化编程的基础。PowerBuilder 8.0提供了类型丰富的窗口及控件,灵活使用它们可以为应用开发提供极大的方便。
很多人认为,PowerBuilder在界面制作方面功能不是很强,很难制作出Delphi那样的漂亮界面。其实只要肯思考,善于利用数据窗口及API等技术,PowerBuilder一样可以制作出美观、友好的用户界面。
本章将结合实例介绍在PowerBuilder中如何制作Splash启动窗口、美观的状态条、图文并茂的菜单以及如何使用系统热键、创建图标栏、用MDI 窗口显示背景图片、定制按钮、制作导航图界面、使窗口内控件大小与窗口大小同步、动态创建控件、使用控件融合、用窗口中控件显示ToolTips等实用技术。
1.1 制作Splash窗口
现在很多商业软件如PowerBuilder、Word、金山词霸等都会在程序启动时呈现一个Splash窗口,窗口上有软件名称、版本、图标等相关信息或“正在加载,请稍候…”等提示信息,该窗口显示一段时间后会自动关闭。如果在自己开发的系统中启动时也加上一个Splash窗口,虽然不会改善程序性能,但会使应用程序添色不少。
下面介绍在PowerBuilder中如何实现启动时的Splash窗口。实例创建步骤如下:
(1) 创建Splash窗口。选择工具栏中的New图标,弹出New对话框,选择PB Object标签页,再选择Window新建一个窗口。
(2) 设置Splash窗口的属性。其中窗口类型设为Popup!,Visible 属性、Enabled属性和Center(居中)图1-1 Splash窗口属性设置 属性设为True,其他属性都设为False。属性设置如图1-1所示。
(3) 在Splash窗口放置相关控件以显示信息如图标、软件名称、版本和公司名称等,可根据软件需要加以选择。最后以“w_Splash”名称保存该窗口。
窗口与控件 ·3· (4) 为w_Splash窗口的相关事件编写脚本。 ? 设定Splash窗口关闭时间,如5秒,并将Splash置于稍后打开的主窗口之上。在窗口的Open事件中加入脚本: ===================================================================== //设定关闭时间 Timer(5,this) //将Splash窗口置于其他窗口之上 This.SetPosition(Topmost!) =====================================================================
? 窗口在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窗口,并连接数据库,最后打开系统主窗口。在Application的Open事件加入如下脚本:
=====================================================================
//调用Splash窗口 Open(w_splash)
//连接数据库
// Profile EAS Demo DB V4 SQLCA.DBMS = \
SQLCA.AutoCommit = False
SQLCA.DBParm = \Connect;
If sqlca.sqlcode <> 0 then Messagebox('连接数据库失败',sqlca.sqlerrtext) Halt Else //打开系统主窗口 Open(w_main) End If
=====================================================================
1.2 制作美观的状态条
一个程序的微帮助状态栏常用于显示该系统的一些重要信息或帮助信息,其重要性是
·4·
PowerBuilder 8.0进阶篇
不言而喻的。但PowerBuilder中的微帮助状态栏一直不尽如人意,单一并且不能定制,甚至连字体属性都不能修改,因此有必要自己创建状态栏,使之更加美观、漂亮。下面通过实例给出两种定制状态条的方法。
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。
(2) 在w_popup_time中放置两个控件: ? sle_time:单行编辑器,用于显示系统时间。将Border的属性设为False,BorderStyle
设为StyleBox!。
? st_1:静态文本框,用于分隔状态栏。将Border的属性设为True,BorderStyle设
为StyleRaised!。
(3) 在w_pouup_time窗口的如下事件中编写脚本。 ? Open事件 =====================================================================
//显示时间
sle_time.text = string(now(),\Timer (1)
//设置分隔文本的大小、位置 st_1.Move (5, 0)
st_1.Resize (16, this.Height)
=====================================================================
窗口与控件 ·5· ? Timer事件 ===================================================================== //刷新显示时间 sle_time.text = string(now(),\===================================================================== (4) 创建一个菜单m_main和一个mdihelp!类型的窗口w_main,并将菜单m_main关联至w_main窗口。w_main作为系统的主窗口。定义w_main窗口的实例变量: =====================================================================
//声明窗口
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 - 100 , & 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的位置要随之改变 if IsValid (iw_popup_time) then iw_popup_time.move(ll_wx +ll_ww - iw_popup_time.width - 100,& ll_wy +ll_wh - iw_popup_time.height - 6 ) end if
=====================================================================
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PB操作技巧在线全文阅读。
相关推荐: