求 Visual Basic 6 编程技术大全就是那本好多人推荐的那本.机械出版的.
邮箱[email protected]论坛内的下载只有 part1 ... 杯具.
把我的下载分都骗光了也没下到我想要的..
希望有这本书PDF版的 分享下 - -
要是有TXT版的 加倍送分...
邮箱[email protected]论坛内的下载只有 part1 ... 杯具.
把我的下载分都骗光了也没下到我想要的..
希望有这本书PDF版的 分享下 - -
要是有TXT版的 加倍送分...
最近在啃.NET 本质论 跟 C#高级编程.
还有数据结构 跟 英语.
另求 PDF 转成 TXT 方法 - -
谢谢 能给我一份吗
[email protected]
[email protected]
不过格式需要编辑,有点乱
反正是要看的. -.- 看一页校一页....
有意跟贴.
汉王识别太烂,撤。
建议 **
警告 ***
p160 等于 书里 144页. 16页差距.p156
第5章VB应用程序与VB库
一般说来,Microsoft VB可以看做是VB应用程序库的总和,加上由VB库函数和VB运行时显现的一组对象.在本章中,我集中概述VBA语言和其函数命令以及一些可以应用其上的先进的或鲜为人知的技巧.可以用Object Browser工具和选择VBA库来浏览本章中涉及的大多数对象.在本章的最后部分,我介绍一些首要的系统对象,例如位丁VB库中的App和Clipboard.
5.1 控制流程
所有的编程语言必须提供一种或几种不按程序清单出现的顺序执行一些语句的方法.除了调用Sub过程和Function函数之外,还可以引用所有的控制流程语句,它们分为两类:分支语句和循环语句.
5.1.1 分支语句
主要的分支语句是If Else Else If End If程序块.VB支持该语句的几种不同风格,有单行和多行形式.
Single line version, withOUt Eise clause
if x > 0 Then y = x
' Single line varsion, with Else clause
If x>0 Then y=X Eise y=O
' Single Iine,but with multlple statements separated by colons
If x>0 Then y=X:X-O Else y = 0
' Multllline version of the above code (more readable)
if x>0 Then
y = x
Else
y = o
End if
' An example of if Elself Else block
If X>O Then
y=x
Elself X<O Then
y=x*X
Else ' X is surely 0,no need to actually test it
X=-1
End If
应该意识到If关键字之后的任何非零值都认为是True,它引发Then执行程序块.
' The Fallowing lines are equivalent.
if value<>0 Then Print ' Non Zera'
If value Then Print ' Non Zero' p157
第5章VB 应用程序与VB库
即使后一种表示法节省了一些键入字,但并不能提高程序运行的速度.至少是不一定的.基准测试表明:如果被测变量为Boolean、Integer或Long型,这种缩简的表示法并不能使程序运行加快.但是对于其他的数字类型,就可以期望速度得到一些适度增快,大约不超过20%.如果对于这种方法感觉很舒服,就使用它吧.但是要注意在大多数情况下,速度的提高与可读性降低是不相等的.
当利用AND和OR运算符将多个条件组合起来时,可以使用一些改进的优化方法.下面的例子说明了如何通过改写Boolean表达式来编写简洁、高效的程序.
' if two numbers are both zero. you can apply the OR operator
' to thelT bits and you still have zero.
if x = 0 And y = 0 Then
If (x Or y) = 0 Then
' If either value is < >0, you can apply the OR operator
' to their bits and you surely have a nonzero value.
If x <> 0 Or y<> 0 Then
If (x Or y) Then
' If two integer numbers have opposite signs, applying the X OR
' operator to them yields a result that has the sign
' bit set. (In other words, it is a negative vaIve.)
If ( x < 0 And y >= 0 ) Or ( x >= O And y <0 ) Then
If ( x Xor y ) <0 then
当使用布尔运算符,并且由于疏忽将细微的错误引入程序中时,很容易失去控制.例如,可能相信下面两行程序是等价的,但它们不等价.(要知道原因,只要想一想数字是如何用二进制表示的.)
' Not equivalant: just try with x:3 and y-4, whose binary
representations are 0011 and 0100 respectively.
If × <> 0 And y <> 0 Then....
If ( x And y ) Then....
' AnyWay. you can partially optimize the first line as follows
If ( x <> 0 ) And y Then....
另一个常见的模糊点是 NOT 运算符,它对数字的所有位求反.在VB中,该运算特只有在其参数为True( -1 )时才返回False,所以应该除了将之与某一个比较关系的布尔结果或者一个Boolean变量一起使用之外不要与其他任何东西一起使用.
IF Not ( x = y ) Then.... ' The aame as xoy
If Not x Than…. ' The same as Xo-1.don't use instead of x = 0
要获得更多的信息,请参考本章后面的5.2.3“布尔和位运算符”.
有一个细节会使许多从其他语言转入VB的编程者吃惊,就是If语句不支持短回环计算,换句话说,VB总是计算If语句中的整个表达式的值,即使已有足够的信息能确定表达式为False还是True,例如下面的程序段:
' lf x <= 0, lt makes no sense to evaluate Sqr ( y ) >x
' bacause the entire expresslon IS guaranteed tO be False.
if x > 0 And Sqr(y) < z Then z = 0 'p158
' if x = 0, it makes no sense to evaluate X * y > 100
' because tha entire exprassion is guarantead to be True
If x = 0 or x * y > 100 Then z = 0
尽管VB在自动优化表达式方面还不够灵活,但并不意味着不能人工优化.可以将上面的第一个lf语句段写如下:
if x > 0 Then if Sqr ( y ) < z Then z = 0
可以将上面的第二个If语句改写如下:
if x = 0 Than
z = 0
Elself x+y > 100 Then
z = 0
EndIf
Select Case语句的通用性比If控制块略逊一筹,它只能检铡一个表达式的对应的一列表值:
Select Case Mid$( Text,i,1 )
Casa "0" To "9"
' lt's a digit
Case "A" To "Z","a" To "z"
' it's a lener
CaSe ",",".",";",":","'","?"
' it's a punctuation symboi or a space
Case Else
' it's something elsa.
End Stieci
对Select Case控制块最有效的优化方法是将最频繁发生的情况移至程序块的最上面,例如,在上例中,可能决定要在测试字符是否为一个数字之前测试它是否为一个字母.如果正在扫描的文本中,预计单词多于数字,该变动将使程序稍稍加快一些.
出人意料的是,Select Case控制块具有一个有趣的特点,这个特点是灵活的 If 语句所不具备的,即一种所谓的实现短路求值的能力.事实上,Case子表达式只有到其返回True值之前才被检测,之后在同一行上所有剩余的表达武将被跳过.例如,在上面的程序段中测试标点符号的 Case 子句是,如果字符为点号,那么所有运行上的其他检测就将永不执行.可利用这个有趣的特性来改写(及优化)一些复杂的包含有多个Boolean子表达式的If语句:
' This series of subexpressions connected by the AND operator:
lf x > 0 And Sqr( y ) > x And Log( x ) < z Then z = 0
' can be rewritten as:
Select Case False
Case x > 0,Sqr( y ) > x, Log( x ) < z
' Do nothing ?? any of the above meets the conditlon,
' that is, is False
Case Else
' This is executed only if all tha above are True
z = 0
End Select ' This series of subexpresslons connectetd by the OR operator:
lf x = 0 Or y < x ^ 2 Or x * y = 100 Then z = 0 ' p159
' can be rewritten as:
Select Case True
Case x = 0,y < x ^ 2, x * y = 100
' This is execuled as soc}n as one the abova is found
' to be True
z=O
End Select
由于这还不是正式的优化方法,我的建议是要充分地对程序进行注释,解释正在做什么并且始终包含原有的 If 语句作为标注.这个方法对于加速程序段的运行非常有效,但是不应忘记,如果要遗忘所做过的或者程序对于要去维护它的同事们来说难以理解的话,优化就不是完全重要的.
下面说说 GOTO 语句,相信它是使许多操作变成不容易直观理解的程序的起因.但是我必须承认,我对这个字母的关键词的态度并不是如此否定的.事实上,对于跳高出一系列的嵌套循环,我仍然更偏爱单个的 GOTO 语句,而不是一系列的 Exit Do.或者 Exit For 语句.我建议这样:** 作为常规执行流程的一个例外情况使用 GOTO 语句,并且用遍布于整个程序的明显的标记名和有意义的标往来解释正在做什么.
GoSub…Return 关键字比 GOTO 略好一些,它比较有组织.在某些情况下,利用 GoSub 调用一段当前过程内部的程序比调用外部的 Sub 过程或Function 函数更好.可以既不传递参数也不接收返回值.但是在另一方面,被调用程序与当前的过程共有所有的参数和局部变量,因此在大多数情况下不需要传递任何东西.无论如何应该知道,当编译成本机代码时, GoSub 关键字大约比调用同一模块中的一个外部过程要慢6至7倍,所以,如果正在编写时间紧急的程序,要对这两种方法进行基准测试.
5.1.2 循环语句
在VB中最常使用的循环结构无疑是 For .... Next循环:
For counter = stanvalue To endvalue [Step incremant]
' Statemems to be executed In the loop
Next
只有在增量不等于1时,才需要指定Step项.可以使用Exit For语句退出循环,但遗憾的是,VB不提供任何所谓的“Repeat”命令,从而能跳过当前循环体的余下部分,并重新开始循环.最好使用(嵌套的)If 语句,或者如果不想使逻辑变得过于复杂,就使用普通的 GOTO 关键字指向循环的结尾处.事实上,单个GOTO语句可以增强程序的可读性和可维护性:
For counler = 1 To 100
' Do you stuff hare ....
' if you want to skip ovar what follows, just GoTo NextLoop.
if Err Then Goto NextLoop
' more coda that you don' t want to enclose within nested IF blocks
' ....
NextLoop:
Next
提示 * 应该使用Integer 或 Long 型变量作为For...Next循环的控制变量,这是因为它们比 Single 或 Double 型控制变量快10倍以上,如果需要增高一个浮点数值,最有效的方法在下一个例子中说明. 'p160
警告 *** 避开浮点型变量作为 For....Next 循环中的控制变量的一个主要原因是舍入误差,当增量为分数值时不能完全确定浮点变量是否被正确地增加,并且可能比预期提早或延迟结束循环.
谢谢啦