
vb代码
宠物鱼-lvmh
2023年2月16日发(作者:加法表和减法表)VB实例
第一天、使用VB收发电子邮件
大叔:我说LOLI呀,既然你已经学习过VB的基础知识,也做过一些简单的
程序,那么我也就不浪费口水教你认识界面、了解控件和学习语法了。不如我来教
教你怎么样制作出一些切实可用的程序,这样既能够加深对VB的认识,还可以让
你拥有十足的成就感呢!
LOLI:好呀,那做一些什么程序呢?
大叔:当然不会像我哥哥当年那样简单至极的程序,而是一些具有实用性的程
序,也可以做一个小游戏之类的,你看怎么样?
LOLI:好的,不过今天别教我做游戏,不然明天就没有心思学了。
大叔:这个我自然知道,那我们就开始动手制作一个收发电子邮件的程序吧.
LOLI:收发电子邮件?这个会不会很难呢?
大叔:正所谓会者不难,难者不会,有我这位名师指点,你还怕什么呢?开始动
手吧!
一、准备工作
大叔:在VB中编写电子邮件程序需要通过调用微软公司的MAPI(Messaging
ApplicationProgrammingInterface,消息应用程序编程接口),这需要借助两个实现电
子邮件收发功能的核心控件:MAPI会话控件和MAPI消息控件。MAPI会话控件用
于建立和控制一个MicrosoftMail会话,MAPI消息控件用于创建和收发邮件消息。
此外,Windows系统中必须要有遵从MAPI的邮件系统,比如Exchange、Outlook等软
件,而还要进行一番设置,确保邮件系统可以正常使用。
LOLI:呵呵,没关系,我用的就是Outlook,正好符合要求。不过你说的MAPI
控件在哪里找呢?
大叔:在VB中就有现成的,不过程序没有直接放置在工具箱里,需要我们自
己将MAPI控件加入VB工具箱。首先直接在VB左边的控件栏中右击鼠标,并在
弹出菜单中选择“部件”命令,这时可以激活部件设置窗口,在其中的“控件”列表框
中选取“MicrosoftMAPIControls”一项(如图1所示),接着按下“确定”按钮之后可以
发现工具箱中将多出了两个图标,这就是MAPI会话控件和MAPI消息控件的图标
(如图2所示)。
图一图
二
二、邮件发送程序
大叔:添加好我们所需要的控件之后,就开始定制邮件的发送程序吧。这个邮
件发送程序的基本处理过程是:根据用户输入信息组成邮件,然后使用MAPI消息控
件的Send方法将邮件发出。具体的方法按照下述步骤完成:
1、新建一个VB项目,并将缺省窗体Form1的Caption属性设置为“发送邮件”。
2、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件
MAPIMessages1。
3、在Form1中加入三个TextBox控件,将它们的名称属性分别设置为“txtSendT
o"、“txtSubject”和“txtMessage”,另外还要将txtMessage的Multiline属性设置为“Tr
ue”。这三个TextBox控件将分别用于填写邮件的收件人地址、邮件主题和邮件正文。
4、在Form1中加入三个Label控件,将它们的Caption属性分别设置为“收件人”、
“主题”和“内容”,并将它们放在合适的位置用以标注相应的TextBox控件。
5、在Form1中加入一个CommandButton控件,将其Caption属性和名称属性
分别设置为“发送”和“Send”.
所有的控件添加完毕之后应该如图3所示。
图三
LOLI:还挺像这么回事的呢,接着应该填写代码了吧。
大叔:是呀,下面就是代码部分的内容:
1、将下列代码加入Form1的Form_Load事件:
PrivateSubForm_Load()
/运行程序之后进行邮箱登录操作
EndSub
2、将下列代码加入Form1的Form_Unload事件:
PrivateSubForm_Unload(CancelAsInteger)
f/退出程序时候进行退出邮箱操作
EndSub3、将下列代码加入cmdSend的Click事件:
PrivateSubcmdSend_Click()
WithMAPIMessages1
.MsgIndex=-1
.RecipDisplayName=txtSendTo。Text/收信人地址
。MsgSubject=/邮件主题
.MsgNoteText=/邮件正文
.SessionID=nID/发送程序和邮件工具之间建立的任
务数
.Send
EndWith
MsgBox"邮件发送完毕!",,"发送邮件"/发送成功显示信息框
EndSub
这样一个电子邮件发送部分就制作完成了,运行程序之后只要填写好邮件的收
件人、主题和内容后,按下“发送”命令按钮,邮件就已经成功地发往目的地了(如
图4所示)。图4
LOLI:真的发送出去了,不过这是不是你的障眼法呢?我要收到这封信才相信!
大叔:对我还不相信?好吧,下面再制作一个邮件接收程序来收取这封信件。
三、邮件接收程序
大叔:邮件接收程序比邮件发送程序要复杂一些,这个程序首先需要使用MAPI
消息控件的Fetch方法读取邮件,这个过程将把用户收件箱中所有未读邮件全部装
入MAPI消息控件中。接着,检查MAPI消息控件的MsgCount属性以确定通过Fet
ch方法读取的邮件的总数,然后可以通过设置MAPI消息控件的MsgIndex属性来
指定具体需要处理哪一封邮件.需要说明的是,MsgIndex属性值的计数是从0开始
的,也就是说,第一封邮件的索引号是0,第二封邮件的索引号是1,依次类推。具
体步骤如下:1、新建一个VB项目,将缺省窗体Form1的Caption属性设置为“接
收邮件”。
2、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件
MAPIMessages1。
3、在Form1中加入三个Label控件和一个TextBox控件,将三个标签控件的名
称属性分别设置为“lblMsgDateReceived”、“lblMsgOrigDisplayName”和“lblMsgSubje
ct”,将TextBox控件的名称属性设置为“txtMsgNoteText",并将标签控件的Caption
属性和文本框控件的Text属性的内容清空。这四个控件将分别用于显示邮件的日期、
发件人、主题和内容.
4、将txtMsgNoteText控件的Locked属性和Multiline属性设置为“True”,Scrol
lBars属性设置为“2—Vertical".
5、在Form1中再加入四个Label控件用于标注上述四个控件,将它们的Capti
on属性分别设置为“日期”、“发件人"、“主题”和“内容”。
6、在Form1中加入一个Label控件,将其名称属性设置为“lblMsgCount”,Cap
tion属性设置为“第0封邮件,总计0封邮件”.这个控件用于显示接收的邮件总数
以及当前正在处理第几封邮件。
7、在Form1中加入三个CommandButton控件,将它们的名称属性分别设置为
“cmdPrevious”、“cmdNext”和“cmdClose”,Caption属性分别设置为“上一封"、“下一封”
和“关闭”。
LOLI:那么具体的程序代码呢?
大叔:又着急了不是?我还会骗你吗?下面就是具体的程序代码:
1、编写一个子程序FetchNewMail:
PublicSubFetchNewMail()
nreadOnly=True
MAPIMessages1。Fetch/Fetch命令将信件抓到系统存贮器的inbuffer中
EndSub
2、编写一个子程序DisplayMessage:
PublicSubDisplayMessage()
n=”第”&Ltrim(Str(ex+1))
&”封邮件,总计"&Ltrim(Str(nt))
&"封邮件”/由MsgCount知道信件数量,再用MsgIndex设置要看
哪一封信件的内容、标
题
lblMsgDateReceived。Caption=eReceived/收取信
件的日期
txtMsgNoteText。Text=eText/收取信件的内
容
lblMsgOrigDisplayName。Caption=MAPIMessages1。MsgOrigDisplayName
/发送邮件的姓名
n=ject/邮件主题
EndSub3、将下列代码加入Form1的Form_Load事件:
PrivateSubForm_Load()
nID=nID
FetchNewMail/调用Fetch子程序
DisplayMessage/调用DisPlayMessage子程序
EndSub
4、将下列代码加入cmdPrevious的Click事件:
PrivateSubcmdPrevious()
IfMAPIMessages1。MsgIndex〉0Then
ex=MAPIMessages1。MsgIndex-1/当收取信件
超过1封的时候,通过“上一封”按钮查看前面的信件
DisplayMessage
Else
Beep
EndIf
EndSub
5、将下列代码加入cmdNext的Click事件:
PrivateSubcmdNext_Click()
ex ex=ex+1/当收取信件 超过1封的时候,通过“下一封”按钮查看后面的信件 DisplayMessage Else Beep EndIf EndSub 6、将下列代码加入cmdClose的Click事件: PrivateSubcmdClose_Click() UnloadMe EndSub 程序运行后,在窗体加载过程中,窗体Load事件中的代码会读取新邮件,如果 有新邮件,就显示第一个新邮件,如果有多个新邮件,则可以使用“上一封”和“下一封 "命令按钮前后翻阅。你再看看,这封收取下来的邮件是不是我们刚才发送出去的? LOLI:呵呵,真厉害!其实刚才我知道你肯定可以收到这封邮件的,只不过是说 着玩的,嘿嘿。我来试着给别人发送一些邮件。 大叔:那你就用它给好朋友发送几封邮件,告诉他们是用你自己编写的程序发 送的,他们保证大吃一惊呢. 第二天、自制媒体播放器 LOLI:大叔来看我刚刚下载的《黑衣人2》,可好玩了。 大叔:用MediaPlayer看的?不如这样吧,今天我教你怎样制作一个媒体播放器, 你看如何? LOLI:自己做的媒体播放器也可以看《黑衣人2》吗? 大叔:那是当然的,不然我岂不是变成了大骗子? LOLI:呵呵,那感情好呀,这样我可以拿到班上给同学炫耀一下喽. 大叔:我们这个媒体播放器的目的是可以播放VCD、WAV、MP3等媒体文件, 而且全部的功能基本上和Windows附带的媒体播放器差不多。其实要制作这样一个 播放器并不困难,因为在VB中提供了一个MediaPlayer控件,它帮我们解决了很多 实际问题,只要按照下面的步骤就可以了。 1、因为我们需要使用到MediaPlayer控件,所以刚开始就要右击工具面板并在 部件添加窗口里选择“WindowsMediaPlayer”来添加这个控件,同时还要添加“Comm onDialog"控件。 2、在窗口设计器中创建一个MediaPlayer控件、五个CommandButton控件和 一个CommonDialog控件。 3、将Form1的Caption属性更改为“大叔的媒体播放器"。 4、分别将五个CommandButton控件的Caption属性分别命名为“暂停”、“播放”、 “停止”、“选择”和“退出”,然后把它们按照一定的位置放好. 5、选中CommonDialog控件之后,在右边属性的“Filter”对话框中输入“*.RMV B|*。wav)|*.wav|MIDI(*.mid)|*.mid|MPEG(*。mpeg)|*.mpeg|DAT(*。d at)|*.dat|AVI(*.avi)|*。avi|MP3(*。mp3)|*.mp3"的文件过滤选项,这 样就可以支持各种常见的媒体影像文件了. LOLI:看起来和真正的MediaPlayer差不多呀,还蛮有专业水准的呢。 大叔:是呀,这全要归功于MediaPlayer控件,下面就是代码编写部分内容了: 1、首先要双击Form1窗口,并选择“通用”对象,输入下面的通用代码: OptionExplicit DimplayfilenameAsString/定义播放文件的名称 DimplaypositionAsDouble/定义当前播放的位置 2、双击“暂停”按键并输入下列代码: PrivateSubCommand1_Click() Command1。Enabled=False/暂停按键失效 /暂停播放 playposition=MediaPlayer1。CurrentPosition/当前的播放位置 EndSub 3、双击“播放”按键并输入下列代码: PrivateSubCommand2_Click() Command1。Enabled=True/暂停按键有效 Command3。Enabled=True/停止按键有效 me=playfilename/播放媒体文件名称 ionStart=playposition/当前播放的位置 MediaPlayer1。Play/播放媒体文件 EndSub4、双击“停止”按键并输入下列代码: PrivateSubCommand3_Click() playposition=0/停止播放 d=False/停止按键无效 Command1。Enabled=False/暂停按键无效 Command2。Enabled=True/播放按键有效 /停止播放 EndSub 5、双击“选择"按键并输入下列代码: PrivateSubCommand4_Click() CommonDialog1。showopen/打开文件对话框 playfilename=me/记录播放文件名 playposition=0/第一次打开文件时候,播放位置为0 EndSub 6、双击“退出”按键并输入下列代码: PrivateSubCommand5_Click() UnloadMe/卸载窗口 End/结束程序 EndSub 代码全部输入完毕之后,运行程序后按下“选择"按键,此时会弹出打开文件对 话框供你选择需要播放的文件. 选中相应的文件之后,就可以进行欣赏了。如果需要在别的计算机上使用这个 程序的话,还可以选择“工具”菜单下的“生成.exe文件"选项来制作一个可以直接运行 的exe格式文件,这样将程序复制到其他机器上就可以使用了。” LOLI:好开心呀,我来试试用自己做的程序看《黑衣人2》,哈哈,真过瘾! 大叔:瞧你乐得这个劲,那你就慢慢看吧。对了,通过VB还可以制作Flash动 画、QuickTime等多种格式的播放器,你自己不如依葫芦画瓢的尝试一下,看看你 的天份有多少,呵呵! LOLI:放心吧,保证不会让你失望的! 第三天、定时闹钟程序 LOLI:叮当大叔,你知道Windows中的计划任务工作原理吗?它能够在指定的时 间开始相应的工作,蛮方便的呢。 大叔:不要认为它很神秘,其实用VB来设计这样一个程序是非常容易的事.不如 今天就教你怎样制作一个简单的定时闹钟程序?这样可以在指定的时间到达之后自 动运行设置好的程序,你看怎么样? LOLI:好呀,好呀,赶紧开始吧。 大叔:首先要添加程序所需要的控件. 1、新建一个工程,将Form1的startupposition属性设置为“2-centerscreen",同 时将maxbutton属性设置为“False”。这样程序运行之后窗口出现在屏幕中间,而且最 大化按钮处于无效状态。 2、在Form1窗口中添加三个CommandButton,分别将它们的Caption属性更 改为“预设文件”、“设定时间”、“即时启动”和“退出"。 3、在“预设文件”按钮后面放置一个Label控件用于显示预设的文件路径和名称, 并且将它的Caption属性设置为空。 4、在“设定时间”按钮后面放置三个Label控件,其中Label2和Label4的Capti on属性设置为空,Label3控件的Caption属性设置为“当前时间:”. 5、添加一个commondialog控件,不过别忘记需要从部件添加窗口里添加到工 具箱中哟。 6、添加一个Timer控件,并将它的interval属性设置为500. 所有控件添加设置完成后应该如图所示. LOLI:就这么简单的几个控件可以实现定时闹钟的功能吗? 大叔:别小瞧了VB的功能,看完下面的代码再说吧。1、双击Form1窗 口,并选择“通用”对象,输入下面的通用代码: OptionExplicit DimAlarmTime/申明变量 2、双击“预设文件”按钮并输入下面的代码: PrivateSubCommand1_Click() Calldialog/调用dialog子程序 EndSub 3、双击“设定时间”按钮并输入下面的代码: PrivateSubCommand2_Click() AlarmTime=InputBox(”请输入你想设定的时间,例如(19:12:00)","小闹 钟”) IfAlarmTime="”Then ExitSub IfNotIsDate(AlarmTime)Then/isdate函数是判断输入的是否可转换 成date格式 MsgBox”你所输入的不是时间格式,请重试!",,"Wrong"ElseAlarmTime=C Date(AlarmTime) EndIf/判断输入的是否可转换成time格式 EndSub 4、双击“即时启动"按钮并输入下面的代码: PrivateSubCommand3_Click() Calldeng/调用deng子程序 EndSub 5、双击“退出”按钮并输入下面的代码: PrivateSubCommand4_Click() end EndSub 6、双击Form1窗口,选择“Click”事件,并输入下列代码: PrivateSubForm_Click() frmAbout。Show/显示关于对话框 EndSub 7、双击Form1窗口,选择“Load”事件,并输入下列代码: PrivateSubForm_Load() d=0 AlarmTime="”/初始化时command3为不可用的 EndSub 8、双击Form1窗口,选择“Resize”事件,并输入下列代码: PrivateSubForm_Resize() IfWindowState=1Then mintime/如果窗口被最小化,则调用mintime程序 else caption=”小闹钟” EndIf EndSub9、编写mintime子程序: Submintime() Caption=Format(Time,"longTime")/使用长时间格式来显示时 间 EndSub 10、双击Timer1控件并输入下列代码: PrivateSubTimer1_Timer() fLabel2。Caption〈>CStr(Time)Then n=AlarmTime n=Time/显示时间每秒钟的变化 EndIf IfTime>=AlarmTimeThen Calldeng/判断如果现在的时间超过了设定的时间,则调用deng子程序 EndIf IfWindowState=1Then IfMinute(CDate(Caption))〈〉Minute(Time)Then mintime/最小化时显示时间每分钟的变化 EndIf EndIf EndSub 11、编写dialog子程序: Subdialog() =cdlCFBoth CommonDialog1。ShowOpen n=me/把打开的文件名给于label 1 IfLabel1“"Then Command3。Enabled=-1/如果label1不为空时,则command3即可用 Else ExitSub EndIf EndSub 12、编写deng子程序 Subdeng() Dimss ss=Shell(n,1)/启动指定的文件,并且结束小闹钟程 序 End EndSub 好了,现在试着运行程序看看。先点击上部的“预设文件"按钮添加一个定时自 动运行的程序,然后通过“设定时间”按钮设置好一个时间,这样当时间到达的时候 就会自动运行你所需要的这个程序了. LOLI:这倒不错,以后我用电脑学习一段时间之后就可以通过这个程序来定时 运行游戏,这样就不会错过休息娱乐的时间了,哈哈。 大叔:不会吧,我教你做的这个程序就用来定时玩游戏?我真是服了你!不管怎 么样,好好研究一下这个程序,虽然很小巧,但的确是非常实用的! 第四天、打字练习程序 大叔:我说LOLI呀,前几分钟之前还看你在编程序,怎么现在又开始玩游戏 了? LOLI:都是昨天定时程序的作用呀,我现在是编程10分钟,游戏50分钟,这 样劳逸结合,安排的不错吧。 大叔:有你这么安排的吗?整个就是在浪费时间!别玩游戏了,今天教你一些什 么呢? LOLI:最好是寓教于乐的程序最好,比如一边玩游戏一边学习的。 大叔:给我出难题?那就教你一个寓教于乐的程序,来制作一个打字练习程序 怎么样? LOLI:真的?也好,我先看看再说。 大叔:OK,还是老规矩,先创建一些控件再说. 1、新建一个工程,将Form1的Caption属性修改为“打字练习”,同时将MaxB utton和MinButton两个属性都设置为“False”,这样在程序运行之后可以取消右上角 的最小化和最大化按钮。 2、添加一个Frame控件,将它的Caption属性设置为空,并且将BorderStyle属 性设置为“0-None”,然后在这个Frame中添加1个Label控件。 3、在Form1窗口中添加4个Label控件,其中两个Label控件的Caption属性 分别设置为“得分”和“剩余”,另外两个Label控件的BackStyle和BorderStyle属性均 设置为“1—Opaque"和“1-Fixed”,这样将使得它们以3D立体形式显示出来,最后分别 将这两个Label控件的Caption属性设置为“0”和“200”。 4、在Frame区域中再添加一个Label控件。 5、在Form1窗口中添加一个CommandButton控件,将它的Caption属性更改 为“开始"。 6、添加三个Timer控件,并将它的interval属性分别设置为100、1000和100。 所有控件添加设置完成后应该如图所示。 LOLI:看起来好复杂的样子,代码编写部分是不是也很繁琐? 大叔:说难不难,说简单也不简单。我们的目的是通过嵌套在Frame中的两个 Label控件来随机显示字母,然后通过键盘输入字母,由程序检验输入的字母和显示 的字母是否一样,如果一样则说明正确,可以加分,否则说明输入错误。其实最关键 要把握住编程的思想,这个说起来就话长了,还是看看具体的源代码怎么写吧。 1、双击Form1窗口,并选择“通用"对象,输入下面的通用代码: OptionExplicit DimscoreAsInteger/定义变量 DimspeedAsInteger/定义变量 2、编写init子程序(用于设置第一个出现的字母) Subinit() n=Chr(Int(Rnd*26)+49)/设定Label1随机显示的字 母 speed=Int(Rnd*100+100)/设定Label1随机显示字母的速度 =Int(Rnd*Frame1。Width)/设定Label1代表字母出现的左边 位置 =Frame1。Top/设定Label1代表字母出现的顶部位置 EndSub 3、编写init1子程序(用于第二个出现的字母) Subinit1() n=Chr(Int(Rnd*26)+97)/设定Label2随机显示的字母 speed=Int(Rnd*100+100)/设定Label2随机显示字母的速度 Label6。Left=Int(Rnd*Frame1。Width)/设定Label2代表字母出现的 左边位置 Label6。Top=Frame1。Top/设定Label2代表字母出现的顶部位置 EndSub 4、双击“开始”按钮并输入下列代码: PrivateSubCommand1_Click() init/调用init子程序 Timer1。Enabled=True/激活Time1控件 Timer2。Enabled=True/激活Time2控件 e=False n=200 n=0 EndSub 5、双击Form1窗口,并选择“KeyPress”对象,输入下面的用代码: PrivateSubForm_KeyPress(KeyAsciiAsInteger) IfChr(KeyAscii)=Label1。CaptionThen/校验键盘输入字符和La bel1显示的字符 init score=score+1/得分加1 n=score EndIf IfChr(KeyAscii)=Label6。CaptionThen/校验键盘输入字符和Label 2显示的字符 init1 score=score+1 Label4。Caption=score/Label4控件显示得分情况 EndIf EndSub 6、双击Form1窗口,并选择“Load”对象,输入下面的用代码: PrivateSubForm_Load() Randomize d=False/Time1控件失效 d=False/Time2控件失效 EndSub 7、双击Timer1控件并输入下列代码: PrivateSubTimer1_Timer() Label1。Top=Label1。Top+speed IfLabel1。Top>Then/第一个字母超出屏幕范围的时候调 用init子程序重新出现一个字母 init EndIf Label6。Top=+speed IfLabel6。Top>Frame1。HeightThen/第二个字母超出屏幕范围的时候 调用init1子程序重新出现一个字母 init1 EndIf EndSub 8、双击Timer2控件并输入下列代码: PrivateSubTimer2_Timer() Label5。Caption=Val(Label5。Caption)—1/扣除剩余个数中的一个 IfVal(n)〈=0Then d=False/剩余个数小于等于0的时候结束练习 n="”/不显示字母 n=”” SelectCasescore CaseIs<=80 MsgBoxvbCrLf+”别放弃,再来一次!”/显示信息框 CaseIs〈120 MsgBoxvbCrLf+”成绩不错,加油!” CaseIs〈150 MsgBoxvbCrLf+"再努力做的更好一些!” CaseIs〉180 MsgBoxvbCrLf+”好厉害!最高分呀!" EndSelect Command1。Visible=True n=0 n=200 Timer1。Enabled=False d=False EndIf EndSub 上面就是全部的源代码了,你可以运行试试看。 LOLI:呵呵,想测试我的打字速度?那还不是小菜一碟? 大叔:嘿嘿,别说大话,先运行一下再说。怎么样,得了多少分?还小菜一碟吗? LOLI:速度太快了,要是慢一点的话,我肯定能够得高分! 大叔:慢一点?慢一点怎么能体现出你的高超技术呢?其实速度可以通过init 和init1程序来控制,只要将数值更改的小一些就可以轻轻松松的得到高分了。 LOLI:我想到了一个好办法,先把速度降低,然后自己得一个高分,截图保存 之后拿给朋友看看,让他们也测试一下,但是给他们的程序就是速度非常快的,这 样就可以大大的刺激他们一下了,哈哈哈哈。 大叔:整天就想着这些损人不利己的事情,有空还是真正练习一下自己的指法比 较好,省得到时候出丑呢! 第五天、Flash动画播放器 LOLI:叮当大叔,上次你教我做媒体播放器之后不是让我自己做一个Flash动 画的播放器吗?但是我始终没有搞定,还是你来帮帮忙吧。 大叔:咦,现在怎么变得谦虚起来了?既然是这样,就由我出马搞定吧。 一、准备工作 大叔:制作Flash动画播放器的时候需要调用一个Flash控件---, 这个控件可以通过安装Flash,或者通过安装Windows98自带的Flash插件来搞定. 比如采取后一种方法,只要在控制面板中选择“添加/删除程序”图标,进入“Windows 安装程序"界面之后在“多媒体”一项中点选“MacromediaShockwaveFlash”前的复 选框确定即可。 LOLI:不用这么麻烦吧,其实我的计算机中已经安装过Flash了,还用它制作 过一些动画呢。 大叔:切,你不早说?浪费我这么多口水。不过即使已经安装了Flash,也要用 鼠标右击工具箱,并在弹出的部件添加窗口中选把Shockwaveflash、MicrosoftCo mmonDialogControl6.0(SP3)和MicrosoftWindowsCommonControl6。0(SP 3)这三个控件添加到工具箱中。完成这一步设置后,就可以开始制作Flash动画播放 器了。 二、制作Flash播放器 大叔:咱们制作的这个Flash动画播放器要能够一次打开多个Flash动画文件, 可以在播放过程中选择播放打开的文件、随时改变播放质量、画面大小等状态,而且 在播放过程中可以随时对播放的当前帧数进行调整或者手动进行逐帧播放,在状态 栏里有当前播放状态的相关说明等等。下面先来添加程序所需要的控件。 1、新建一个工程,将Form1的Caption属性设置为“大叔的Flash动画播放器”。 2、在Form1窗口中添加一个CommonDialog控件,将CommonDialog1控件的 CancelError设置为“True",DialogTitle设置为“打开Flash动画文件”,Filter属性设置 为“Flash动画(*.swf)|*.swf|",FilterIndex设置为“1",MaxFileSize设置为“1024 0”。 3、在Form1窗口中添加一个Slider控件,将Slider1的SelectRanger的属性设 置为“True”,SmallChange属性和LargeChange属性均设置为“10”,TickFrequengcy 属性设置为“20”,TextPosition设置为“1—SldBelowRight”。 4、在Form1窗口中添加3个Label控件,并将Label1的Caption设置为“0帧", Label2和Label3的Caption设置为空字符串。 5、在Form1窗口中添加8个CommandButton控件,将它们的名称属性分别设 置为“cmdOpen”、“cmdPlay”、“cmdPause”、“cmdPre"、“cmdPreFrame”、“cmdNextF rame”、“cmdNext"和“cmdExit”,Caption属性分别设置为“打开”、“播放”、“暂停”、 “上一个”、“上一帧”、“下一帧”、“下一个”和“退出”。 6、在Form1窗口中添加一个StatusBar控件,在这个控件上单击鼠标右键并选 择“属性”命令,从弹出的窗口中选择“窗格”标签,用鼠标点击“插入窗格”5次表示插 入5个状态窗格,在索引1-5中分别设置“文本”属性分别为“共打开了0个文件”、 “状态:”、“等待”、“帧数:”、“0”。 7、接着按下“Ctrl+E”的组合按键进入菜单编辑器,设置第一个菜单标题为“显示 控制”,名称为mnuDisplay。在“显示控制”菜单下分别设立“全部显示”、“随窗口大 小变化”和“缩放至窗口大小”子菜单标题,名称分别为:mnuDisplay0、mnuDisplay1 和mnuDisplay2。设置第二个菜单标题为“质量控制",名称为mnuQuality。在“质量 控制”菜单下分别设立“低分辨率”和“高分辨率”的子菜单,名称分别为mnuQuality0 和mnuQuality1。设置第三个菜单标题为“播放控制”,名称为mnuPlayControl.在“播 放控制”菜单下分别设立“循环播放”、“放大画面”和“缩小画面"子菜单,名称分别为 mnuLoopPlay、mnuZoomIn和mnuZoomOut. 8、选择“工程"菜单下的“添加窗体”命令,新增一个窗口Form2作为播放窗口. 在Form2上加入1个ShockwaveFlash控件和1个Timer控件,将Timer1控件的Int erval属性设置为“20". 最后,对各窗体、控件的大小和位置进行适当的调整, LOLI:乖乖,看来这次是玩真的了,又是控件又是菜单,还有一个播放窗口,厉 害。 大叔:下面就来针对Form1进行代码添加. 1、双击Form1窗口,并选择“通用”对象,输入下面的通用代码: DimFileNames()AsString/用于保存打开的文件名称 DimPlayFileNumAsInteger/用于计算正在播放的文件序号 DimTotalFileAsInteger/用于统计打开的文件总数 2、双击“打开”按钮并输入下列代码: PrivateSubcmdOpen_Click() OnErrorGoToExitOpen CommonDialog1。Flags=cdlOFNAllowMultiselectOrcdlOFNFileMustExistOr cdlOFNExplorer CommonDialog1。FileName="” en/显示“打开”对话框. FileNames()=Split(me,vbNullChar)/以vbNullC har作为子字符串的边界分隔字符串CommonDialog1返回的FileName IfUBound(FileNames)=0Then/只打开了一个文件 Form2!=FileNames(0) TotalFile=1 PlayFileNum=0 Else/打开了多于一个文件 Form2!=FileNames(0)+″″+FileNames(1) TotalFile=UBound(FileNames) PlayFileNum=1 EndIf (1)。Text=″共打开了″+Trim(Str(TotalFile))+″个文件″ cmdPlay_Click ExitOpen: EndSub 3、双击“播放”按钮并输入下列代码: PrivateSubcmdPlay_Click() IfTotalFile<1ThenExitSub/还没有打开文件。 Form2。Caption=FileNames(PlayFileNum)+”-大叔的Flash动画播放器" /显示Form2开始播放动画 Form2。Show Form2!ShockwaveFlash1。Playing=True IfTotalFile=1ThenPlayFileNum=0 (3).Text="正在播放文件:"+FileNames(PlayFileNum) +"…"/显示状态条的信息 =Form2!ShockwaveFlash1。TotalFrames/显示滑动条的状态 Label2。Caption=Str(/2)+”帧” n=Str(Slider1。Max)+”帧" EndSub 4、双击“暂停”按钮并输入下列代码: PrivateSubcmdPause_Click() Form2! EndSub 5、双击“上一个”按钮并输入下列代码: PrivateSubcmdPre_Click() IfTotalFile<〉1Then/打开多个文件时 PlayFileNum=PlayFileNum-1 IfPlayFileNum〈1ThenPlayFileNum=TotalFile Form2!=FileNames(0)+"”+FileNames(PlayFileN um) EndIf (3).Text="正在播放文件:"+FileNames(PlayFileNum) +"…"/显示播放状态的信息 =Form2!rames n=FileNames(PlayFileNum)+"-大叔的Flash动画播放器” n=Str(/2)+”帧" Label3。Caption=Str(Slider1。Max)+"帧" EndSub 6、双击“下一个”按钮并输入下列代码: PrivateSubcmdNext_Click() IfTotalFile1Then/打开多于一个文件时 PlayFileNum=PlayFileNum+1 IfPlayFileNum>TotalFileThenPlayFileNum=1 Form2!ShockwaveFlash1。Movie=FileNames(0)+"”+FileNames(PlayFi leNum) EndIf (3).Text=”正在播放文件:”+FileNames(PlayFileNum) +”…"/显示播放状态的信息 Slider1。Max=Form2!rames Form2。Caption=FileNames(PlayFileNum)+”-大叔的Flash动画播放器” Label2。Caption=Str(/2)+”帧” Label3。Caption=Str()+”帧" EndSub 7、双击“上一帧”按钮并输入下列代码: PrivateSubcmdPreFrame_Click() Form2!/跳到动画的上一帧 EndSub 8、双击“下一帧”按钮并输入下列代码: PrivateSubcmdNextFrame_Click() Form2!d/跳到动画的下一帧 EndSub 9、双击“退出”按钮并输入下列代码: PrivateSubcmdExit_Click() End EndSub 10、在Form1窗口中选择“Slider1”对象的“Scroll”事件,并输入下面的通用代码: PrivateSubSlider1_Scroll() Form2!um=/当用户拖动滑动 条时,将播放帧数设置为滑动条中的值 EndSub 11、选择“显示控制"菜单中的“全部显示”命令,并输入下列代码: PrivateSubmnuDisplay0_Click() Form2!ode=0/将画面大小设置为在控件内 保持动画原来比例全部显示 d=True d=False mnuDisplay2。Checked=False EndSub 12、选择“显控制”菜单中的“随窗口大小变化”命令,并输入下列代码: PrivateSubmnuDisplay1_Click() Form2!ShockwaveFlash1。ScaleMode=1/将画面的缩放设置为随控 件横向(或纵向)的缩放而变化 mnuDisplay0。Checked=False d=True mnuDisplay2。Checked=False EndSub 13、选择“显示控制”菜单中的“缩放至窗口大小"命令,并输入下列代码: PrivateSubmnuDisplay2_Click() Form2!ShockwaveFlash1。ScaleMode=2/将画面大小设置为不理会 动画原来比例缩放至控件大小 d=False d=False d=True EndSub 14、选择“播放控制”菜单中的“循环播放”命令,并输入下列代码: PrivateSubmnuLoopPlay_Click() d=NotmnuLoopPlay。Checked/将播放方式设置 为循环或不循环 Form2!ShockwaveFlash1。Loop=NotForm2!ShockwaveFlash1。Loop EndSub 15、选择“播放控制”菜单中的“放大画面”命令,并输入下列代码: PrivateSubmnuZoomIn_Click() Form2!ShockwaveFlash1。Zoom(50)/放大画面 EndSub 16、选择“播放控制"菜单中的“缩小画面”命令,并输入下列代码: PrivateSubmnuZoomOut_Click() Form2!(200)/缩小画面 EndSub 17、选择“质量控制”菜单中的“低分辨率”命令,并输入下列代码: PrivateSubmnuQuality0_Click() Form2!y=0/将画面质量设置为低分辨率 mnuQuality0。Checked=True d=False EndSub 18、选择“质量控制”菜单中的“高分辨率"命令,并输入下列代码: PrivateSubmnuQuality1_Click() Form2!y=1/将画面质量设置为高分辨率 d=False mnuQuality1。Checked=True EndSub LOLI:虽然源程序繁琐了一些,但都挺简单的呢。那么Form2的源代码呢? 大叔:Form2的代码就简单一些了。 1、双击Form2窗口,选择“Resize"并输入下列代码: PrivateSubForm_Resize() ShockwaveFlash1。Top=op/将ShockwaveFlash1控件的 大小设置为Form2的大小 =eft =idth =eight EndSub 2、双击Timer1控件并输入下列代码: PrivateSubTimer1_Timer() Form1!(5).Text=Str(um) /在状态栏和滑动条上显示当前播放的帧 Form1!Slider1。Value=ShockwaveFlash1。FrameNum EndSub 3、双击Form2窗口,选择“Unload”事件并输入下列代码: PrivateSubForm_Unload(CancelAsInteger) End EndSub 到此为止,所有的代码就全部OK了,你可以试着运行一下看看怎么样? LOLI:呵呵,载入一个Flash动画试试,效果还不错,就是界面有些丑陋了. 大叔:少来了,就这一小会儿功夫,我能给你作出来就不错了,你还和我唧唧歪 歪的? LOLI:我不是这个意思呀,我是想说这么短的时间能够做出来真是了不起,如 果再多一些时间的话,一定可以做成一个非常非常漂亮的界面。 大叔:你这小子,嘴巴转的倒是挺快的呢。行了,又可以拿这个程序去同学面 前炫耀了吧,那你自己好好看看,我可要去忙我的了。 第六天、制作多媒体界面 LOLI:叮当大叔,我明年就要毕业了,听说现在用人单位都很挑剔的,以前的师 兄就说过要把自己的简历制作的与众不同,最好还能够做成多媒体格式的文档,这样 别人对你的印象就会好很多.那么用VB能不能实现呢? 大叔:只有你想不到的,没有VB做不到的,你的意思是不是要我教你怎么做多 媒体简历呢? LOLI:其实不需要完整的简历,只要你教我怎样做出一个多媒体界面就可以了。 大叔:呵呵,原来如此呀,那好,进行就来制作一个多媒体简历. LOLI:不过我还有要求的,就是能够把我的相片放上去,同时还要能够显示一段 文字,最好还要能够显示出动画,你看这些可以实现吗? 大叔:你这个家伙,就会给我出难题,这有什么难的?看好了,俗话说人有多大 胆,地有多大产,我怎么着也要给你折腾出来。 LOLI:嘿嘿,叮当大叔看起来蛮机灵的,实际上也会中我的圈套,哈哈。 ……(叮当思考中) 大叔:好了,基本上搞定了,先来添加所需要的控件。 1、新建一个工程,将Form1窗口的BorderStyle属性设置为“0-None”,这样可以 不显示边框和相关的元素,接着将WindowState属性设置为“2—Maximized”,这样 程序在运行的时候能够将窗口最大化显示。 2、添加2个Picture控件,它们分别用于显示你的相片和一段动画。其中显示相 片的Picture控件Appearance属性要设置为“0—Flat”,这样将控件的显示风格为平面 视觉效果,接着把AutoRedraw属性设置为“True",它可以允许自动重绘控件上的图象 和文字将其设为False能够避免屏幕显示文字时候的闪烁感。同时,AutoSize属性也 要设置为“True",这样可以自动调整控件大小以显示全部要显示内容.对于另外一个 用于显示动画的Picture控件,只需要将AutoSize属性设置为True,让它能够自动调整 控件大小来显示全部内容即可。 3、在Form1窗口中添加两个MicrosoftMediaControl控件,它们分别用于连续 播放背景音乐和连续播放动画。这两个控件的名称分别设置为MCI1和MCI2,Visi ble属性全部设置为“False",这样将控件隐藏起来由程序去控制播放。 4、在窗口中添加一个Timer控件,利用这个控件显示滚动的文字信息,并控制 动画、声音的重放,需要将它的Interval属性设置为“200”。 所有的控件添加完成之后如图所示。 LOLI:OK,下面再来看看源代码部分吧. 大叔:这个程序的工作原理是先对读取文件的盘符路径进行处理,并控制多媒体 控件MCI1、MCI2分别播放背景音乐和动画。Timer1控件用来完成背景音乐和动画 的连续循环重放,并控制要显示的文字信息向上滚动显示。然后由Picture1_MouseUp 事件来完成关闭程序的任务,也就是说当鼠标处于画面Picture1范围内时按鼠标左 键,则关闭多媒体控件MCI1、MCI2,并退出程序. 程序的代码分别如下: 1、双击Form1窗口并选择“通用”对象,输入下列代码: OptionExplicit DimCurY,CurY1,TempAsSingle,s1(1To3),s2(1To3)AsString 2、双击Form1窗口,选择“Load”事件并输入下列代码: PrivateSubForm_Load() DimDiskPathNameAsString,x,yAsSingle/变量DiskPathName用于 存放应用程序所在的盘符和路径 Move0,0,Screen。Width,Screen。Height/根据屏幕分辨率重新调 整各窗口和控件的位置 x=()/2: y=(ScaleHeight—Picture1。Height)/2 ,y +x,Picture2。Top+y s1(3)="程序功能:":s2(3)=”LOLI的多媒体简历"/要滚动显示的文字 信息 S1(2)="设计单位:":s2(2)=”xxx大学计算机系" s1(1)=”设计者:”:s2(1)=”LOLI" CurY=tY:CurY1=CurY:Temp=8000—Picture1。Curren tY/保存Picture1画面的起始坐标 DiskPathName=App。Path IfRight(DiskPathName,1)=””Then DiskPathName=Left(DiskPathName,Len(DiskPathName)—1)/判断 应用程序所在路径是否为根目录,若为根目录则去掉路径中的”” EndIf e=LoadPicture(DiskPathName+”")/加载需要显示 的图象 lor=QBColor(0)/设置Form1的背景为黑色 me=DiskPathName+"”/打开并播放背景音乐 d=”Open" d="Play” MCI2。DeviceType=”AVIVideo"/打开并播放动画 MCI2。filename=DiskPathName+"demo。avi" splay=Picture2。hWnd/让动画在Picture2中播放 d="Open" MCI2。Command="Play” EndSub 3、选择Picture1的“MouseUp”事件并输入下列代码: PrivateSubPicture1_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsS ingle,YAsSingle) IfButton=vbLeftButtonThen/判断是否按下鼠标的左键,是则关闭多媒体 控件MCI1、MCI2,并卸载退出工程 MCI1。Command=”Stop" d=”Close" d="Stop" d="Close” UnloadMe EndIf EndSub 4、双击Timer1控件并输入下列代码: PrivateSubTimer1_Timer() DimIAsInteger/保存要显示文字信息的起始纵坐标,以便对下一屏要显 示内容进行准确定位 CurY=CurY1 =mciModeStopThen/如背景音乐播放完毕,则继续重复播 放 =0 d=”Play" EndIf =mciModeStopThen/如动画播放完毕,则继续重复播放 MCI2。From=0 d=”Play" EndIf IfTemp>3000Then/Temp的值应根据所显示的背景图象大小和要显示 的文字信息量及文字显示位置来选取 Picture1。Cls/停止向上滚动显示 ForI=1To3/清除Picture1画面的文字信息 Picture1。CurrentY=8000-CurY/用Picture1。CurrentY来设定Picture1。 Print语句所要输出内容的纵坐标 Temp=Picture1。CurrentY lor=QBColor(13):””;s1(I);”";/ 设置要显示文字的颜色为粉色 lor=QBColor(10):Picture1。Prints2(I)/设置要显示文 字的颜色为绿色 CurY=CurY+800/设置要显示文字的行间距 NextI CurY1=CurY1+200/改变下一屏要显示文字起始纵坐标,即两屏间文字 的纵坐标差 EndIf EndSub 所有代码完成之后先把它编辑为exe格式的文件,然后把你的相片、动画和背 景音乐文件复制到exe文件的目录中,并将它们分别命名为Demo。bmp、 和。然后再运行程序看看,这时屏幕背景为黑色,在屏幕中间适当位置显 示一幅图象,在此图象右上角适当位置连续播放动画,显示的文字信息从屏幕下面向 上面滚动,至中间指定位置停止滚动,同时在此过程中连续播放背景音乐。看看你的 你的大头照、动画和文字,不是全部显示出来了吗? LOLI:行呀,叮当大叔还真的很厉害!我算是服了你。但是如果我想实现走马 灯形式的文字循环滚动怎么办呢? 大叔:这也简单呀,只要改变横坐标Picture1_CurrentX就可以实现从左右二个方 向往中间滚动显示,这部分我就不多说了,还是你自己参照着上面的代码修改完成 吧。 LOLI:好吧,我再琢磨一下。嘿嘿,就这么轻轻松松的把我的多媒体简历界面做 好了,看来下学期我可以多一些时间来玩游戏了,哈哈。 第七天、自制网页浏览器 大叔:LOLI,明天我就要回公司上班了,今天想学习一点什么? LOLI:能不能教我做一个好玩的游戏?最好像帝国II那样的。 大叔:又在说不切实际的,即使我有这个水平,时间也来不及呀.对了,看你正在 上网浏览,不如教你做一个浏览器如何? LOLI:那好吧,也只能这样了。不过别太复杂,省得我看起来头晕,呵呵。 大叔:你想让我教你做复杂的我还没有这么多时间呢!言规正传,用VB制作网页 浏览器时候需要使用到WebBrowser这个控件,它就是IE浏览器的窗口。简单的说, 任何可以在IE浏览器中显示的文档都可以用WebBrowser控件显示,比如网页、本 地HTML文件等。下面就先来定制浏览器所需要的控件。 1、新建一个工程,将Form1的Caption属性设置为“大叔的浏览器"。 2、然后右击工具箱并选中“MicrosoftInternetControls”控件将其添加到工具箱 中。这时工具箱中会多了一个地球图标,这所代表的控件就是WebBrowser. 3、将WebBrowser控件放置到Form1窗口中,由于在运行程序之后无法调整这 个控件的大小,所以应该根据窗口的大小来调整它的大小,使其能够覆盖到大部分窗 口区域。 4、在Form1窗口中添加1个CommandButton控件,将它的Caption属性分别 设置为“打开文件”。 5、在Form1窗口中添加一个CommonDialpg控件,用于选择本地硬盘中的H TML文件。 6、添加一个ComboBox控件,用来输入和显示网页地址. 7、右击工具箱并将MicrosoftWindowsCommonControl控件添加到工具箱中, 接着添加一个StatusBar控件和一个ProgressBar控件。 所有控件添加完成之后如图所示。 接着我们来看看程序的代码部分: 1、双击Form1窗口,并输入下列代码: PrivateSubForm_Load() Combo1。Text="" =0/设置URL地址栏起始位置 Combo1。Left=0 =+/设置页面浏览区位 置 =0 Form_Resize StatusBar1。Style=sbrSimple ProgressBar1。Zorder EndSub 2、选择Form1的“Resize”并输入下列代码: PrivateSubForm_Resize() OnErrorGoToa Combo1。Width=Form1。Width-100/URL地址栏宽度随窗口大小调 整而变化 WebBrowser1。Width=Combo1。Width =-Combo1。Height-1000/浏览器 高度随窗口大小调整而变化 ProgressBar1。Top=--330/进程 =0.25* ProgressBar1。Width=0.75*Me。Width-250 a: EndSub 3、双击Combo1控件,并输入下列代码: PrivateSubCombo1_Click() teCombo1。Text/打开指定网址 EndSub 4、选择Combo1控件的“KeyDown”并输入下列代码: PrivateSubCombo1_KeyDown(KeyCodeAsInteger,ShiftAsInteger) DimIAsLong DimexistedAsBoolean IfKeyCode=13Then IfLeft(Combo1。Text,7)〈>"http://”Then/如果输入网址不是以“http: //”开头则自动添加 =””+ EndIf WebBrowser1。NavigateCombo1。Text/URL地址栏保存的网站地址 ForI=0ToCombo1。ListCount-1 IfCombo1。List(I)=Combo1。TextThen existed=True ExitFor Else existed=False EndIf Next IfNotexistedThen m()/如果输入新的网站则自动保存 EndIf EndIf EndSub 5、选择WebBrowser1控件的“DownloadBegin”事件并输入下列代码: PrivateSubWebBrowser1_DownloadBegin() StatusBar1。SimpleText="载入中…"/下载开始时状态栏显示“载入中…” EndSub 6、选择WebBrowser1控件的“DownloadComplete”事件并输入下列代码: PrivateSubWebBrowser1_DownloadComplete() Text=”下载完成"/下载完成时状态栏显示“下载完成" =0 EndSub 7、选择WebBrowser1控件的“ProgressChange"事件并输入下列代码: PrivateSubWebBrowser1_ProgressChange(ByValProgressAsLong,ByVal ProgressMaxAsLong) IfProgressMax=0ThenExitSub/下载进行时进度条变化 ProgressBar1。Max=ProgressMax IfProgress〈>-1AndProgress<=ProgressMaxThen =Progress EndIf EndSub 8、选择WebBrowser1控件的“TitleChange"事件并输入下列代码: PrivateSubWebBrowser1_TitleChange(ByValTextAsString) =WebBrowser1。LocationURL EndSub 9、双击CommandButton1控件并输入下列代码: PrivateSubCommand1_Click() en/激活打开文件对话框选择文件 me EndSub LOLI:我来试试,看看能不能浏览电脑爱好者网站。果然可以正常显示,哈哈, 虽然界面丑陋了一些,但是基本功能还是可以实现的呢,其余的美容工作就交给我 来搞定吧。 大叔:我教你的只是最基本的一些编程思想而已,别以为我不会美容界面,只 是想给你一个机会锻炼一下而已。 LOLI:放心吧,大叔,我一定会好好学习,等毕业之后也要像你一样成为专业的 程序员,到时候咱们联手制作出一些重量级的软件,那就赚翻了,哈哈哈哈。 大叔:…… 各位朋友,在这一个星期之内教给了LOLI七个实例,你是否也从中学到一二 呢?也许你会对LOLI说的制作重量级软件有些半信半疑,不过那也没准,当初比尔 不也就是用Basic起家的吗?何况现在我们使用的是功能更为强大的VB呢?实在不 行,还有一个强力后盾——大叔在此,所以大家就等着LOLI的软件问世吧,到时 候一定要多多支持哟!