VB6最小化到托盘.docx
《VB6最小化到托盘.docx》由会员分享,可在线阅读,更多相关《VB6最小化到托盘.docx(14页珍藏版)》请在冰豆网上搜索。
VB6最小化到托盘
怎样用VB6.0实现将窗体最小化到托盘区
悬赏分:
50-解决时间:
2006-8-1115:
09
怎样用VB6.0实现将窗体最小化到托盘区?
提问者:
懒狗炸弹-见习魔法师二级
最佳答案
忙了我一下午了!
弄好了!
1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False
2、菜单:
工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas
3、在Module1中写下如下代码:
OptionExplicit
PublicConstMAX_TOOLTIPAsInteger=64
PublicConstNIF_ICON=&H2
PublicConstNIF_MESSAGE=&H1
PublicConstNIF_TIP=&H4
PublicConstNIM_ADD=&H0
PublicConstNIM_DELETE=&H2
PublicConstWM_MOUSEMOVE=&H200
PublicConstWM_LBUTTONDOWN=&H201
PublicConstWM_LBUTTONUP=&H202
PublicConstWM_LBUTTONDBLCLK=&H203
PublicConstWM_RBUTTONDOWN=&H204
PublicConstWM_RBUTTONUP=&H205
PublicConstWM_RBUTTONDBLCLK=&H206
PublicConstSW_RESTORE=9
PublicConstSW_HIDE=0
PublicnfIconDataAsNOTIFYICONDATA
PublicTypeNOTIFYICONDATA
cbSizeAsLong
hWndAsLong
uIDAsLong
uFlagsAsLong
uCallbackMessageAsLong
hIconAsLong
szTipAsString*MAX_TOOLTIP
EndType
PublicDeclareFunctionShowWindowLib"user32"(ByValhWndAsLong,ByValnCmdShowAsLong)AsLong
PublicDeclareFunctionShell_NotifyIconLib"shell32.dll"Alias"Shell_NotifyIconA"(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLong
'4、在Form1的Load事件中写下如下代码:
PrivateSubForm_Load()
'以下把程序放入SystemTray====================================SystemTrayBegin
WithnfIconData
.hWnd=Me.hWnd
.uID=Me.Icon
.uFlags=NIF_ICONOrNIF_MESSAGEOrNIF_TIP
.uCallbackMessage=WM_MOUSEMOVE
.hIcon=Me.Icon.Handle
'定义鼠标移动到托盘上时显示的Tip
.szTip=App.Title+"(版本"&App.Major&"."&App.Minor&"."&App.Revision&")"&vbNullChar
.cbSize=Len(nfIconData)
EndWith
CallShell_NotifyIcon(NIM_ADD,nfIconData)
'=============================================================SystemTrayEnd
Me.Hide
EndSub
'5、在Form1的QueryUnload事件中写入如下代码:
PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)
CallShell_NotifyIcon(NIM_DELETE,nfIconData)
EndSub
'6、在Form1的MouseMove事件中写下如下代码:
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DimlMsgAsSingle
lMsg=X/Screen.TwipsPerPixelX
SelectCaselMsg
CaseWM_LBUTTONUP
'MsgBox"请用鼠标右键点击图标!
",vbInformation,"实时播音专家"
'单击左键,显示窗体
ShowWindowMe.hWnd,SW_RESTORE
'下面两句的目的是把窗口显示在窗口最顶层
'Me.Show
'Me.SetFocus
''CaseWM_RBUTTONUP
''PopupMenuMenuTray'如果是在系统Tray图标上点右键,则弹出菜单MenuTray
''CaseWM_MOUSEMOVE
''CaseWM_LBUTTONDOWN
''CaseWM_LBUTTONDBLCLK
''CaseWM_RBUTTONDOWN
''CaseWM_RBUTTONDBLCLK
''CaseElse
EndSelect
EndSub
7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。
单击此图标,Form1就自动弹出来了。
VB窗体最小化到托盘
2008年01月09日22:
47
可以用API来实现,不过还是采用微软封装好的控件来实现比较方便,不过改控件并不在VB安装目录中,需要找到VB的安装盘的COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY目录,将Systray目录拷到硬盘上面并编译为ocx控件,然后在自己的VB程序中添加改控件。
改控件的属性InTray属性用来设置是否显示在托盘中,True为显示在托盘,False为不显示。
TrayIcon属性是在托盘中显示的图标式样。
TrayTip属性是鼠标移到改控件上面显示的提示文字。
如果要使程序最小化时显示到托盘,如下:
PrivateSubForm_Resize()
IfMe.WindowState=vbMinimizedThen
cSysTray1.InTray=True
Me.Visible=False
EndIf
EndSub
点击托盘图标后让程序显示出来,如下:
PrivateSubcSysTray1_MouseDown(ButtonAsInteger,IdAsLong)
Me.WindowState=vbNormal
Me.Visible=True
cSysTray1.InTray=False
Me.SetFocus
EndSub
意思就是做个记事本吧
看下面的
用VB做一个记事本实在不很复杂,我们完全可以通过向导来很方便地做出来。
但本文只打算讨论用手动方法制作记事本,旨在向VB初学者展示:
学VB原来是如此容易!
通过阅读、研究本文并按本文所述进行尝试,初学者将学到很多东西,如怎样使用RichText控件来打开和保存文件,怎样制作菜单、工具栏和状态栏以及如何对其编写代码等。
第一章让我们的记事本马上运行
急于求成是初学者共有的心愿。
那好,请按如下三个步骤做,我们的愿望立即就可以实现!
步骤一:
绘制界面。
新建一个标准EXE工程,将其Caption属性改为“超级记事本”,点击Icon属性给它找个合适的Icon图标。
单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到MicrosoftRichTextBox6.0和公共对话框MicrosoftCommonDialog6.0并选中它们,单击“确定”按钮。
这时左边的工具栏上出现了我们刚才新添的两个控件了。
在窗体上绘制RichTextBox和CommnDialog,其中RichTextBox的大小和位置可不用理睬,我们将在代码中处理它,当然,有必要把它的ScrollBar属性设为2-rtfVertical,这样在打开和编辑文件时垂直滚动条才可用。
步骤二:
编辑菜单。
按Ctrl+E调出菜单编辑器,我们来做如下几个菜单:
一.文件菜单:
文件(第一层)mnuFile
新建(第二层)mnuNew
打开(第二层)mnuOpen
保存(第二层)mnuSave
-(第二层)mnuFileSep(分隔线)
退出(第二层)mnuExit
二.编辑菜单:
编辑(第一层)mnuEdit
复制(第二层)mnuCopy
剪切(第二层)mnuCut
粘贴(第二层)mnuPaste
-(第二层)mnuEditSep(分隔线)
全选(第二层)mnuSelecAll
三.搜索菜单:
搜索(第一层)mnuSearch
查找(第二层)mnuFind
查找下一个(第二层)mnuFindOn
四.帮助菜单:
帮助(第一层)mnuHelp
使用说明(第二层)mnuUsage
关于(第二层)mnuAbout
(注:
各菜单项的快捷键请自行设置)
好了,其它的菜单项以后再根据需要添加。
现在进入:
步骤三:
编写代码。
'声明查找变量
DimsFindAsString
'声明文件类型
DimFileType,FiTypeAsString
'初始化程序
PrivateSubForm_Load()
'设置程序启动时的大小
Me.Height=6000
Me.Width=9000
EndSub
'设置编辑框的位置和大小
PrivateSubForm_Resize()
OnErrorResumeNext'出错处理
RichTextBox1.Top=20
RichTextBox1.Left=20
RichTextBox1.Height=ScaleHeight-40
RichTextBox1.Width=ScaleWidth-40
EndSub
'新建文件
PrivateSubmnuNew_Click()
RichTextBox1.Text=""'清空文本框
FileName="未命名"
Me.Caption=FileName
EndSub
'打开文件
PrivateSubmnuOpen_Click()
CommonDialog1.Filter="文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文件(*.*)|*.*"
CommonDialog1.ShowOpen
RichTextBox1.Text=""'清空文本框
FileName=CommonDialog1.FileName
RichTextBox1.LoadFileFileName
Me.Caption="超级记事本:
"&FileName
EndSub
'保存文件
PrivateSubmnuSave_Click()
CommonDialog1.Filter="文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文件(*.*)|*.*"
CommonDialog1.ShowSave
FileType=CommonDialog1.FileTitle
FiType=LCase(Right(FileType,3))
FileName=CommonDialog1.FileName
SelectCaseFiType
Case"txt"
RichTextBox1.SaveFileFileName,rtfText
Case"rtf"
RichTextBox1.SaveFileFileName,rtfRTF
Case"*.*"
RichTextBox1.SaveFileFileName
EndSelect
Me.Caption="超级记事本:
"&FileName
EndSub
'退出
PrivateSubmnuExit_Click()
End
EndSub
'复制
PrivateSubmnuCopy_Click()
Clipboard.Clear
Clipboard.SetTextRichTextBox1.SelText
EndSub
'剪切
PrivateSubmnuCut_Click()
Clipboard.Clear
Clipboard.SetTextRichTextBox1.SelText
RichTextBox1.SelText=""
EndSub
'全选
PrivateSubmnuSelectAll_Click()
RichTextBox1.SelStart=0
RichTextBox1.SelLength=Len(RichTextBox1.Text)
EndSub
'粘贴
PrivateSubmnuPaste_Click()
RichTextBox1.SelText=Clipboard.GetText
EndSub
'查找
PrivateSubmnuFind_Click()
sFind=InputBox("请输入要查找的字、词:
","查找内容",sFind)
RichTextBox1.FindsFind
EndSub
'继续查找
PrivateSubmnuFindOn_Click()
RichTextBox1.SelStart=RichTextBox1.SelStart+RichTextBox1.SelLength+1
RichTextBox1.FindsFind,,Len(RichTextBox1)
EndSub
'使用说明
PrivateSubmnuReadme_Click()
OnErrorGoTohandler
RichTextBox1.LoadFile"Readme.txt",rtfText'请写好Readme.txt文件并存入程序所在文件夹中
Me.Caption="超级记事本:
"&"使用说明"
ExitSub
handler:
MsgBox"使用说明文档可能已经被移除,请与作者联系。
",vbOKOnly,"错误信息"
EndSub
'关于
PrivateSubmnuAbout_Click()
MsgBox"超级记事本Ver1.0版权所有(C)2001土人",vbOKOnly,"关于"
EndSub
'设置弹出式菜单(即在编辑框中单击鼠标右键时弹出的动态菜单)
PrivateSubRichTextBox1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2Then
PopupMenumnuEdit,vbPopupMenuLeftAlign
Else
ExitSub
EndIf
EndSub
'防止在切换输入法时字体自变(感谢王必成先生提供此方案)
PrivateSubRichTextBox1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
IfKeyCode=vbKeySpaceThen
RichTextBox1.SelFontName=CommonDialog1.FontName
EndIf
EndSub
至此,我们的记事本可以编译使用了。
点击菜单“文件”-“生成XXX.EXE”,回到桌面运行我们的记事本看看,是不是颇有成就感?
当然,这样的记事本还比较粗糙,我们还需要做些工作,请看下一章。
第二章美化程序界面
多数字处理软件都有工具栏和状态栏。
工具栏和状态栏除了能美化我们的程序使其更具有专业性质外,还给用户带来操作上的便利。
现在我们就来做一做这两样东西。
一.工具栏
(一)制作工具栏
单击“工程”-“部件”,选中MicrosoftWindowsCommonControl6.0并确定。
这时,我们要用到的控件就出现在左边的工具栏上了。
要做工具栏,首先需要一个叫ImageList的控件来装载图像。
在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。
图片可在C:
\MicrosoftVisualStudio\Common\Graphics\Bitmaps\TlBr_W95下选择(这里假设你的VB安装在C盘下)。
注意了:
在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。
如插入“新建”的图片,我们在“关键字”栏注明“New”。
图片有了,接下来在程序界面添加工具栏(ToolBar)。
添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项:
1.“图像列表”:
选择ImageList1
2.“样式”:
根据喜爱选择1-trbStandard或者2-trbFlat
继续点击“属性页”的“按钮”选项,插入若干按钮。
按钮有多种样式,请根据需要设置。
这里请一定注意:
每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“New”(即ImageList1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。
(二)编写工具栏的按钮代码
工具栏按钮的代码编辑很简单,可以按照下面的格式去编写:
PrivateSubToolBar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
OnErrorResumeNext'出错处理
SelectCaseButton.Key'按关键字选择
Case"新建"
mnuNew_Click'等于菜单项“新建”被单击
Case"打开"'等于菜单项“打开”被单击
mnuOpen_Click
'......(继续编写其它按钮的代码)
EndSelect
EndSub
完成后试运行一下我们的程序,我们发现,有了工具栏之后,程序变得漂亮多了,只是有一个问题:
打开一个较长的文档后,编辑框的下拉滚动条向上的箭头不见了。
原因是:
工具条占用一定的空间。
解决方法:
将“设置编辑框的位置和大小”中的RichTextBox1.Top=20和RichTextBox1.Height=Me.ScaleHeight-40分别改为RichTextBox1.Top=380,RichTextBox1.Height=Me.ScaleHeight-400即可。
二.状态栏
(一)制作状态栏
状态栏的英文名字叫StatusBar,在窗体上添加它后会默认出现在窗体的最下方。
用鼠标右键点击它,调出“属性页”对话框,单击“窗格”项,插入一些窗格,可以将各个窗格的“样式”设置为:
0-sbrText显示文本,需编写代码
1-sbrCaps显示大小写状态,无需编程
2-sbrNum显示NumLock键开关状态,无需编程
3-sbrIns显示Insert键状态,无需编程
4-sbrScr1
5-sbrTime显示时间,不编程时时间不会随系统时钟变化
6-sbrDate显示日期,无需编程
注意:
加进状态栏后需将Form_Resze中的RichTextBox1.Height=Me.ScaleHeight-400改为RichTextBox1.Height=Me.ScaleHeight-600。
(二)状态栏根据其“样式”属性决定用不用编写代码(如上文所述)。
下面举些例子,读者可以认真揣摩,从而达到举一反三的效果。
例一:
用户选取了“新建”后,让第一个窗格显示:
“目前状态:
正在打开文件《……》”。
请将下面代码写进“打开”菜单里面:
StatusBar1.Panels
(1).Text="目前状态:
正在打开文件"&"《"&CommonDialog1.FileTitle&"》"
例二:
让第三个窗格显示时间并让时间跟随系统时钟变化。
首先,给程序加一个Timer控件,将其Interval属性设为1000。
然后:
在Form_Load过程加入:
StatusBar1.Panels
(1).Text=Time;然后给Timer控件编写代码:
PrivateSubTimer1_Timer()
IfStatusBar1.Panels(3).Text<>CStr(Time)Then
StatusBar1.Panels(3).Text=Time
EndIf
EndSub
例三:
当编辑框的文本发生变化时让第一个窗格显示:
“正在编辑文档:
文件名”。
PrivateSubRichTextBox1_Chang()
StatusBar1.Panels
(1).Text="正在编辑文档:
"&CommonDialog1.FileName
EndSub
辛苦了那么久,我们现在已经拥有一个象模象样的记事本了。
这个记事本由于用了RichText控件,理论上它能打开和编辑任意大的文档,使用起来的确比Windows自带的记事本方便得多。
当然,还有一些其它的功能需要添加和完善,这就靠你慢慢去完成了。