Office中国论坛/Access中国论坛

标题: [高2]系统托盘区功能. [打印本页]

作者: Roadbeg    时间: 2003-4-8 20:13
标题: [高2]系统托盘区功能.
关于 系统托盘区, 站长已经做了一个例子,但因为站长是为回答别人的问题而做的例子,所以还不够全面.
在此提出新的要求:
1.access 程序最小化后,不出现于任务栏.
2.在托盘区生成图标,且此图标会随程序运行状态不同而改变(比如,主程序最小化时与最大化时显示不同的图标)
3.右(左)键单击托盘区图标时,能弹出菜单,并执行相应的功能,比如,最大化,最小化,关闭,还原,显示关于对话框等等.
4.当鼠标悬停于托盘区图标上时,能显示浮动提示,以提示用户当前的程序状态.
5.使用纯 access 开发,不使用第三方控件.

此题难度可能不大(相信各位高手看了题目之后,心中都有个大概了).但应该不是用很短的程序就能做到的.并且,各位高手有这个想法的很多,但真正做过例子的很少吧(我没看到过现成的例子),就请各高手尽展所能!
作者: cg1    时间: 2003-4-8 20:51
右(左)键单击托盘区图标时,能弹出菜单,并执行相应的功能,比如,最大化,最小化,关闭,还原,显示关于对话框等等.

这点倒是没想过,vb可以用popmenu来做,access怎么搞定就不知道了
作者: cg1    时间: 2003-4-8 21:27
zhengjialon :地址能告诉我们么?我找了,没找到
作者: cg1    时间: 2003-4-8 21:28
对了,忘记提醒大家了,系统托盘等功能是老大给人家的奖品里面的,要是我们做掉了,老大拿啥给别人啊?!哈哈
作者: WTM1    时间: 2003-4-8 22:11
哈哈!用vb很容易做出来的!access的托盘,我曾经使用api做过,但不能够离开我的机器,这次我要学习学习!!!拭目以待!

最好,能够在系统托盘上可以点击右键!显示菜单!哈哈!!提高一点难度!
我们争取使access超过vb!!
作者: cg1    时间: 2003-4-8 23:04
标题: 可惜又是mde的,白搭
可惜又是mde的,白搭
作者: WTM1    时间: 2003-4-8 23:32
做的很漂亮!可惜!
作者: 李寻欢    时间: 2003-4-8 23:41
哇靠!
太漂亮了!
作者: Roadbeg    时间: 2003-4-9 00:32
我本想放一个上来,但......
看了 zhengjialon 的,
实在,实在,实在不敢出手了.......
作者: cg1    时间: 2003-4-9 00:51
问一下,如果没有那两个dll,可以做出这样的效果吗?特别是系统托盘的菜单

作者: Roadbeg    时间: 2003-4-9 01:27
以下是引用cg1在2003-4-8 16:50:59的发言:
问一下,如果没有那两个dll,可以做出这样的效果吗?特别是系统托盘的菜单

当然能,你没注意到吗,那两个 dll 文件一模一样大,创建日期也一致....
并且 dll 文件居然只有 900多字节.
我由此发现疑点,最后的结论是:
那是两个位图文件,不信你改扩展名为 bmp 试试.
作者: Roadbeg    时间: 2003-4-9 01:28
刚才网络有问题,过了好几分钟才发上来,没想到这条回复已成马后炮了 :-)
作者: cg1    时间: 2003-4-9 01:41
总体来说,那个菜单还是比较难做的,但是有了示例就方便了
大家可以直接查看一下mde的函数及对象,花点时间就可以仿造出来了


我想,这次就让 zhengjialon 来做裁判好了。顺便问一下 Roadbeg 你的做法和 zhengjialon 一样吗?
[此贴子已经被作者于2003-4-8 17:57:37编辑过]


作者: tmtony    时间: 2003-4-9 02:13
做得非常好,实属精品,不过,在未先菜单项目,而点其它,菜单好像不能消隐。
作者: cg1    时间: 2003-4-9 03:33
这是因为菜单本身是一个窗体,而且编程原理上只考虑了打开,没考虑关闭。
不过我又想起一件事情,qq好像也有这个问题哈?





[此贴子已经被作者于2003-4-8 19:46:35编辑过]


作者: Roadbeg    时间: 2003-4-9 04:13
以下是引用tmtony在2003-4-8 18:13:21的发言:
做得非常好,实属精品,不过,在未先菜单项目,而点其它,菜单好像不能消隐。

这个问题存在于许多软件中,
比如 qq,norton,foxmail
等等,这些软件的托盘菜单都有上述问题.
作者: WTM1    时间: 2003-4-9 16:24
发一个mdb的文件吧!!!看见mde就郁闷!!

作者: harsonliao    时间: 2003-4-9 17:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: cg1    时间: 2003-4-9 17:55
harsonliao 说的甚得我心

说白了很简单,只要得到 mouse在屏幕的 x,y点,然后再这个点附近打开一个窗体就可以了,非常简单,只是要做起来代码不少而且平时没什么用,我是不喜欢别人把图标放进我的托盘,因为这是非常不稳定的,我想大家也都遇到过相同的情况。

另外,我想代码也只是抄得早抄得晚的问题。

何必哪?说出来大家都明白怎么做,不过是要一个动力使大家把平时想得付诸于实施而已。也许大家还能对功能有所改进哪

我不知道大家怎样?我平时的习惯是:看到别人的代码,第一反映是我自己是否有思路,如果有思路我就不会去做了,毕竟要做的东西太多,没这么多时间一个一个做出来。

大家说是不是?


[此贴子已经被作者于2003-4-9 10:27:54编辑过]


作者: Y.J.Wang    时间: 2003-4-9 18:09
我说这人啊,真是很奇妙.

明明是要点子但是一旦出来了却......

这年代只许自己发财不许别人"致富"......


作者: zhengjialon    时间: 2003-4-9 21:13
给你目标你却不努力,儒子不可教也。
作者: harsonliao    时间: 2003-4-9 21:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: WTM1    时间: 2003-4-9 21:49
托盘只需要加入这个模块就可以了!
Option Compare Database


'************** Code Start *************
'
'------------------------------
'  Do NOT try to step through
'  this code.  Entering debug mode
'  will cause a GPF if the window
'  is subclassed.
'------------------------------

'//LoadImage flags
Private Const WM_GETICON = &H7F  'message is sent to a window to retrieve a handle _
                                                            to the large or small icon associated with a window
Private Const WM_SETICON = &H80  'message to associate a new large or small icon with a window
Private Const IMAGE_BITMAP = 0      'Loads a bitmap.
Private Const IMAGE_ICON = 1         ' Loads an icon.
Private Const IMAGE_CURSOR = 2   'Loads a cursor.
Private Const LR_LOADFROMFILE = &H10      'Loads the image from the file specified by _
                                                                           the lpszName parameter. If this flag is not _
                                                                           specified, lpszName is the name of the resource.
Private Const ICON_SMALL = 0&    'Retrieve the small icon for the window.
Private Const ICON_BIG = 1&         'Retrieve the large icon for the window.

'loads an icon, cursor, or bitmap.
Private Declare Function apiLoadImage Lib "user32" _
   Alias "LoadImageA" _
   (ByVal hInst As Long, _
   ByVal lpszName As String, _
   ByVal uType As Long, _
   ByVal cxDesired As Long, _
   ByVal cyDesired As Long, _
   ByVal fuLoad As Long) _
   As Long

Private Declare Function apiSendMessageLong Lib "user32" _
   Alias "SendMessageA" _
   (ByVal hWnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   ByVal lParam As Long) _
   As Long

'//SHGetFileInfo flags
Private Const SHGFI_ICON = &H100                          '// get icon
Private Const SHGFI_DISPLAYNAME = &H200            '// get display name
Private Const SHGFI_TYPENAME = &H400                  '// get type name
Private Const SHGFI_ATTRIBUTES = &H800               '// get attributes
Private Const SHGFI_ICONLOCATION = &H1000       '// get icon location
Private Const SHGFI_EXETYPE = &H2000                   '// return exe type
Private Const SHGFI_SYSICONINDEX = &H4000         '// get system icon index
Private Const SHGFI_LINKOVERLAY = &H8000           '// put a link overlay on icon
Private Const SHGFI_SELECTED = &H10000               '// show icon in selected state
Private Const SHGFI_ATTR_SPECIFIED = &H20000   '// get only specified attributes
Private Const SHGFI_LARGEICON = &H0                    '// get large icon
Private Const SHGFI_SMALLICON = &H1                    '// get small icon
Private Const SHGFI_OPENICON = &H2                     '// get open icon
Private Const SHGFI_SHELLICONSIZE = &H4             '// get shell size icon
Private Const SHGFI_PIDL = &H8                               '// pszPath is a pidl
Private Const SHGFI_USEFILEATTRIBUTES = &H10  '// use passed dwFileAttribute

Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const MAX_PATH = 260

Private Type SHFILEINFO
   hIcon As Long                                      'Handle to the icon that represents the file.
   iIcon As Long                                        'Index of the icon image within the _
                                                                 system image list.
   dwAttributes As Long                            'Array of values that indicates the _
                                                                  attributes of the file object.
   szDisplayName As String * MAX_PATH  'String that contains the name of the _
                                                                  file as it appears in the Windows shell
   szTypeName As String * 80                   'String that describes the type of file.
End Type

'Retrieves information about an object in the file system,
'such as a file, a folder, a directory, or a drive root.
Private Declare Function apiSHGetFileInfo Lib "shell32.dll" _
   Alias "SHGetFileInfo
作者: cg1    时间: 2003-4-9 22:58
to harsonliao : 我没做过,不过应该是用movesize了,movesize 完全能达到要求,而且简单
作者: cg1    时间: 2003-4-9 23:04
to 吴天明 ,菜单用一个非模式的弹出窗体代替,只要把窗体的边匡,放大缩小按钮,记录浏览等等全部去掉就 ok了,里面要好看就加点图片进去,要做换肤都可以,如果喜欢,加一个异型函数进取,做个异型菜单出来也不是难事。

我把思路全说了,代码,本站的旧贴中全部都有。

不过我这样说得容易,codeing却要挺长时间,就看谁有这个耐心了,我是已经没兴趣了。

另外,有兴趣的去 www.access-web.com 或者 www.access911.com 这两个外国网站去看看,里面大多效果都有了,就看你是否有那个耐心了

如果wtm1得代码看不懂,可以去天极网找一片中文的,里面有详细说明。

[此贴子已经被作者于2003-4-9 15:08:56编辑过]


作者: WTM1    时间: 2003-4-9 23:14
还是不明白!一塌糊涂!给个例子看看!当程序成为系统托盘后,在系统托盘点击右键出现菜单,靠!!!我越想越晕!!帮帮吗??
作者: Roadbeg    时间: 2003-4-10 00:00
需要这些 api,感兴趣的网友把这些 api 的说明看了,应该就明白了.
sendmessage
setwindowlong
shell_notifyicon
callwindowproc


[此贴子已经被作者于2003-4-9 16:00:40编辑过]


作者: WTM1    时间: 2003-4-10 00:33
奥!不明白!
作者: tmtony    时间: 2003-4-10 03:27
确认点击点可使用
Public Declare Function apiGetCursorPos Lib "user32" _
  Alias "GetCursorPos" _
  (lpPoint As POINTAPI) _
  As Long

使用 CreatePopupMenu创建真正的菜单
作者: tmtony    时间: 2003-4-10 06:56
已经实现了真正的菜单功能,不过还需测试一下,只是不能参加比赛啦,没能有zhengjialon的好效果:)还是充作下一期胜出者奖品啦
作者: wnm    时间: 2003-4-10 17:30
请问,阿城测试设施
作者: harsonliao    时间: 2003-4-10 18:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: tmtony    时间: 2003-4-10 19:43
很不错,亏你想得出来:)
作者: harsonliao    时间: 2003-4-10 19:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: WTM1    时间: 2003-4-11 16:06
哈哈!合我想的一样,我昨天晚上才做出模型来,看来我需要重新学习了!
作者: WTM1    时间: 2003-4-11 17:09
标题: harsonliao 兄制作的很漂亮!
[attach]115[/attach]这是我做的!
不太好看!!!!!!!!

哈哈哈我明白了!说简单,可是昨天研究了一夜!疲劳!
很感谢所有朋友的帮助!我就不一一感谢了!因为帮助我的太多了!总之很感谢!
还有!!谁有办法在菜单上加入图标和二级菜单?????

就用 harsonliao  的例子!





作者: harsonliao    时间: 2003-4-11 19:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: cg1    时间: 2003-4-11 21:27
二级菜单直接用form的class就可以了,可以把一个模拟菜单的窗体打开n遍,菜单项反正可以用参数传递的。这样别说二级了,你要打开n级都没问题。
作者: WTM1    时间: 2003-4-11 22:37
哈哈!我用你说的方法!耗时74分钟,制作下拉菜单695个!为什么不可以,提示access
无法运行0000xec0980错误!!
怎么回事!???
作者: harsonliao    时间: 2003-4-12 00:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: Roadbeg    时间: 2003-4-12 00:28
上传一个例子
这是在 harsionliao 的基础上改的.此例子使用 createpopupmenu,insetmenu 生成菜单,
使用 trackpopupmenu 弹出菜单,使用 windows 消息循环响应菜单返回值.
[attach]117[/attach]
作者: WTM1    时间: 2003-4-12 00:45
cg1说可以做n级菜单的!可是只能运行600多个!!
作者: cg1    时间: 2003-4-12 01:52
奥,忘记说了

dim n as long
n=600
超过后果自负

哈哈


出现吴天明这种情况后,为了认真负责,我打电话到 ms 去报告情况,客服小姐一句话就把我打发了:“您的计算机不是我们ms硬件部的硬件吧?!”
[此贴子已经被作者于2003-4-11 17:55:13编辑过]


作者: tmtony    时间: 2003-4-12 08:08
以下是引用Roadbeg在2003-4-11 16:27:43的发言:
上传一个例子
这是在 harsionliao 的基础上改的.此例子使用 createpopupmenu,insetmenu 生成菜单,
使用 trackpopupmenu 弹出菜单,使用 windows 消息循环响应菜单返回值.
[attach]117[/attach]

不错,就是这个效果,看来我的就不发啦,差不多
作者: Trynew    时间: 2003-4-12 19:20
标题: 使用Access本身的弹出菜单
[attach]120[/attach]
天,网速14K,终于尝到重返侏罗纪的滋味!
作者: harsonliao    时间: 2003-4-12 19:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: Trynew    时间: 2003-4-12 19:59
知其然,不知其所以然!Try 出来的:)
作者: tmtony    时间: 2003-4-12 21:09
本身的菜單是必須在access主窗體區域內,我試了很久也未成功, trynew好點子
作者: WTM1    时间: 2003-4-14 16:29
好做的不错!哈哈哈,夸奖别人就是奖励自己!!!

作者: WTM1    时间: 2003-4-15 16:03
我看这个区的所有贴子都有cg1兄评判吧!!!

来看看这个问题中,谁会获奖!??


[此贴子已经被作者于2003-4-15 8:03:46编辑过]


作者: harsonliao    时间: 2003-4-15 16:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: Trynew    时间: 2003-4-19 06:24
[attach]187[/attach]
今天有空,又把改变图标和悬浮提示文本的功能加上了。[em11]
作者: hp750329    时间: 2003-5-7 01:02
标题: GOOD
GOOD
作者: cloudsky    时间: 2003-8-1 21:38
trynew 好牛啊
作者: wang1999    时间: 2003-11-3 18:47
这里的大佬真的好牛BI,看来我得好好练练,只有更加努力了。

非常谢谢以上大佬献上
作者: coco    时间: 2003-12-12 00:34
好像只可以给楼主鲜花啊,给错了 :(

不过还是要谢谢楼主的,如果不是楼主出题,我也看不到这么精彩的解决方式

真是太感谢各位了!!!
作者: jzwwpp    时间: 2004-2-23 17:34
标题: 有一点不完善的地方。[讨论]
这个程序只能把当前窗体缩到系统托盘,但是还保留access窗口,能不能把它也一起缩到系统托盘,这样屏幕会干净一些。
作者: zhengjialon    时间: 2004-9-2 00:09
以下是引用jzwwpp在2004-2-23 9:33:40的发言:

这个程序只能把当前窗体缩到系统托盘,但是还保留access窗口,能不能把它也一起缩到系统托盘,这样屏幕会干净一些。

可以的,可以看一下zhuyiwen的函数,但是这样不稳定的。不建议使用。
作者: greetland    时间: 2005-1-18 19:50
我是刚来的,我怎么找不到程序啊,到底在哪儿啊
作者: chief_first    时间: 2005-5-23 04:56
用ACCESS也能做的这么漂亮。
作者: vte1688    时间: 2005-11-17 16:37
看看先
作者: 120HYH    时间: 2005-12-1 02:34
好的
作者: oyljl    时间: 2006-3-11 06:30
[em02]
作者: oyljl    时间: 2006-3-11 06:30
[em01]
作者: betaii    时间: 2006-4-30 16:56
谢谢各位高手了
作者: liaug    时间: 2008-6-27 03:26
支持一下
作者: chenyingfengsx    时间: 2009-6-28 10:42
ddddddddd
作者: 石三少    时间: 2009-12-22 15:50
什么也看不到
作者: totodon    时间: 2010-3-25 14:55
好东西
作者: Y9X    时间: 2010-8-16 11:58
下载
作者: 片风    时间: 2012-2-4 19:36
都不简单啊
作者: LeeTien    时间: 2013-11-3 01:58
观赏下
作者: coolleaf    时间: 2013-12-5 11:22
你做出来了吗。
作者: xlb004    时间: 2014-9-7 16:55
11111111111111111
作者: xlb004    时间: 2014-9-7 16:55
1111111
作者: yangmao130    时间: 2016-12-11 16:28
www.office-cn.net
作者: ha0148    时间: 2017-4-9 16:42
来看看这个例子
作者: czzlj520    时间: 2017-5-14 10:51
zhengjialon :地址能告诉我们么?我找了,没找到
作者: 灰太郎    时间: 2024-2-13 21:11
113




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3