ehxz 发表于 2007-6-26 12:49:17

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

<p>答:在PowerBuilder中创建图标栏应用: </p><p>---- 在一些应用埸合,常需要在Windows 9.X或Winnt中的图标栏中显示出公司/应用程序的图标,在单击图标时弹出相应的窗口,就象金山词霸一样。下面介绍采用PowerBuilder中在Windows 9.x和Windows NT下显示图标栏图标的方法。 </p><p><br/>一、 建立一个应用程序 <br/>---- 在创建程序前,先准备一个用于在图标栏中显示的图标文件(.ICO),并准备一个用于弹出窗口显示的图片(BMP 256色)。启动PowerBuilder,创建一个应用(Application),取应用名Starsoft(任意),注意采用模板生成却缺省窗口。 <br/>二、 创建要显示的图标窗口 <br/>---- 创建一个用于显示成图标的窗口,取名为W_systray,再在上面放置一张BMP图片,式样如下图所示(略) <br/>---- 设置其它窗口的有关信息,如窗口名等。 </p><p>三、 编程 <br/>---- 1、定义全局外部函数 <br/>---- PowerBuilder本身并不提供用于在图标栏中把窗口显示成图标的函数,但可以通过Windows API调用来实现,有关在PowerBuilder调用相应的API函数如下(定义在全局外部函数中): </p><p>Public Function Integer Shell_NotifyIcon <br/>(Long dwMessage, Any lpData) Library "shell32" <br/>Alias For "Shell_NotifyIconA"<br/>Public Function Long LoadImage (Long hInst, <br/>String lpsz, Long un1, Long n1, Long n2, Long un2) <br/>Library "user32" Alias For "LoadImageA" <br/>Public Function Long DestroyIcon (Long hIcon) <br/>Library "user32" Alias For "DestroyIcon" <br/>Public Function Long SetForegroundWindow (Long hwnd)<br/>Library "user32" Alias For "SetForegroundWindow"<br/>Public Function Long OpenIcon (Long hwnd) <br/>Library "user32" Alias For "OpenIcon"<br/>---- 2、应用入口 <br/>---- 在Application的Open Scripts中,输入下列函数: </p><p>---- Open (win_systray) </p><p>---- 3、窗口函数和Scripts </p><p>---- 在W_systray窗口中,创建一个名称为notifyicondata的结构,定义如下:项目 数据类型 </p><p>Cbsize Long<br/>Hwnd Long<br/>Uid Long<br/>Uflags Long<br/>Ucallbackmessage Long<br/>Hicon Long<br/>Sztip any<br/>---- 再定义三个函数: <br/>---- 1、AddToTray(),参数:无;返回值:布尔值(True/False) </p><p>// Boolean AddToTray ()<br/>Any nid<br/>if hIcon = 0 then<br/>// the icon has not been loaded yet<br/>hIcon = LoadImage(0, "SysTray.ico", <br/>IMAGE_ICON, 0, 0, LR_LOADFROMFILE)<br/>end if</p><p>if hIcon = 0 then<br/>MessageBox ("错误", "不能加载图标!")<br/>Return False<br/>else<br/>nid = SetNotifyIconData (Handle (This), 0,<br/>NIF_MESSAGEorNIF_ICONorNIF_TIP, WM_MOUSEMOVE,<br/>hIcon, "TestTip")<br/>Shell_NotifyIcon (NIM_ADD, nid)</p><p>Return True<br/>end if<br/>---- 2、RemoveFromTray ();参数:无;返回值:无 <br/>// RemoveFromTray ()<br/>Any nid<br/>nid = SetNotifyIconData (Handle (This), 0,<br/>NIF_MESSAGEorNIF_ICONorNIF_TIP, 0, hIcon, "")<br/>Shell_NotifyIcon (NIM_DELETE, nid)<br/>if hIcon &lt; &gt; 0 then DestroyIcon (hIcon)<br/>hIcon = 0<br/>---- 3、SetNotifyIconData (Long hWnd, Long ID, Long Flags, <br/>Long CallbackMessage, Long Icon, String Tip);<br/>返回值:notifyicondata<br/>// NotifyIconData SetNotifyIconData (Long hWnd, Long ID,<br/>Long Flags, Long CallbackMessage, Long Icon, String Tip)<br/>Char MyTip <br/>NotifyIconData NidTemp<br/>NidTemp.cbSize = 88 // Len (NidTemp)<br/>NidTemp.hWnd = hWnd<br/>NidTemp.uID = ID<br/>NidTemp.uFlags = Flags<br/>NidTemp.uCallbackMessage = CallbackMessage<br/>NidTemp.hIcon = Icon<br/>MyTip = Tip + Char (0)<br/>NidTemp.szTip = MyTip<br/>return NidTemp<br/>最后,在窗口的有关事件中输入函数: <br/>Open 事件<br/>if AddToTray () then Visible = False<br/>Close 事件<br/>RemoveFromTray ()<br/>CloseQuery 事件<br/>if CanClose then<br/>Return 0<br/>else<br/>Visible = False<br/>Return 0<br/>End if<br/>Resize事件<br/>if sizetype = 1 then Visible = False<br/>四、 测试 <br/>---- 完成上述工作后,就可以运行并加以测试了。进入运行,在图标栏中就注册了一个图标,单击就弹出窗口,窗口示例如下图所示(略): <br/>---- 这时,最小化该窗口,不会在Windows 9.x或Windows NT的任务栏中显示,而是缩小成一个在图标栏中的图标。 <br/></p><!--Element not supported - Type: 8 Name: #comment-->

lovelyni 发表于 2007-12-19 22:13:38

不错

vulee 发表于 2007-12-26 15:05:20

版主,真强汉............,本人羡慕不己
页: [1]
查看完整版本: [转帖]问:如何在PowerBuilder中创建图标栏应用?

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

Mail To:Admin@SybaseBbs.com