【VB】哪位大神可改造VB6自带的systray.ocx控件,让其显示气泡提示???

buaazk 信息管理员  2016-08-01 11:57:18
用VB6自带的systray.ocx控件实现托盘图标程序,基本功能都有,就是没有气泡提示,按照网上的方法修改,添加了以下程序:
Tray.dwState = 0
Tray.dwStateMask = 0
Tray.szInfo = TipContent & vbNullChar
Tray.uTimeoutOrVersion = 12000
Tray.szInfoTitle = TipTitle & vbNullChar
Tray.dwInfoFlags = NIIF_INFO
Tray.uFlags = NIF_INFO
但是就显示不出气泡,没反应,求助啊,怎么改造呢,死活不出来气泡提示!


求助啊,不要其他方法,就是改造这个控件实现,想着很简单,但是就是显示不出来。
...全文
959 点赞 收藏 36
写回复
36 条回复
舉杯邀明月 2016年08月09日
引用 34 楼 buaazk 的回复:
[quote=引用 33 楼 Chen8013 的回复:]
[quote=引用 32 楼 buaazk 的回复:]
[quote=引用 31 楼 舉杯邀明月的回复:]我的ShowTooltip()是显示固定内容。
如果你测试成功后,可以自己修改、封装,改成能显示任意内容。
自己注意“内容长度”的限制!

谢谢,我试试,但是ocx控件的公共事件不是那么写的,像你那样写,封装成控件后就调不出来了,没有这个函数。之前好像有试过。如果你那里直接能测试成功了,麻烦给我邮箱发下修改后控件的源码。buaazk@163.com,谢谢了,我实在不会了,给个现成的吧。[/quote]
那个不是“事件”好不好!是一个“公共方法(过程)”。
你看我在19楼的代码,在 Command2_Click()中, 那不就是通过控件对象调用的吗!
注意,是添加到cSysTray.ctl 的代码中。
你说“没有这个函数”, 你是不是把它写到mSysTray.bas中去了???
[/quote]


按照你的方法搞定了,终于可以气泡提示了,太感谢了,分值给你,另外有时间的话可以在CSDN的问答上回答下我这个问题,我之前也有悬赏,发了两次,没人能作答,你回答了我把分值给你。

另外再问下Tray.uFlags = 16中16是指啥意思,还有我用Tray.uTimeoutOrVersion = 10000想控制气泡显示时间,但'貌似不起作用,感觉气泡显示时间太短了。[/quote]
Tray.uFlags = 16  就是设置Tray成员中“气泡提示”相关的成员有效啊。
Private Const NIF_INFO As Long = &H10

至于控制显示时间,看看这个:


问答的帖子,你给个链接吧,我刚才进入“问答”随便看了两页,没找到。
回复 点赞
buaazk 2016年08月09日
引用 33 楼 Chen8013 的回复:
[quote=引用 32 楼 buaazk 的回复:] [quote=引用 31 楼 舉杯邀明月的回复:]我的ShowTooltip()是显示固定内容。 如果你测试成功后,可以自己修改、封装,改成能显示任意内容。 自己注意“内容长度”的限制!
谢谢,我试试,但是ocx控件的公共事件不是那么写的,像你那样写,封装成控件后就调不出来了,没有这个函数。之前好像有试过。如果你那里直接能测试成功了,麻烦给我邮箱发下修改后控件的源码。buaazk@163.com,谢谢了,我实在不会了,给个现成的吧。[/quote] 那个不是“事件”好不好!是一个“公共方法(过程)”。 你看我在19楼的代码,在 Command2_Click()中, 那不就是通过控件对象调用的吗! 注意,是添加到cSysTray.ctl 的代码中。 你说“没有这个函数”, 你是不是把它写到mSysTray.bas中去了??? [/quote] 按照你的方法搞定了,终于可以气泡提示了,太感谢了,分值给你,另外有时间的话可以在CSDN的问答上回答下我这个问题,我之前也有悬赏,发了两次,没人能作答,你回答了我把分值给你。 另外再问下Tray.uFlags = 16中16是指啥意思,还有我用Tray.uTimeoutOrVersion = 10000想控制气泡显示时间,但'貌似不起作用,感觉气泡显示时间太短了。
回复 点赞
buaazk 2016年08月09日
引用 35 楼 Chen8013 的回复:
[quote=引用 34 楼 buaazk 的回复:] [quote=引用 33 楼 Chen8013 的回复:] [quote=引用 32 楼 buaazk 的回复:] [quote=引用 31 楼 舉杯邀明月的回复:]我的ShowTooltip()是显示固定内容。 如果你测试成功后,可以自己修改、封装,改成能显示任意内容。 自己注意“内容长度”的限制!
谢谢,我试试,但是ocx控件的公共事件不是那么写的,像你那样写,封装成控件后就调不出来了,没有这个函数。之前好像有试过。如果你那里直接能测试成功了,麻烦给我邮箱发下修改后控件的源码。buaazk@163.com,谢谢了,我实在不会了,给个现成的吧。[/quote] 那个不是“事件”好不好!是一个“公共方法(过程)”。 你看我在19楼的代码,在 Command2_Click()中, 那不就是通过控件对象调用的吗! 注意,是添加到cSysTray.ctl 的代码中。 你说“没有这个函数”, 你是不是把它写到mSysTray.bas中去了??? [/quote] 按照你的方法搞定了,终于可以气泡提示了,太感谢了,分值给你,另外有时间的话可以在CSDN的问答上回答下我这个问题,我之前也有悬赏,发了两次,没人能作答,你回答了我把分值给你。 另外再问下Tray.uFlags = 16中16是指啥意思,还有我用Tray.uTimeoutOrVersion = 10000想控制气泡显示时间,但'貌似不起作用,感觉气泡显示时间太短了。[/quote] Tray.uFlags = 16  就是设置Tray成员中“气泡提示”相关的成员有效啊。 Private Const NIF_INFO As Long = &H10 至于控制显示时间,看看这个: 问答的帖子,你给个链接吧,我刚才进入“问答”随便看了两页,没找到。 [/quote] 好,知道了,谢谢 http://ask.csdn.net/questions/273674 就找到了一个,CSDN网站有问题,自己的提问找不到,你先答这个吧。
回复 点赞
舉杯邀明月 2016年08月08日
引用 21 楼 zhao4zhong1 的回复:
资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
事实上也证明MS它这个代码没什么用。 1. 它的这个代码,只不过实现了加托盘图标。“气泡提示功能”它根本没有。   因为它定义的NOTIFYICONDATA数据成员,只有前面的7个,跟气泡相关的都被砍掉了。 2. 它这个功能,通过“1用户控件+1标准模块”才实现。代码总共500行左右。   而相同的功能,我的“简易实现”也就是几十行代码而已。   你看看我的6楼的代码,真正的“可执行代码”,另外再加上图标清理、信息提示、菜单消息回调,也不过50来行。   就算“全部功能封装”写到1个标准模块中,整个模块估计也就是百来行。   更何况,我已经有比它强悍很多的一个模块了。    它这个“无用”已经是无法改变的事实。
回复 点赞
舉杯邀明月 2016年08月08日
引用 21 楼 zhao4zhong1 的回复:
资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
回复 点赞
赵4老师 2016年08月08日
资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
回复 点赞
舉杯邀明月 2016年08月08日
引用 32 楼 buaazk 的回复:
[quote=引用 31 楼 舉杯邀明月的回复:]我的ShowTooltip()是显示固定内容。 如果你测试成功后,可以自己修改、封装,改成能显示任意内容。 自己注意“内容长度”的限制!
谢谢,我试试,但是ocx控件的公共事件不是那么写的,像你那样写,封装成控件后就调不出来了,没有这个函数。之前好像有试过。如果你那里直接能测试成功了,麻烦给我邮箱发下修改后控件的源码。buaazk@163.com,谢谢了,我实在不会了,给个现成的吧。[/quote] 那个不是“事件”好不好!是一个“公共方法(过程)”。 你看我在19楼的代码,在 Command2_Click()中, 那不就是通过控件对象调用的吗! 注意,是添加到cSysTray.ctl 的代码中。 你说“没有这个函数”, 你是不是把它写到mSysTray.bas中去了???
回复 点赞
buaazk 2016年08月08日
引用 31 楼 舉杯邀明月的回复:
我的ShowTooltip()是显示固定内容。 如果你测试成功后,可以自己修改、封装,改成能显示任意内容。 自己注意“内容长度”的限制!
谢谢,我试试,但是ocx控件的公共事件不是那么写的,像你那样写,封装成控件后就调不出来了,没有这个函数。之前好像有试过。如果你那里直接能测试成功了,麻烦给我邮箱发下修改后控件的源码。buaazk@163.com,谢谢了,我实在不会了,给个现成的吧。
回复 点赞
舉杯邀明月 2016年08月08日
我的ShowTooltip()是显示固定内容。 如果你测试成功后,可以自己修改、封装,改成能显示任意内容。 自己注意“内容长度”的限制!
回复 点赞
舉杯邀明月 2016年08月08日
算了,我还是直接把我的气泡显示的测试代码贴出来。要不然,估计再让你去搞10天,还是搞不定。 把你的程序图标加到通知区域后,你调用 ShowTooltip() 看看能显示气泡不!
Public Sub ShowTooltip()
   Dim Tray As NOTIFYICONDATA
   
   If gInTray Then
      Tray.cbSize = Len(Tray)
      Tray.hWnd = gTrayHwnd
      Tray.szInfo = "气泡消息,信息内容" & vbNullChar
      Tray.szInfoTitle = "气泡消息" & vbNullChar
      Tray.uFlags = 16
      Tray.dwInfoFlags = 1
      Shell_NotifyIcon 1&, Tray
   End If
End Sub
要注意: NOTIFYICONDATA 这个类型定义,要按我6楼贴出来的那个。  主要是第7个成员,按M$的资料,它倒是 szTip As String * 64  但我实际应用中发现,必须要 szTip As String * 128  才能显示出气泡。
回复 点赞
舉杯邀明月 2016年08月08日
引用 25 楼 buaazk 的回复:
[quote=引用 23 楼 Chen8013 的回复:] [quote=引用 21 楼 zhao4zhong1 的回复:] 资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
事实上也证明MS它这个代码没什么用。 1. 它的这个代码,只不过实现了加托盘图标。“气泡提示功能”它根本没有。   因为它定义的NOTIFYICONDATA数据成员,只有前面的7个,跟气泡相关的都被砍掉了。 2. 它这个功能,通过“1用户控件+1标准模块”才实现。代码总共500行左右。   而相同的功能,我的“简易实现”也就是几十行代码而已。   你看看我的6楼的代码,真正的“可执行代码”,另外再加上图标清理、信息提示、菜单消息回调,也不过50来行。   就算“全部功能封装”写到1个标准模块中,整个模块估计也就是百来行。   更何况,我已经有比它强悍很多的一个模块了。    它这个“无用”已经是无法改变的事实。 [/quote] 如果愿意,可以研究下systray.ocx的控件代码,气泡功能是没有,但看能不能给补回来。之前你提供的ShowToolTip方法我是想不通怎么加入systray.ocx控件中的,它的代码结构和你的感觉不一样的。[/quote] 我在19楼贴出来的,不就是“补回来”的吗! 把 NOTIFYICONDATA 的数据类型定义,换成了我在6楼贴出来的那个; 在systray.ocx代码的最后,增加了一个“ShowTooltip() ”过程。 然后在窗体的 Command2_Click( ) 中调用那个显示气泡的过程,它就显示出来了。 Public Sub ShowTooltip() 我只是测试显示固定内容,全部代码也不过10行而已。
回复 点赞
赵4老师 2016年08月08日
Orz跪求Chen8013贡献个资源,《VB6使用SysTray大全》
回复 点赞
赵4老师 2016年08月08日
引用 24 楼 buaazk 的回复:
[quote=引用 23 楼 Chen8013 的回复:] [quote=引用 21 楼 zhao4zhong1 的回复:] 资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
事实上也证明MS它这个代码没什么用。 1. 它的这个代码,只不过实现了加托盘图标。“气泡提示功能”它根本没有。   因为它定义的NOTIFYICONDATA数据成员,只有前面的7个,跟气泡相关的都被砍掉了。 2. 它这个功能,通过“1用户控件+1标准模块”才实现。代码总共500行左右。   而相同的功能,我的“简易实现”也就是几十行代码而已。   你看看我的6楼的代码,真正的“可执行代码”,另外再加上图标清理、信息提示、菜单消息回调,也不过50来行。   就算“全部功能封装”写到1个标准模块中,整个模块估计也就是百来行。   更何况,我已经有比它强悍很多的一个模块了。    它这个“无用”已经是无法改变的事实。 [/quote] 主要一是我的程序已经大量引用这个控件,再换别的怕直接搞乱了,工作量太大,二是其他的方法我曾经试过,找过一些很短的托盘代码,但是测试不同电脑或不同windows操作系统,那些代码出现过奇奇怪怪的问题,感觉不稳定,所以才用这个控件,这个控件很稳定,不同操作系统没出现过问题。 另外这回帖没办法贴完整的代码,所以贴出来的肯定不全了。用户自己只能连续回复3条帖子,每条帖子还有字数限制,而且还没办法上传附件。[/quote] CSDN管理员看到这字字血声声泪的控诉了吗?
回复 点赞
赵4老师 2016年08月08日
引用 23 楼 Chen8013 的回复:
[quote=引用 21 楼 zhao4zhong1 的回复:] 资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
事实上也证明MS它这个代码没什么用。 1. 它的这个代码,只不过实现了加托盘图标。“气泡提示功能”它根本没有。   因为它定义的NOTIFYICONDATA数据成员,只有前面的7个,跟气泡相关的都被砍掉了。 2. 它这个功能,通过“1用户控件+1标准模块”才实现。代码总共500行左右。   而相同的功能,我的“简易实现”也就是几十行代码而已。   你看看我的6楼的代码,真正的“可执行代码”,另外再加上图标清理、信息提示、菜单消息回调,也不过50来行。   就算“全部功能封装”写到1个标准模块中,整个模块估计也就是百来行。   更何况,我已经有比它强悍很多的一个模块了。    它这个“无用”已经是无法改变的事实。 [/quote] 打心眼里佩服!
回复 点赞
buaazk 2016年08月08日
引用 23 楼 Chen8013 的回复:
[quote=引用 21 楼 zhao4zhong1 的回复:] 资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
事实上也证明MS它这个代码没什么用。 1. 它的这个代码,只不过实现了加托盘图标。“气泡提示功能”它根本没有。   因为它定义的NOTIFYICONDATA数据成员,只有前面的7个,跟气泡相关的都被砍掉了。 2. 它这个功能,通过“1用户控件+1标准模块”才实现。代码总共500行左右。   而相同的功能,我的“简易实现”也就是几十行代码而已。   你看看我的6楼的代码,真正的“可执行代码”,另外再加上图标清理、信息提示、菜单消息回调,也不过50来行。   就算“全部功能封装”写到1个标准模块中,整个模块估计也就是百来行。   更何况,我已经有比它强悍很多的一个模块了。    它这个“无用”已经是无法改变的事实。 [/quote] 如果愿意,可以研究下systray.ocx的控件代码,气泡功能是没有,但看能不能给补回来。之前你提供的ShowToolTip方法我是想不通怎么加入systray.ocx控件中的,它的代码结构和你的感觉不一样的。
回复 点赞
buaazk 2016年08月08日
引用 23 楼 Chen8013 的回复:
[quote=引用 21 楼 zhao4zhong1 的回复:] 资深码农总会有一天会后悔自己之前删除了自以为没用的文件。
事实上也证明MS它这个代码没什么用。 1. 它的这个代码,只不过实现了加托盘图标。“气泡提示功能”它根本没有。   因为它定义的NOTIFYICONDATA数据成员,只有前面的7个,跟气泡相关的都被砍掉了。 2. 它这个功能,通过“1用户控件+1标准模块”才实现。代码总共500行左右。   而相同的功能,我的“简易实现”也就是几十行代码而已。   你看看我的6楼的代码,真正的“可执行代码”,另外再加上图标清理、信息提示、菜单消息回调,也不过50来行。   就算“全部功能封装”写到1个标准模块中,整个模块估计也就是百来行。   更何况,我已经有比它强悍很多的一个模块了。    它这个“无用”已经是无法改变的事实。 [/quote] 主要一是我的程序已经大量引用这个控件,再换别的怕直接搞乱了,工作量太大,二是其他的方法我曾经试过,找过一些很短的托盘代码,但是测试不同电脑或不同windows操作系统,那些代码出现过奇奇怪怪的问题,感觉不稳定,所以才用这个控件,这个控件很稳定,不同操作系统没出现过问题。 另外这回帖没办法贴完整的代码,所以贴出来的肯定不全了。用户自己只能连续回复3条帖子,每条帖子还有字数限制,而且还没办法上传附件。
回复 点赞
buaazk 2016年08月07日
引用 16 楼 Chen8013 的回复:
真不明白,为什么我这儿各种用法都没问题的代码,怎么在楼主那儿就“无效”了。 是RP问题吗? 
你这个方法我是试过的,的确有用。但是对于systray.ocx控件的代码是没用的,我需要的是systray.ocx控件代码如何修改,不是问有没有其他方法可以实现气泡提示。可以去下载个VB安装包,在COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY目录下找到控件源码,改一改试一试就知道了。
回复 点赞
buaazk 2016年08月07日
引用 15 楼 dzy7879 的回复:
NOTIFYICONDATA结构体要按标准长度 uFlags标志不全。要显示汽泡需要这个,NIF_INFO:显示气泡通知,szInfo,szInfoTitle,dwInfoFlags和 uTimeout参数有效; 再构建对应的正确的结构体。
typedef struct _NOTIFYICONDATA {
  DWORD cbSize;
  HWND  hWnd;
  UINT  uID;
  UINT  uFlags;
  UINT  uCallbackMessage;
  HICON hIcon;
  TCHAR szTip[64];
  DWORD dwState;
  DWORD dwStateMask;
  TCHAR szInfo[256];
  union {
    UINT uTimeout;
    UINT uVersion;
  };
  TCHAR szInfoTitle[64];
  DWORD dwInfoFlags;
  GUID  guidItem;
  HICON hBalloonIcon;
} NOTIFYICONDATA, *PNOTIFYICONDATA;
参考: https://msdn.microsoft.com/en-us/library/bb773352(VS.85).aspx http://my.oschina.net/ypimgt/blog/92195
你好,我是VB代码,你提到的那些都全,但是没用
回复 点赞
舉杯邀明月 2016年08月07日
你在8楼到9楼贴出的cSysTray控件代码,今天我测试时发现并不完整。 于是我特意找到以前的VB6简体中文企业版安装包,把那个工程提取出来。 因为我目前的安装包,是我删除了不少内容的,整个压缩包只有43M多了, 其中 COMMON\TOOLS下面的VB目录,当时就已经被删除。
回复 点赞
舉杯邀明月 2016年08月07日
引用 18 楼 buaazk 的回复:
[quote=引用 16 楼 Chen8013 的回复:]
真不明白,为什么我这儿各种用法都没问题的代码,怎么在楼主那儿就“无效”了。
是RP问题吗? 

.......


你这个方法我是试过的,的确有用。但是对于systray.ocx控件的代码是没用的,我需要的是systray.ocx控件代码如何修改,不是问有没有其他方法可以实现气泡提示。可以去下载个VB安装包,在COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY目录下找到控件源码,改一改试一试就知道了。[/quote]
谁告诉你“对于systray.ocx控件的代码是没用的”???
请看清楚,有用还是没用! 
那个 ShowTooltip 就是我在 cSysTray 代码中添加的Public Sub ShowTooltip()
回复 点赞
发动态
发帖子
控件
创建于2007-09-28

1223

社区成员

4.1w+

社区内容

VB 控件
社区公告
暂无公告