从一个实例开始跟我学Visual Basic.docx

上传人:b****5 文档编号:8395243 上传时间:2023-01-31 格式:DOCX 页数:13 大小:211.45KB
下载 相关 举报
从一个实例开始跟我学Visual Basic.docx_第1页
第1页 / 共13页
从一个实例开始跟我学Visual Basic.docx_第2页
第2页 / 共13页
从一个实例开始跟我学Visual Basic.docx_第3页
第3页 / 共13页
从一个实例开始跟我学Visual Basic.docx_第4页
第4页 / 共13页
从一个实例开始跟我学Visual Basic.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

从一个实例开始跟我学Visual Basic.docx

《从一个实例开始跟我学Visual Basic.docx》由会员分享,可在线阅读,更多相关《从一个实例开始跟我学Visual Basic.docx(13页珍藏版)》请在冰豆网上搜索。

从一个实例开始跟我学Visual Basic.docx

从一个实例开始跟我学VisualBasic

从一个实例开始——跟我学VisualBasic

写在最前面:

1.这部教程是写给那些想要进入VB编程大门的新手的,所以大虾们就不必浪费时间了,

我的目的是想让读者对编程有一定的认识(不仅仅是VB),让你知道要自己去学。

一个实例并不重要,重要的是能根据自己的需要,去追求自己要的东西,不单单是程序设计,包括做人,做事(呵呵,把自己说的太伟大了),不过,一个真正厉害的人,不是教出来,也不是看书看出来的,而是靠自己琢磨出来的;

2.我是学数学的,只是学过C语言,没有接触过面向对象(OO)的编程,对于像VB这种“半对象”的程序设计语言,纯粹是无聊时自己摸索的,也是刚刚起步,所以对于其中不对只处,请多多包涵,我们互相学习,同时,我也知道初学者可能在什么地方出现问题,到时我会强调的;

3.我们知道,世界上没有完美的语言,每种语言都有自己的不足之处。

就象用C来设计图形化的程序,用一个字来形容——“太难”了,呵呵。

C++固然好(不像有些人说的那样,是C的扩展。

严格的讲它不同于C,又是一种新的程序设计语言,就像树跟二叉树,大熊猫和小熊猫一样,差别的的了),可是我还是选了VB,原因在于它开发程序快速而且完全可以很好的完成自己的要求。

所以,亲爱的读者,不要认为那种,那种程序没前途了,那种那种程序就好,就去追新,希望你能够稳下来,学好你需要的语言,掌握好你要用到的工具,脚踏实地;

4.我想看这部教程的应该大部分都是学生,如果你想在这方面发展的话,希望你能够认真对待你的学习生活(开个玩笑,我计算过以现在的高校收费标准,一节100分钟的课平均是10元,所以……),最起码你要学好:

●大学数学:

很多专业都不用学这个了,真的很可惜,现在的数学可能真的有点变味了,一味的去追求问题的结果,而不是解决问题的方法和步骤。

举个例子:

就像现在的考研数学一样,你敢说一个思维活跃的人一定能拿高分么!

这不一定,应试是需要练习,不断的练习,以达到一种机械化的程度——这就是对试题的极大的熟悉,这样,相信你也一定能在最后的分数上超过真的猛士的。

此时此地,对你而言,你要去领悟数学的思维,数学的方法。

算法说道地跟“数学”是分不开的。

●大学语文:

很重要,我就没学过这门课,弄的我现在的语言表达能力是那个差啊!

●大学英语、计算机体系结构和汇编语言、计算机操作系统原理、数据结构和算法、软件工程、Windows程序设计etc.

日后,你会觉的这些东西,真的很有用的,所以,请你不要浮躁,下文的叙述中,我们会不同程度上用到上面的知识的;

5.个人认为,无论是什么样的程序语言应该都不是很难,要不coder为何挣的也不是很多啊,所以你要有信心,一定要亲手去做,不要觉得自己会了,实践是检验真理的唯一标准。

要用到的工具:

1.VisualBasic6.0学习版+sp6

学习版就够了,当然其它的两种版本就更好了。

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'否则关闭

CallCDDoor("setCDAudiodoorclosed",0,0,0)

CDOpen=False

Command1.Caption="点击打开光驱"

EndIf

EndSub

PrivateSubForm_Load()

CDOpen=False

CallCDDoor("setCDAudiodoorclosed",0,0,0)

EndSub

代码分析:

1.OptionExplicit

VB中的变量在使用前是可以不加声明的,而OptionExplicit则要求变量必须显式声明,这一点可以然你在日后的程序调试时,程序执行时更容易的发现错误,而且可以让你的程序阅读时更加的清晰;

2.“'”后面的内容是注释

在程序的解释执行时是不解释的,但它的存在是非常重要的,现代的程序要求的是“清晰第一,效率第二”,有了注释能够让程序的阅读者明白你的程序是在做一件什么样的事。

注意:

好的注解不是句句都要,句句都有注解相当于没有注解,要在关键的代码上加以注解;

3.PrivateDeclareFunctionCDDoorLib"winmm.dll"Alias"mciSendStringA"_

(_

ByVallpstrCommandAsString,_

ByVallpstrReturnStringAsString,_

ByValuReturnLengthAsLong,_

ByValhwndCallbackAsLong_

)AsLong

看到上面的一大堆是不觉的很恐怖啊!

其实这没什么,这只不过是微软的程序员事先写好的“函数”,(API应用程序接口,它屏蔽了操作系统底层的活动,而以一种简便的方法让使用者达到某种功能),可以在相关的文档中查到,比如(MSDN),只要COPY过了就行了。

我们可以把它理解为C语言中,函数原型的声明罢了,使用时只要往里面添需要的参数就O.K.了。

在上面这个API中,第一个参数“ByVallpstrCommandAsString”就决定了,光驱的弹出和关闭,如:

“"setCDAudiodooropen"”的意思是光驱的弹出,那么在使用时用“CallCDDoor("setCDAudiodooropen",0,0,0)”就可以打开光驱了。

在输入时,会出现上面黄色的气球提示,黑体字的部分是提醒你当前要输入的是那部分的参数,这是很好的,要好好了利用(如果这里,你把CDDoor写成了Cdoor那么就不会出现后面的快速信息,这时就要引起你的注意了)。

API函数CDdoor来控制光驱门的开和关程序十分简单,由于CDdoor函数自身包含了对异常错误的处理机制,因此这个程序的通用性很高,你可以把这段代码移植到你的程序中,实现某些多媒体播放器所常用的开关光驱的功能。

4.PrivateSubCommand1_Click()

……

EndSub

这个是当你按下(单击)Command1时,将会执行这其中的……处的代码。

聪明的你,你也一定知道

PrivateSubForm_Load()

……

EndSub

是在什么时候激活的了吧!

这没什么说的了,要举一反三,学一知十。

5.OnErrorResumeNext

这个就一行的代码其实没什么,但这里我们要同过它教给你使用帮助。

这行代码是干什么的呢?

我也不知道,那我该怎么办啊,对啊,请求帮助。

具体方法〔帮助〕〔内容...〕,如果提示出错,十有八九是你没装MSDN。

打开之后是这样的:

我们要查“OnErrorResumeNext”,只要在“索引”中输入“OnError”,就会看到下面提示有“OnError”语句,从右边的文档中你一定可以找到“OnErrorResumeNext”,这里我就不说了。

6.IfCDOpen=FalseThen'如果关闭则打开,并且按钮做相应变化

CallCDDoor("setCDAudiodooropen",0,0,0)

CDOpen=True

Command1.Caption="点击关闭光驱"

Else'否则关闭

CallCDDoor("setCDAudiodoorclosed",0,0,0)

CDOpen=False

Command1.Caption="点击打开光驱"

EndIf

这是程序的主要部分了,通过“If……Then……Else块”达到了光驱状态的判断,以及根据“Flag”——“CDOpen”保存光驱状态,并据此完成相应的功能。

这里有一个很重要的问题——缩进,合理的利用它,可以让你清楚的看到程序的流程,newbie要注意了!

“Command1.Caption="点击打开光驱"”——“对象.属性=对应的新的属性”这种格式是很重要的,通过它可以动态的改变对象的属性,以后要常用到的。

7.CDOpen=False

CallCDDoor("setCDAudiodoorclosed",0,0,0)

这两行很容易被漏掉,它起到的作用是初始化,对于一个大些的程序,不初始化很可能导致后面的代码运行混乱的,所以,需要初始化的程序一定要初始化。

 

第二节

这个程序的基本功能就是这些了,可你觉的它实用么?

不可能每回你要实用光驱时,把这个应用程序打开,然后用鼠标点按钮打开光驱吧,那我们就要对它进行改进!

最好的方法可能就是设置快捷键了。

下面我们就来实现这个功能:

实现功能是很简单的,只要我们在相应的事件中,加入相应的代码就可以了。

我们看一下,窗体〔Form〕中有〔KeyDown〕事件,(Tip:

此事件当用户按下和松开一个ANSI键时发生)

好了,我们在

“PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)

……

EndSub”中添加代码。

002

PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)

IfKeyCode=vbKeyF11Then'键入F11

OnErrorResumeNext

IfCDOpen=FalseThen'如果关闭则打开,并且按钮做相应变化

CallCDDoor("setCDAudiodooropen",0,0,0)

CDOpen=True

Command1.Caption="点击关闭光驱"

Else'否则关闭

CallCDDoor("setCDAudiodoorclosed",0,0,0)

CDOpen=False

Command1.Caption="点击打开光驱"

EndIf

EndIf

EndSub

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是用来实现热键的。

OptionExplicit

DeclareFunctionRegisterHotKeyLib"user32"_

(_

ByValhwndAsLong,_

ByValIdAsLong,_

ByValfsModifiersAsLong,_

ByValvkAsLong_

)_

AsLong'注册热键

DeclareFunctionUnregisterHotKeyLib"user32"_

(_

ByValhwndAsLong,_

ByValIdAsLong_

)_

AsLong'取消注册的热键

 

DeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"_

(_

ByVallpPrevWndFuncAsLong,_

ByValhwndAsLong,_

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

EndType

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

EndIf

EndIf

EndIf

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@

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1