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

国防科技大学理学院 陈玉教
邮编: 410073

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

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

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

Public Function Integer Shell_NotyIcon
(Long dwMessage, Any lpData) Library "shell32"
Alias For "Shell_NotyIconA"
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、应用入口
---- 在ApplicationOpen Scripts中输入下列:

---- Open (win_systray)

---- 3、窗口和Scripts

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

Cbsize Long
Hwnd Long
Uid Long
Uflags Long
Ucallbackmessage Long
Hicon Long
Sztip any

---- 再定义 3个:
---- 1、AddToTray参数:无;返回值:布尔值(True/False)

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

hIcon = 0 then
MessageBox ("", "不能加载图标!")
Return False

nid = SetNotyIconData (Handle (This), 0,
NIF_MESSAGEorNIF_ICONorNIF_TIP, WM_MOUSEMOVE,
hIcon, "TestTip")
Shell_NotyIcon (NIM_ADD, nid)

Return True
end

---- 2、RemoveFromTray ;参数:无;返回值:无
// RemoveFromTray
Any nid
nid = SetNotyIconData (Handle (This), 0,
NIF_MESSAGEorNIF_ICONorNIF_TIP, 0, hIcon, "")
Shell_NotyIcon (NIM_DELETE, nid)
hIcon < > 0 then DestroyIcon (hIcon)
hIcon = 0

---- 3、SetNotyIconData (Long hWnd, Long ID, Long Flags,
Long CallbackMessage, Long Icon, String Tip);
返回值:notyicondata
// NotyIconData SetNotyIconData (Long hWnd, Long ID,
Long Flags, Long CallbackMessage, Long Icon, String Tip)
Char MyTip [64]
NotyIconData 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
NidTemp
最后在窗口有关事件中输入:
Open 事件
AddToTray then Visible = False
Close 事件
RemoveFromTray
CloseQuery 事件
CanClose then
Return 0

Visible = False
Return 0
End
Resize事件
sizetype = 1 then Visible = False

4、 测试
---- 完成上述工作后就可以运行并加以测试了进入运行在图标栏中就注册了个图标单击就弹出窗口窗口举例如下图所示(略):
---- 这时最小化该窗口不会在Windows 9.x或Windows NT任务栏中显示而是缩小成个在图标栏中图标

---- 上述举例在Windows 9.8、Windows NT V4.0和PowerBuilder 6.5下测试通过 
Tags:  powerbuilder是什么 powerbuilder9.0 powerbuilder powerbuilder

延伸阅读

最新评论

发表评论