从一个实例开始跟我学Visual BasicWord文档下载推荐.docx
《从一个实例开始跟我学Visual BasicWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《从一个实例开始跟我学Visual BasicWord文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
VisualBasic学习版让编程人员很容易地创建功能强大的MicrosoftWindows和WindowsNT(R)应用程序。
它包括了所有的内部控件,加上网格、选项卡、和数据绑定控件。
与此版本一起提供的文档包括LearnVBNow(这是一张多媒体CD-ROM的标题),加上包含了完整联机文档的MicrosoftDeveloperNetworkCD。
2.MSDNLibraryVisualStudio
当然如果你安装的不是精简版,这个基本上就不需要了,
VB自带的帮助就可以的,要养成有问题自己解决,那么第一步就是查看帮助文件了。
你还可以Google(v.)一下,或是BBS(v.)一下,注意,不要使用以下经典的蠢问题:
问题:
我能在哪找到X程序?
我的程序/配置/SQL申明没有用
我的Windows有问题,你能帮我吗?
我在安装Linux(或者X)时有问题,你能帮我吗?
我怎么才能pjroot帐号/窃取OP特权/读别人的邮件呢?
为什么呢?
Formoreclickhttp:
//www.tuxedo.org/~esr/faqs/smart-questions.html
3.WindowsAPI函数forVisualBasic
http:
//202.103.176.81/erun/sealife/,这个就和DOS时代的int一样的重要,Windows给用户的是ring3,它不能让用户去动系统的核心ring0,而在很多时候是很必要的;
我们知道系统给我操作接口的同时,也给了我们命令接口,用这些已经封装好的API(应用程序接口),可以降低我的的编程强度。
进入正题
我给教程取名为从一个实例开始,那么首先就让我来描述一下这个实例是用来完成什么的:
需求分析:
●软件名:
光驱使者
●功能描述:
通过按设置好的某个键,以达到让光驱弹出,关闭的效果。
(如果你的机箱是放在地上的,你会发现这会是非常有用的。
)
在开发一个项目时,需求分析是非常重要的,这一个环节出了问题将会导致后面的环节进行不下去,作为教学,为了方便起见我们做了以上的简化分析。
(注:
我的格式很不规范,如果日后你要做软件工程的话,请你去找一下这些方面的文档应该如何规范的去写的文章。
程序设计及代码编写阶段:
(如果你这是学VB的程序设计,从这里开始将会非常的重要了)
第一节
首先,看一下我们的快速原型,以后的开发就会在这个基础上展开:
以上就是我们的快速原型,呵呵。
下面我们打开VB输入源码(别说你不会进啊!
):
〔文件〕〔新建工程〕〔标准〕,然后在〔查看代码〕中写入源代码并在窗体(通常所说的窗口)上画一个Command(按钮),你先不必知道这些代码是用来干什么的,先让自己有一点的成就感再说。
源码见(001)
OptionExplicit
PrivateDeclareFunctionCDDoorLib"
winmm.dll"
Alias"
mciSendStringA"
_
(_
ByVallpstrCommandAsString,_
ByVallpstrReturnStringAsString,_
ByValuReturnLengthAsLong,_
ByValhwndCallbackAsLong_
)AsLong'
CDdoor函数是安装WINDOWS时所自带的winmm.dll文件中包含的函数
DimCDOpenAsBoolean'
CDOpen用来标示光驱开与关的状态
PrivateSubCommand1_Click()
OnErrorResumeNext
IfCDOpen=FalseThen'
如果关闭则打开,并且按钮做相应变化
CallCDDoor("
setCDAudiodooropen"
0,0,0)
CDOpen=True
Command1.Caption="
点击关闭光驱"
Else'
否则关闭
setCDAudiodoorclosed"
CDOpen=False
点击打开光驱"
EndIf
EndSub
PrivateSubForm_Load()
CDOpen=False
CallCDDoor("
代码分析:
1.OptionExplicit
VB中的变量在使用前是可以不加声明的,而OptionExplicit则要求变量必须显式声明,这一点可以然你在日后的程序调试时,程序执行时更容易的发现错误,而且可以让你的程序阅读时更加的清晰;
2.“'
”后面的内容是注释
在程序的解释执行时是不解释的,但它的存在是非常重要的,现代的程序要求的是“清晰第一,效率第二”,有了注释能够让程序的阅读者明白你的程序是在做一件什么样的事。
注意:
好的注解不是句句都要,句句都有注解相当于没有注解,要在关键的代码上加以注解;
3.PrivateDeclareFunctionCDDoorLib"
)AsLong
看到上面的一大堆是不觉的很恐怖啊!
其实这没什么,这只不过是微软的程序员事先写好的“函数”,(API应用程序接口,它屏蔽了操作系统底层的活动,而以一种简便的方法让使用者达到某种功能),可以在相关的文档中查到,比如(MSDN),只要COPY过了就行了。
我们可以把它理解为C语言中,函数原型的声明罢了,使用时只要往里面添需要的参数就O.K.了。
在上面这个API中,第一个参数“ByVallpstrCommandAsString”就决定了,光驱的弹出和关闭,如:
“"
”的意思是光驱的弹出,那么在使用时用“CallCDDoor("
0,0,0)”就可以打开光驱了。
在输入时,会出现上面黄色的气球提示,黑体字的部分是提醒你当前要输入的是那部分的参数,这是很好的,要好好了利用(如果这里,你把CDDoor写成了Cdoor那么就不会出现后面的快速信息,这时就要引起你的注意了)。
API函数CDdoor来控制光驱门的开和关程序十分简单,由于CDdoor函数自身包含了对异常错误的处理机制,因此这个程序的通用性很高,你可以把这段代码移植到你的程序中,实现某些多媒体播放器所常用的开关光驱的功能。
4.PrivateSubCommand1_Click()
……
这个是当你按下(单击)Command1时,将会执行这其中的……处的代码。
聪明的你,你也一定知道
是在什么时候激活的了吧!
这没什么说的了,要举一反三,学一知十。
5.OnErrorResumeNext
这个就一行的代码其实没什么,但这里我们要同过它教给你使用帮助。
这行代码是干什么的呢?
我也不知道,那我该怎么办啊,对啊,请求帮助。
具体方法〔帮助〕〔内容...〕,如果提示出错,十有八九是你没装MSDN。
打开之后是这样的:
我们要查“OnErrorResumeNext”,只要在“索引”中输入“OnError”,就会看到下面提示有“OnError”语句,从右边的文档中你一定可以找到“OnErrorResumeNext”,这里我就不说了。
6.IfCDOpen=FalseThen'
CallCDDoor("
CDOpen=True
Command1.Caption="
CDOpen=False
这是程序的主要部分了,通过“If……Then……Else块”达到了光驱状态的判断,以及根据“Flag”——“CDOpen”保存光驱状态,并据此完成相应的功能。
这里有一个很重要的问题——缩进,合理的利用它,可以让你清楚的看到程序的流程,newbie要注意了!
“Command1.Caption="
”——“对象.属性=对应的新的属性”这种格式是很重要的,通过它可以动态的改变对象的属性,以后要常用到的。
7.CDOpen=False
这两行很容易被漏掉,它起到的作用是初始化,对于一个大些的程序,不初始化很可能导致后面的代码运行混乱的,所以,需要初始化的程序一定要初始化。
第二节
这个程序的基本功能就是这些了,可你觉的它实用么?
不可能每回你要实用光驱时,把这个应用程序打开,然后用鼠标点按钮打开光驱吧,那我们就要对它进行改进!
最好的方法可能就是设置快捷键了。
下面我们就来实现这个功能:
实现功能是很简单的,只要我们在相应的事件中,加入相应的代码就可以了。
我们看一下,窗体〔Form〕中有〔KeyDown〕事件,(Tip:
此事件当用户按下和松开一个ANSI键时发生)
好了,我们在
“PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
……
EndSub”中添加代码。
002
PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
IfKeyCode=vbKeyF11Then'
键入F11
OnErrorResumeNext
IfCDOpen=FalseThen'
Else'
EndIf
1.上面的代码中“IfKeyCode=vbKeyF11Then”是用来判断按键的,如果按的是〔F11〕则条件成立,执行相应的代码。
快捷键是由“KeyCode”决定的,它的值可以在帮助中找,前面已经说过如何用帮助了,这就不赘述了。
我们这里用的是〔F11〕,当然你也可以用其它的。
“KeyDown”事件还有一个参数〔ShiftAsInteger〕,它可以根据不同的Shift值来产生不同的组合键,如Ctrl+。
。
,这里我们忽略了这个参数;
2.
按〔F5〕运行,然后按〔F11〕,程序怎么没反应啊?
why?
看看我们的界面:
原来Command1上有一个虚线框,事件〔F11〕由按钮接收了,当然不会响应响应的事件了,不信你把“Command1”删去,再运行,程序一定有反应了。
可如果我们不删“Command”该如何让程序响应这一事件呢?
看看我的做法:
原来,“Form1”的“KeyPreview”默认的是“False”,则程序优先响应控件的键盘事件,只要把它改为“True”,你在运行一下,是不就可以了!
(呵呵,下面“KeyPreview”的帮助都有了,你还费什么话啊!
第三节
为了实现新的功能,使程序更加的清晰,我重写了这个小程序。
显而易见,清晰的程序可为日后的开发扫清不少的障碍。
从这里我们第一次引入了“模块”,可以提高程序的可重利用性,也可使程序更具有结构性,易于程序的修改。
像上一节那样,我们的程序就实用了么?
!
其实还是很麻烦的,起码你要把窗体激活,它要是在后台,快捷键就根本不会起作用!
而对于这类的程序要是每回都要激活窗口,还不如亲手去按光驱上的键,让光驱弹出舱门了!
所以,我们得让程序能在后台工作。
这样,我们就得给程序注册热键了。
这一点我不知道该如何去做(请高手指点),后来就用了一个比较麻烦的方法,写了好多的代码。
下面就看一下我的拙见。
003
●RegHotKey.bas是用来实现热键的。
DeclareFunctionRegisterHotKeyLib"
user32"
ByValhwndAsLong,_
ByValIdAsLong,_
ByValfsModifiersAsLong,_
ByValvkAsLong_
)_
AsLong'
注册热键
DeclareFunctionUnregisterHotKeyLib"
ByValIdAsLong_
取消注册的热键
DeclareFunctionCallWindowProcLib"
CallWindowProcA"
ByVallpPrevWndFuncAsLong,_
ByValMsgAsLong,_
ByValwParamAsLong,_
ByVallParamAsLong_
AsLong'
在特别的Window进程中传递消息
PublicConstWM_HOTKEY=&
H312
PublicConstMOD_ALT=&
H1
PublicConstMOD_CONTROL=&
H2
PublicConstMOD_SHIFT=&
H4
PublicModifiersAsLong,_
uVirtKeyAsLong,_
idHotKeyAsLong
PrivateTypetaLong
llAsLong
EndType
PrivateTypet2Int
lWordAsInteger
hwordAsInteger
PublicFunctionwndproc(ByValhwndAsLong,ByValMsgAsLong,_
ByValwParamAsLong,ByVallParamAsLong)AsLong
IfMsg=WM_HOTKEYThen
IfwParam=idHotKeyThen
DimlpAstaLong,i2Ast2Int
lp.ll=lParam
LSeti2=lp
If(i2.lWord=Modifiers)Andi2.hword=uVirtKeyThen
'
按下Modifiers和uVirtKey触发事件
MyDoor
wndproc=CallWindowProc(preWinProc,hwnd,Msg,wParam,lParam)
EndFunction'
定义热键的行为
1.这里面包括相应的函数,常量及变量定义.Public说明是全局的,不仅仅是只能在这个模块中,它的作用范围更广。
PublicFunction……EndFunction是自定义的过程,确定热键的作用。
这是从网上找的,不过原来好像不是这样写的,为方便理解做了一些修改。
2.这里用到的很多的API,你可能会说这么多的字,一个一个的打上去也太累了吧,而且还很容易错,这的确是个问题啊!
微软早就为我们想好了。
有一个叫“API文本浏览器”的程序可以在开始里找到。
从这里面可以很方便的将上面的很长的一串复制到IDE(集成开发环境——VB)中。
它的用法是
〔文件〕〔加载文本文件〕,选Win32api。
只要在为本框中输入相应的API函数的开头就可以找到了。
如输入“RegisterHotKey”,在下面对应的条目上双击,选〔复制〕就道剪贴板了,只要粘贴到IDE相应的位置就O.K.了。
为日后使用提高查找速度,可以把它转化为mdb数据库文件,〔文件〕〔转换文本为数据库〕,以后〔加载数据库文件〕就好了。
●Door.bas
是实现程序的最基本的功能,判断舱门的状态,以及做出是否做出相应的动作,里面的内容这里就不讲了,和前面讲的基本一样,只不过是从窗体里搬到了模块中。
●Declare.Bas
是程序中用到的一些公用函数和变量的声明,里面有注释,自己看了。
这下的程序可以说基本上差不多了,按下〔ScrollLock〕就能在后台实现光驱的进出了,不过,作为一个“软件”光有功能是不够的,还得友好的界面,方便用户的操作。
这些辅助的东西我们下一节讲。
第四节
考研结束了,成绩不好,要找工作了,工作实在是难找啊,所以心情一直都不好。
几天,好不容易才把这个程序写完,希望大家能提出宝贵的建议。
004
这个小程序没有什么大的改进,请大家看源程序,里面有注解。
这个版本只是加了一些功能:
●程序随Windows而启动(注册表实现)
●程序启动到托盘(API实现,开始用OCX实现,可推出时内存出错,不明白)
●美化程序,增加帮助
这是我们最后的一课了,此时的程序基本可以用了,可是还是不完善,这里,我提出几个问题,等带你的解决,也当成你的练习吧:
●自定义快捷键
●判断光驱盘符
●对于多光驱用户,不同快捷键,对应不同光驱
●程序的启动可选
●……
我们的课程就到这里了,希望对你有所帮助。
Email:
waxiga@