| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 692 人关注过本帖
标题:补充上一帖子(API函数问题)
只看楼主 加入收藏
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
结帖率:92.31%
收藏
已结贴  问题点数:5 回复次数:9 
补充上一帖子(API函数问题)
https://bbs.bccn.net/thread-444836-1-1.html最后一楼的问题
过早结贴了,所以重新给一下分

[ 本帖最后由 renxiaoyao36 于 2015-5-5 20:46 编辑 ]
2015-05-05 20:00
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
确认问题,情况是 凡是有TabStrip控件的Form都无法触发在托盘内的MouseMove事件
如何解决问题?

[ 本帖最后由 renxiaoyao36 于 2015-5-6 14:43 编辑 ]

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-05-06 14:39
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:2 
我建议你还是要弄明白,到底是不是TabStrip的问题,我实验的托盘正常。
2015-05-06 15:08
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
确定问题了
所有多项选择框的Form都无法接受到托盘讯息
你可以自己尝试下
TabStrip和ssTab都无效
急求问题解决方式!
如果你还是无法相信我的话,你给我下你的QQ,我把我的真正的工程给你,你帮我改进下……

[ 本帖最后由 renxiaoyao36 于 2015-5-6 15:22 编辑 ]

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-05-06 15:17
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:2 
我也试过,在测试中加入tabstrip没有问题

大开眼界
2015-05-06 15:37
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:2 
说实在,没搞懂。我的测试工程:
1、BAS
程序代码:
Option Explicit

Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long


Private Type NOTIFYICONDATA
    cbSize As Long
    hWnd As Long
    UID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 64
End Type


'Private Const WM_LBUTTONUP = &H202
'Private Const WM_RBUTTONUP = &H205

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIF_DOALL = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205


Public Const SW_RESTORE = 9
Public Const SW_HIDE = 0


'添加图标到系统托盘
Public Sub AddIco(frm As Form, Information As String)
    
    On Error Resume Next
    
    Dim LPICON As Long
    Dim Tic As NOTIFYICONDATA
    Tic.cbSize = Len(Tic)
    Tic.hWnd = frm.hWnd
    Tic.UID = 1&
    Tic.uFlags = NIF_DOALL
    Tic.uCallbackMessage = WM_MOUSEMOVE
    Tic.hIcon = frm.Icon
    Tic.szTip = Information & Chr$(0)
    LPICON = Shell_NotifyIcon(NIM_ADD, Tic)
End Sub
'修改图标
Public Sub ModiIco(frm As Form, Information)
    
    On Error Resume Next
    
    Dim LPICON As Long
    Dim Tic As NOTIFYICONDATA
    Tic.cbSize = Len(Tic)
    Tic.hWnd = frm.hWnd
    Tic.UID = 1&
    Tic.uFlags = NIF_DOALL
    Tic.uCallbackMessage = WM_MOUSEMOVE
    Tic.hIcon = frm.Icon
    Tic.szTip = Information & Chr$(0)
    LPICON = Shell_NotifyIcon(NIM_ADD, Tic)
End Sub
'删除图标
Public Sub DeleteIcon(frm As Form)
    
    On Error Resume Next
    
    Dim LPICON As Long
    Dim Tic As NOTIFYICONDATA
    Tic.cbSize = Len(Tic)
    Tic.hWnd = frm.hWnd
    Tic.UID = 1&
    LPICON = Shell_NotifyIcon(NIM_DELETE, Tic)
End Sub

2、MDI窗体
程序代码:
Option Explicit

Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    
  Dim lMsg As Single
  lMsg = X / Screen.TwipsPerPixelX
  Select Case lMsg
    Case WM_LBUTTONUP, WM_RBUTTONUP       '单击左键,显示窗体
        Me.WindowState = 0
        Me.Show
        Call DeleteIcon(Me)
  End Select
  
End Sub

3、最小化的按钮,放在 子窗口中,子窗口的代码:
程序代码:
Option Explicit

Private Sub Command1_Click()

Call AddIco(MDIForm1, "提示")
MDIForm1.Hide
End Sub


----------------------------
1、如果有 MDI 窗体,那么 消息必须由 MDI 窗体处理 。所以,如果你想隐藏 MDI窗体,托盘区消息还是只有 MDI 窗体能处理。
2、子窗体中,我放了一个 TabStrip,但没有再继续放了代码和其他任何控件。

最终 ,没看懂你的问题所在。

授人于鱼,不如授人于渔
早已停用QQ了
2015-05-06 15:44
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
既然如此,我决定将我的工程发上来
另外,请不要笑话我的工程内容,同时不解答的人员不要下载
晨曦杀毒.zip (683.6 KB)

我试图做一个杀毒程序看看,另外,有空的话可以帮忙看看代码是否有效,如果能帮忙优化代码的话就更好了。
现在是这样的:
点击Form3的关闭按钮,最小化到托盘。
其他和测试相同
菜单被隐藏了

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-05-06 20:26
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
回复 5楼 lianyicq
我在测试中加入了TabStrip测试
无法接受讯息
无法触发MouseMove事件

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-05-06 20:28
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
暂时没去找原因,替代做法是托盘时隐藏TabStrip,取消时又显示TabStrip,经运行可行,修改Form_Unload和Form_MouseMove的代码如下(蓝色字为修改代码):

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lMsg As Single
lMsg = X / Screen.TwipsPerPixelX
Select Case lMsg
Case WM_LBUTTONDOWN
'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"
'单击左键,显示窗体
ShowWindow Me.hWnd, SW_RESTORE
SSTab1.Visible = True
'下面两句的目的是把窗口显示在窗口最顶层
'Me.Show
'Me.SetFocus
 Case WM_RBUTTONDOWN
 PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray
 Case WM_MOUSEMOVE
 Case WM_LBUTTONDOWN
 Case WM_LBUTTONDBLCLK
 Case WM_RBUTTONDOWN
 Case WM_RBUTTONDBLCLK
 Case Else
End Select
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim tMppp As String
'以下把程序放入System Tray====================================System Tray Begin
With nfIconData
SSTab1.Visible = False
.hWnd = Me.hWnd
.uID = Me.Icon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon.Handle
'定义鼠标移动到托盘上时显示的Tip
.szTip = App.Title + "(版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar
.cbSize = Len(nfIconData)
End With
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
'=============================================================System Tray End
Me.Hide
On Error Resume Next
Open App.Path + "\sdsave\exitmode.tmp" For Input As #1
Input #1, tMppp
Close #1
If tMppp = "true" Then
Kill (App.Path + "\sdsave\exitmode.tmp")
Else
Cancel = 1
End If
End Sub
2015-05-06 21:53
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
回复 9楼 xzlxzlxzl
谢谢啦我去试试
一些小问题
已搞定

[ 本帖最后由 renxiaoyao36 于 2015-5-6 21:56 编辑 ]

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2015-05-06 21:54
快速回复:补充上一帖子(API函数问题)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036100 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved