祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 5306|回复: 2

[转帖]问:如何在PowerBuilder中创建图标栏应用?

[复制链接]

[转帖]问:如何在PowerBuilder中创建图标栏应用?

[复制链接]
ehxz

主题

0

回帖

58万

积分

管理员

积分
588671
贡献
在线时间
小时
2007-6-26 12:49:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×

答:在PowerBuilder中创建图标栏应用:

---- 在一些应用埸合,常需要在Windows 9.X或Winnt中的图标栏中显示出公司/应用程序的图标,在单击图标时弹出相应的窗口,就象金山词霸一样。下面介绍采用PowerBuilder中在Windows 9.x和Windows NT下显示图标栏图标的方法。


一、 建立一个应用程序
---- 在创建程序前,先准备一个用于在图标栏中显示的图标文件(.ICO),并准备一个用于弹出窗口显示的图片(BMP 256色)。启动PowerBuilder,创建一个应用(Application),取应用名Starsoft(任意),注意采用模板生成却缺省窗口。
二、 创建要显示的图标窗口
---- 创建一个用于显示成图标的窗口,取名为W_systray,再在上面放置一张BMP图片,式样如下图所示(略)
---- 设置其它窗口的有关信息,如窗口名等。

三、 编程
---- 1、定义全局外部函数
---- PowerBuilder本身并不提供用于在图标栏中把窗口显示成图标的函数,但可以通过Windows API调用来实现,有关在PowerBuilder调用相应的API函数如下(定义在全局外部函数中):

Public Function Integer Shell_NotifyIcon
(Long dwMessage, Any lpData) Library "shell32"
Alias For "Shell_NotifyIconA"
Public Function Long LoadImage (Long hInst,
String lpsz, Long un1, Long n1, Long n2, Long un2)
Library "user32" Alias For "LoadImageA"
Public Function Long DestroyIcon (Long hIcon)
Library "user32" Alias For "DestroyIcon"
Public Function Long SetForegroundWindow (Long hwnd)
Library "user32" Alias For "SetForegroundWindow"
Public Function Long OpenIcon (Long hwnd)
Library "user32" Alias For "OpenIcon"
---- 2、应用入口
---- 在Application的Open Scripts中,输入下列函数:

---- Open (win_systray)

---- 3、窗口函数和Scripts

---- 在W_systray窗口中,创建一个名称为notifyicondata的结构,定义如下:项目 数据类型

Cbsize Long
Hwnd Long
Uid Long
Uflags Long
Ucallbackmessage Long
Hicon Long
Sztip any
---- 再定义三个函数:
---- 1、AddToTray(),参数:无;返回值:布尔值(True/False)

// Boolean AddToTray ()
Any nid
if hIcon = 0 then
// the icon has not been loaded yet
hIcon = LoadImage(0, "SysTray.ico",
IMAGE_ICON, 0, 0, LR_LOADFROMFILE)
end if

if hIcon = 0 then
MessageBox ("错误", "不能加载图标!")
Return False
else
nid = SetNotifyIconData (Handle (This), 0,
NIF_MESSAGEorNIF_ICONorNIF_TIP, WM_MOUSEMOVE,
hIcon, "TestTip")
Shell_NotifyIcon (NIM_ADD, nid)

Return True
end if
---- 2、RemoveFromTray ();参数:无;返回值:无
// RemoveFromTray ()
Any nid
nid = SetNotifyIconData (Handle (This), 0,
NIF_MESSAGEorNIF_ICONorNIF_TIP, 0, hIcon, "")
Shell_NotifyIcon (NIM_DELETE, nid)
if hIcon < > 0 then DestroyIcon (hIcon)
hIcon = 0
---- 3、SetNotifyIconData (Long hWnd, Long ID, Long Flags,
Long CallbackMessage, Long Icon, String Tip);
返回值:notifyicondata
// NotifyIconData SetNotifyIconData (Long hWnd, Long ID,
Long Flags, Long CallbackMessage, Long Icon, String Tip)
Char MyTip [64]
NotifyIconData NidTemp
NidTemp.cbSize = 88 // Len (NidTemp)
NidTemp.hWnd = hWnd
NidTemp.uID = ID
NidTemp.uFlags = Flags
NidTemp.uCallbackMessage = CallbackMessage
NidTemp.hIcon = Icon
MyTip = Tip + Char (0)
NidTemp.szTip = MyTip
return NidTemp
最后,在窗口的有关事件中输入函数:
Open 事件
if AddToTray () then Visible = False
Close 事件
RemoveFromTray ()
CloseQuery 事件
if CanClose then
Return 0
else
Visible = False
Return 0
End if
Resize事件
if sizetype = 1 then Visible = False
四、 测试
---- 完成上述工作后,就可以运行并加以测试了。进入运行,在图标栏中就注册了一个图标,单击就弹出窗口,窗口示例如下图所示(略):
---- 这时,最小化该窗口,不会在Windows 9.x或Windows NT的任务栏中显示,而是缩小成一个在图标栏中的图标。

共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
lovelyni

主题

0

回帖

76

积分

注册会员

积分
76
贡献
在线时间
小时
2007-12-19 22:13:38 | 显示全部楼层
不错
共享共进共赢Sharing And Win-win Results
vulee

主题

0

回帖

11

积分

新手上路

积分
11
贡献
在线时间
小时
2007-12-26 15:05:20 | 显示全部楼层
版主,真强汉............,本人羡慕不己
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-11-24 12:27 , Processed in 2.404558 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表