文章浏览广告 前端
VB编程技巧几例 程序员
如今加入 http://14.66.102.214 数据库
VB5 引入枚举变量,使用它,咱们能够显著地改变应用程序的易读性:编程
Public Enum TimeOfDay小程序
Morning = 0windows
Afternoon = 1后端
Evening = 2数组
End Enum服务器
Sub Main()网络
Dim RightNow As TimeOfDay
If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then
RightNow = Morning
ElseIf Time >= #12:00:00 PM# And Time < #6:00:00 PM# Then
RightNow = Afternoon
ElseIf Time >= #6:00:00 PM# Then
RightNow = Evening
End If
End Sub
VB编程技巧几例
山东 许振华
1 文本框内容的自动选择。
在软件安装等一些场合须要将文本框中的内容自动选择,好比选择确省安装路径,在VB中可用以下的事件驱动代码:
sub text1_getfocus()
text1.selstart=0 ’选择起始位置
text1.sellength=65000 ’选择长度
end sub
sellength接近文本框容许的最大长度(65535),这样作是为了
强迫VB使用文本的实际长度。
2 防止自身屡次运行。
因为WINDOWS的多任务处理功能, 有些程序可能打开后忘记了,下次用时还可能再打开,这样作会占用系统资源下降系统效率。为了防止自身被屡次运行,可利用VB应用对象提供的PrevInstance属性来检测内存中是否已有一个自身的副本,如有则给出提示后结束。通常将检测代码放在FORM_LOAD()中,由于程序一运行就要检测。
代码以下:
sub form_load()
if App.PrevInstance then
msg$=App.exename & ”has already run”
msgbox msg$,48 ’给出程序已运行的提示和一惊叹号以示警告
end
endif
end sub
3 格式化输入。
在数据输入过程当中,有些数据要求必定的格式,好比限制输入的只能为数字或英文字符,这可用VB的格式输入文本框来实现。它与文本框(TEXT BOX)功能基本类似,但多了一个MASK属性,MASK属性经常使用的设定以下:
#—限定仅能输入数字0~9;
A— 限定输入为英文字符及数字;
?—限定仅能输入英文字符;
.—限定小数点位置;
:—限定时间分隔号;
/—限定日期分隔号
不需编写代码,只要在设计时将格式化文本框对象(MASKED EDIT)的MASK属性设计好所需格式便可。好比 ## - ## - ## 可输入12-11-96。
4 用MSGBOX函数设计版权信息。
MsgBox函数可用来设计简易的版权信息,它只能显示文本,若是要求不高的话可采用它,优势是很是方便,好比在菜单ABOUT项中显示版权信息。
MsgBox函数的用法以下:MsgBox msg [, [type][, title] ]
msg —须要显示的文字信息,如版权信息。
type—按钮显示选择项。
如 0 只显示 OK按钮(确省选择),4 显示 Yes 和 No 按钮
title—标题文字信息。
MSGBOX最多能显示1024个字符, 超出的将被截去;它可自动换行,若是你想强制换行的话须要在换行处加入换行符CHR(10)。
例子:
Sub Form_Click ()
Msg1 = ” Copyright (c) 1996” & Chr(10) & ”Ver
1.0 ” ’分两行显示
MsgBox Msg1, 0, ”Copyright demo” ’只显示一个OK按钮
End Sub
使用 IIF 和 SWITCH 以精减代码
在不少地方你均可以使用一个更紧凑的 IIf 函数来代替 If...Else...Endif 的结构: 例:返回两个值中较大的一个 maxValue = IIf(first >= second, first, second)
Switch 则是一个不多使用的函数,但是在不少方面它都提供比 If...ElseIf 结构更好的 例:判断 "x" 是正、负仍是 null?
Print Switch(x<0,"负",x>0,"正", True, "Null")
变量的地址
VB5 内置了一个 VarPtr 函数,但是此函数在 VB4 中没有提供。但是你知道吗?VB4 的运行库中已经包含了此函数。只是在用它以前,咱们须要声明一下:
#If Win16 Then
Declare Function VarPtr Lib "VB40016.DLL" (variable As Any) As Long
#Else
Declare Function VarPtr Lib "VB40032.DLL" (variable As Any) As Long
#End If
此函数在传递一个 Type 结构(若是此结构要求其一段是另外一个变量或记录的地址)给一个外部的 API 程序时十分有用。
向文件中写入非 ASCII 字符
如何向一个文件中写入非ASCII字符(ASCII码在128-255之间)?这在 VB3 中按常规方法就能够很好处理。可是,自 VB4 起,微软引入 Unicode 后,此问题就显得有些麻烦。方法以下:
Dim a As Byte '若是你不用 Unicode,微软推荐使用 Byte 类型替换 String 类型
a=&HF5 '此处直接给处 ASCII 码便可
Open "test.dat" For Binary As #1
Put #1, , a
Close (1)
VB中感叹号“!”与圆点“.”的用法差别
河北 马昱
在Visual Basic中,惊叹号“!”与圆点“.”都用于给对象命名,但二者语法上却存在很大的区别,这点在编程时尤为须要注意。
圆点操做符“.”用来表示对象的属性和方法,在引用时,须要用到对象的Name、圆点和须要的属性或方法。例如要引用文本框Textl中的文本属性时可用reponse$=Text1.Text,再如要改变Form1窗体返回或读取对象高度的单位时用Form1.ScaleHeigh=2000表示。
感叹号“!”经常使用于当一个控件做为一个特性访问的状况下,例如引用Fomr2中Text1文本框文本属性时,可采用response$=Form2!text1.text语法格式。
虽然二者的语法应用结构有较大差别,但两条语句的性能是相同的,值得注意的是若是你在感叹号“!”的位置使用“.”能够得到对窗体上Text1特性的直接访问权,为了进一步增长感性认识,你不妨运行下面的例子来试试。
1.创建一个新项目,并在Form1窗体中增长一个命令控件。
2.双击Form1窗体,编辑Form-Load事件并输入:
Form1!Command1.Caption=”Text”
Form1.Command1.Caption=”It Works”
3.运行试项目,这时你就会在Command1命令框中看到字符串It Works。
为了在程序中清楚地界定引用的控件名和该控件的属性或方法,增长程序的可读性,最好使用感叹号“!”,这也是VB的推荐方式。
0、""(空字串)、Null、Empty、与 Nothing 的区别
先回答如下问题吧! 通过如下的叙述以后, 变量 A、B、C、D 分别等于 0、""、Null、 Empty、 Nothing 的哪个?
Dim A
Dim B As String
Dim C As Integer
Dim D As Object
A 等于 Empty, 由于还没有初始化的「不定型变量」都等于 Empty。但若是检测 A = "" 或 A = 0, 也均可以获得 True 值。
B 等于 "", 由于还没有初始化的非固定长度「字串」都等于 "" 。 但请注意 B<> Null。
C 等于 0, 这个还有问题吗?
D 等于 Nothing, 还没有设定有物件的「物件变量」都等于 Nothing, 但请不要使用 D = Nothing , 而要使用 D Is Nothing 来判断 D 是否等于 Nothing, 由于判断 是否相等的符号是 Is 不是 = 。
最使人迷惑的地方是 Null 这个保留字, 请看如下语句:
Print X = Null
Print X <> Null
结果都是输出 Null(不是 True 也不是 False), 这是由于任何一个运算式只要含有 Null , 则该运算式就等于 Null, 实际上想要判断某一数据是否为 Null 绝对不能使用:
If X = Null Then ' 永远都会获得 Null
而要使用:
If IsNull(X) Then
哪种数据会等于 Null 呢? 除了含有 Null 运算式以外, 就属没有输入任何数据的「数据字段」(在数据库中) 会等于 Null。
巧用Visual Basic的RND()函数
浙江 傅昌盛
Visual Basic的RND()函数有一个重要的特征:当RND()的参数(咱们称这里能够称它为种子)为负值时,同一种子(负值)产生同一个随机数序列。同时Visual Basic还具备强大的二进制技术功能,这样咱们能够按如下思路实现文件内容加密:
X=RND(-KEY) ’KEY为正数
VAULE=INT(256*RND) ’产生一个随机数(以此为密码)
Open FILENAME$ For Binary As #FILENUM’打开文件
Get #FILENUM,I,A ’取文件内容
B=A XOR VAULE ’获得加密文件
结合
C=B XOR VAULE’获得解密文件(B为加密后文件内容)
注意:这里的A非整个文件内容,能够是极少部分、几个字节甚至单个字节,若为单字节,则文件中的每一个字节同不一样的数异或,破译难度可见有多么大。具体过程:
Sub ENDECODE(FILENAME$,MA,FILE2$)'参数为:源文件,密码,目标文件
Dim FILENUM As Integer,X As Single,I As Single
Dim CHARNUM As Integer,RANDOMINTEGER As Integer
Dim SINGLECHAR As String *1,filen2 As Integer'取单字节
If MA<0 Them
MA=MA*(-1)
End If
X=Rnd(-MA)'参数为负
FILENUM=FreeFile
Open FILENAME$ For Binary As #FILENUM '二进制方式打开源文件
filen2=FreeFile
Open FILE2$ For Output As #filen2’以顺序文件打开目标文件
For i=1 To LOF(FILENUM)'LOF()文件字节长
Get #FILENUM,i,SINGLECHAR'取单字节内容
CHARNUM=Asc(SINGLECHAR)
RANDOMINTEGER=Int(256*Rnd)'获得字母表
CHARNUM=CHARNUM Xor RANDOMINTEGER'异或
Print #filen2,Chr$(CHARNUM);’写入目标文件
Next I
Close FILENUM
Close filen2
ok ’调用成功对话框
End Sub
调用格式:ENDECODE 源文件名,密码,目标文件名
上面过程能够对任何EXE、COM、文本等文件进行加解密(奇数次加密,偶数次解密),重演性极好,保密性特优,若对上述过程进一步加工,如进行多重随机等手段处理,那么将会更上一层楼,在此不累述。
顺便提一下,上面过程若对目标文件一样以二进制文件打开、写入,那么只能对纯西文文本进行加解密,对于纯中文文本则经过修改取双字节、I的步长为2来实现,其它(中西文结合文本、EXE、COM等文件)则将得不到预期结果,其缘由能够能是ASCII大于127的字符,不能正常显示,不能用put语句正常写入文件(获得的只是空格),有兴趣者不妨一试。
利用 lstrlen 计算中英文混合字串的长度
在 32-bit 版本的 VB 底下, 将每个字符都视为两个 Byte, 因此
Len("中英Mixed") 等于 7
LenB("中英Mixed") 等于 14
可是在不少场合底下, 咱们但愿中文字长度以 2 计算, 英文字母长度以 1 计算, 此时使用的方法以下:
' 欲计算字串 S 的长度
N = 0
For I = 1 To Len(S)
C = Asc(Mid(S, I, 1)) ' 取得第 I 个字符组的字符码
If C >= 0 And C < 128 Then ' 英文
N = N + 1
Else ' 中文
N = N + 2
End If
Next
看起来程序有点罗唆, 若是您不喜欢这个方法, 能够使用 Windows API 的 lstrlen 函数, 假设假计算 S 的长度, 则 API 声明式以下:
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
而调用的叙述则是:
n = lstrlen("中英Mixed" + Chr(0))
Print n ' n 将等于 9
请注意调用 lstrlen 时必须加上 Chr(0), 由于此一函数是根据 Chr(0) 来判断字串的结束。
调用 lstrlen 除了程序比较简短以外, 速度也比咱们写 VB 程序判断中英文字而后计算长度来的快。
利用 StrConv 计算中英文混合字串的长度
上一周说明利用 Windows API 的 lstrlen 计算中英文混合字串的长度以后,台中的 Rose 读者来函, 说还有更简单的计算方法, 以下:
LenB(StrConv("中英Mixed", vbFromUnicode))
说真的, 由于笔者懂得调用 Windows API, 因此居然忽略了此一 VB 内建的函数,可见闻道有前后, 在此笔者亦但愿先闻道的读者可以将您的心得发表出来, 与喜欢 VB 的读者交流。
StrConv 的做用是字串内容的转换, 其中将叁数二设定成 vbFromUnicode,做用是把「双位元」的字串转换成中文字占用 2 Bytes、英文占用 1 Bytes 的字串,因此紧接着调用 LenB, 即可以计算出中英文混合字串的长度。
如何传递不固定个数的叁数?
定义副程序时, 咱们必须把叁数一一列出来, 例如:
Sub MySub( P1, P2, ┅)
但若是咱们未来调用副程序时, 可能会传入不固定个数的叁数, 那么副程序该如何定义呢?答案以下:
Sub MySub( ParamArray P() ) ' 把叁数 P 定义成一个阵列
如此定义副程序以后, 如下都是未来可能出现的调用叙述:
MySub "ABC" ' 只传递一个叁数
MySub 1, 3, 9, 988, 776, 234 ' 传递 6 个整数叁数
MySub 123, "abc", Date() ' 传递 3 个不一样型别的叁数
以最后一个调用叙述为例, P(0) 叁数将等于 123, P(1) 叁数等于 "abc", P(2) 叁数则等于 Date() 函数的传回值, 而因为 P() 是一个阵列, 咱们能够利用如下方法读取每个叁数:
For i = 0 To UBound(P)
' P(i) 等于第 i 个叁数
Next
最后, 请注意以 ParamArray 所定义的叁数必定是 Variant(不定型) 型别, 若要判断每个个别叁数的资料型别, 能够使用 TypeName 函数。
文 章 点 评 0 篇
>>上篇文章:VB编程技巧几例
>>下篇文章:用VB实现全屏幕图形界面及动态功能提示
『关闭窗口』
文章浏览时的广告
文章浏览广告
用VB实现全屏幕图形界面及动态功能提示
如今加入 http://14.66.102.214
在许多Windows软件的安装程序中,时常能够看到以某种颜色由浅至深的渐变为背景的窗口。使用VB制做这类窗口的方法有很多,而经过调用API函数绘制渐变的窗口背景色,彷佛是一种既简单又节省资源的方法。
首先,在module文件中加入下列声明语句:
Declare Function CreateSolidBrush Lib"GDI"(ByVal crColor As Long) As Integer
Declare Function FillRect Lib"USER"(ByVal hDC As Integer,lpRect As RECT,ByVal hBrush As Integer)As Integer
Declare Function DeleteObject Lib"GDI"(ByVal hObject As Integer)As Integer
Type RECT
left As Integer
top As Integer
right As Integer
bottom As Integer
EndType
而后,在窗口的Paint事件中加入下列代码:
Private Sub Form_Paint()
Dim Color As Integer
Dim hBrush As Integer
Dim OldMode As Integer
Dim RetVal As Integer
Dim StepSize As Integer
Dim X As Integer
Dim FillArea As RECT
OldMode%=Me.ScaleMode
Me.ScaleMode=3
StepSize%=1+Me.ScaleHeight/80
Color%=255
FillArea.left=0
FillArea.right=Me.ScaleWidth
FillArea.top=0
FillArea.bottom=StepSize%
For X%=1 To 80
hBrush%=CreateSolidBrush (RGB(0,0,Color%))
RetVal%=FillRect(Me.hDC,FillArea,hBrush%)
RetVal%=DeleteObject(hBrush%)
Color%=Color%-4
If Color% < 0 Then Color%=0
FillArea.top=FillArea.bottom
FillArea.bottom=FillArea.bottom+StepSize%
Next
Me.ScaleMode=OldMode%
EndSub
按F5运行,就会出现一个以从上至下、由浅至深的渐变蓝色为背景的窗口。对上述代码稍加改动,即可制做出各类颜色和水平方向的渐变背景。
如何在VB和Delphi中快速实现立体化窗口显示
在VB和Delphi中,咱们能够很方便地建立具备立体化观感的窗口,这也是近两年来,Win3.X中较为流行的显示方式。许多专业化的软件都采用了这种立体化的窗口和相应的控件,达到了赏心悦目的效果。下面咱们来谈谈如何在目前最流行的两种Win编程语言中实现这样的效果。
其实,不管是VB仍是Delphi,要实现这种效果都较为容易,在编程中,并不须要调用外部的DLL,在程序运行时,会自动调用CTL3dV2.dll。
咱们先来看看如何在VB中实现:
1.新建一个窗口。
2.在窗口form的属性列表中有一项Auto3D属性,缺省值为false,将其设置为true。它是控制VB中是否显示立体窗口的重要属性。
3.在form的属性列表中还有一项BorderStyle属性,这是控制窗口的边框显示类型,将其设置为3-Fixed Double。
4.如今能够运行这个程序了,你将会看到立体窗口出现。
将Auto3D属性设置为true,还有一个很好的反作用,那就是在这个窗口上的Text、Frame、CheckBox、OptionButton和ListBox都自动具备了立体效果。
在Delphi中实现彷佛显得更加容易和直观:
1.新建一个窗口。
2.在窗口form的属性列表中有一项BorderStyle属性,它的缺省值为bsSizeable,表示边界能够任意调整,将其从新设置为bsDialog。
3.运行程序,你会发现立体窗口出现了。(看来,Delphi中将这种立体化窗口称为“对话窗口”,确实如此,好比在Word中,对话窗口都是这种立体化的显示,而主窗口仍然是通常的风格。)
与VB中的Auto3D相似,在Delphi中有一个属性为Ctl3D,将其设置为true,将使全部在这个窗口上的控件具备立体观感,而且这种变化是马上反映的,而不象VB中在运行时才能看到。
在Delphi的窗口form中,你还能够经过设置FormStyle属性为fsStayOntop来垂手可得的实现“永远浮在其余窗口”上的效果。著名的“译林”Win版本就是用Delphi写的,它其中就有一个“永远在最上面”的功能,就是这样实现的。
用Visual Basic设计更好的用户界面
有时在一个窗口中出现较多的控制件时,若是能向导式地建议用户下一步该作什么,不失为上策。
在Visual Basic的程序设计中,咱们能够使用语句:Object.SetFaocus使咱们但愿的控件获得输入焦点,举个例子:在Form1中咱们加入一个按钮Command1和一个文本输入Text1,双击按钮控件,而后键入以下代码:
Text1.SetFocus
再按F5运行程序,您就会看到一单击按钮,文本框会当即取得输入焦点。另外,咱们还能够使用语句:Sendkeys "{TAB}"使下一个控件得到焦点,但咱们须要在设计时肯定各控件的Index值。(在Properties窗口中)让控件本身感知本身的工做已完成,而主动将焦点让出,会使用户以为应用程序很聪明,也减小了用户出错的机会。
但是当焦点切换的两个控件相隔有必定距离时,上述的方法有时也不足以引发用户的注意,那么一种好的解决方法是将鼠标箭头也移到控件上。惋惜,VB并不支持鼠标移动,那咱们就求助API函数,API函数SetCursorPos可以让咱们如愿。
下面是子程序MoveCursorOn,它可以让鼠标移动到指定控件上方。
下列代码请放在declarations段中:
Type PoinTAPI
x As Integer
y As Integer
End Type
Declare Sub SetCursorPos Lib "User"(Byval x As Integer,Byval y As Integer)
Declare Sub ClientToScreen Lib "User"(Byval hwnd As Integer,IpPoint As PointAPI)
Declare Function GetParent Lib "User"(Byval hwnd As Integer)As Integer
而后创建一个新的子程序(ALT+N→N→键入子程序名MoveCursorOn),下面是子程序的代码:
Sub MoveCursorOn(source As Control)
Dim Pt As PoinTAPI
Dim hparent As Integer
p.x=(Source.Left+Source.Width/2)/Screen.Twipsperpixel)
p.y=(Source.Top+Source.Height/2)/Screen.Twipsperpixel)
hparent=GetParent(source.hwnd)
ClientToScreen hparent pt
SetCursorPos pt.x pt.y
End Sub
使用该子程序很容易,例如咱们想把鼠标移动到按钮Command1上,就可以使用语句
Move Cursor On Command1
您会看到鼠标箭头已经指着按钮Command1。
须要说明的是,千万不要滥用该子程序。让鼠标本身满屏乱飞,咱们的用户会感到失去对应用程序的控制,这是违反咱们的初衷的。
在有数个输入框的窗口中(这在数据库应用程序中是很典型的),当用户完成第一个输入框的输入后,总爱习惯性的加一个回车,但愿输入焦点落到下一个输入框中(DOS中大多数应用程序是如此),可每每事与愿违,这一回车却触发了拥有Default特性的按钮,结果不是关闭了当前窗口就是又蹦出另外一窗口。用户睁大眼睛看着屏幕,“咦?!我到底作了什么?”这是Windows新用户常常遇到的事情。
解决它其实很容易,只需在输入框的KeyPress事件中加入以下代码:
IF KeyASCII=13 Then
KeyASCII=0
Sendkeys "{TAB}"
END IF
这样,当用户在这个输入框中键入Enter时,就象键入TAB键时,焦点被移到下一控件上。但需注意,这种方法不适用于多行的TextBox,即TextBox的MultiLine特性设为True时,由于这时的回车键是起换行的做用。
利用VB三维面板控件设计流动条
VB提供了一个三维面板控件,利用这个控件可设计图形效果的立体界面,从而使应用程序的截面显得更生动、美观,该控件还能够设置各类形式的背景,而后在背景上显示各类形式的字符,使人感兴趣的是,使用三维面板控件,还可设计咱们常常在安装程序中看到的表示安装进度的流动条,并可显示进程的流动条,并可显示进程百分比,改变流动条的颜色等。
一. 介绍属性
FloodColor: 肯定流动条的颜色,缺省为蓝色。
FloodPercent: 显示当前过程如流动条进行的百分比,参数改变时显示的百分数和流动条的面积改变,设为一整型值,取值范围是0~100。
FloodShowpct: 决定是否在三维面板控件上显示百分比,是一个逻辑值。为Ture时显示,为False时不显示。
FloodType: 表示用户对三维面板控件的使用方式。可取值有6个,以下所示:
0 缺省设置
1 表示流动条方向从左到右
2 表示流动条方向从右到左
3 表示流动条方向从上到下
4 表示流动条方向从下到上
5 表示使用指定的颜色从圆心向外画圆
二. 流动条设计
若是在Windows 3.x下,工具箱中不存在三维面板控件,可选择File菜单中的"Add File…" 进行添加,在弹出的对话框中找到Windows/System目录,而后选定Threed.vbx文件便可,若是使用VB 4.0,需在Tools菜单中选择Custom Control命令,选定Sheridan 3d Controls项,按OK按纽,可在工具箱中增长三维面板控件。
启动VB ,在窗体中画一水平方向的长方形三维面板控件,按F4,在属性窗口中设置其Name为P3d、Bevellnner为2-Raised、FloodType为1、FloodshowPct为True,再在窗体中画一个按纽Command1,双击该按纽,键入下面的代码:
Sub Command1_Click()
P3d.floodpercent=0
For N%=1 To 100
If N%>100 Then
Exit sub
End If
P3d.FloodPercent=N%
Next N%
End Sub
按F5,运行该程序,点击Command按纽,便可看到流动条效果。
利用VB的图片框实现屏幕的滚动
对于学习使用VB来编程的电脑爱好者来讲,可能会遇到这样一个问题:就是如何实现屏幕的滚动,由于当要显示的内容超出了屏幕的大小后,利用VB所提供的垂直滚动条和水平滚动条等控件是不可能直接实现这一特殊显示功能的。那么有没有其它的办法呢?答案是确定的。咱们知道VB的图片框是用来显示图形的,但它还有许多其它用途,好比能够用来建立一些动画图形等。其实对于上面的问题咱们也能够利用图片框来巧妙地解决。方法以下:
首先,单击工具框中的图片框(Picture Box)控件和命令按钮控件,在窗体(Form1)上创建图片框对象Picture1和命令按钮对象Command1,将命令按钮的Caption属性设置为"退出",Picture1的大小设置为显示区域的大小,再单击工具框中的图片框控件,在Picture1上创建另外一个图片框对象Picture2,将它的Left和Top属性设置为0。用文本框,标签框等其它控件或导入一幅图象在Picture2上设定具体的显示内容,固然Picture2的大小必定要先调整到能所有容纳全部要显示的内容,最后单击工具框中的垂直滚动条控件和水平滚动条控件,在窗体(Form1)上分别创建垂直滚动条对象VScroll1和水平滚动条对象HScroll1,并设置好它们的属性。至此在窗体(Form1)上的全部设置工做就完成了,下面是具体的程序代码:
Private Sub VScroll1_Change()
Picture2.Top= -VScroll1.Value
End Sub
Private Sub Hscroll1_Change()
Picture2.Left= -HScroll1.Value
End Sub
Private Sub Command1_Click()
End
End Sub
运行程序,当按下横、竖滚动条时,就能使显示内容实现左右、上下的滚动。此方法简单易行,有兴趣的朋友不妨试一试。
VB中阴影字体的实现
太原 胡建民
Visual Basic确实是一种很不错的应用程序开发工具。笔者在使用中,也确实感到用VB设计程序,许多方法的实现是那么的简单。有时,仅仅须要几条语句,就可实现一种方法、效果或功能。下面就介绍一下,阴影字体在VB中的实现。程序以下:
Private Sub Form-Click()
CurrentX=700
CurrentY=1000
FontSize=30
ForeColor=QBColor(8)
Print”Software Weekly”
CurrentX=750
CurrentY=1050
FontSize=30
ForeColor=QBColor(12)
Print”Software Weekly”
End Sub
在属性(properties)窗口中设置:Auto3D为true Font选一种True Type字体。
该程序是把代码加到Form的Click事件中,经过先打印字体的阴影部分,再打印出字体,以实现阴影字体效果的。试运行该程序,单击窗体后,即呈现出阴影字体Software Weekly。
在VB中制做单独程序封面的两种方法
辽宁铁岭 金永涛
这里所谓的单独封面,是只独立应用程序窗口自己的一个窗口,这个窗口在程序运行时首先弹出屏幕,用于装饰程序自己,或简单的演示一下程序的优越性。这样的封面在不少专业的WINDOWS程序中均存在,在VB中可有两种简单的方法实现这一功能。
第一种方法:多窗体编程方法
此方法是一般采用的方法,即在程序中建立两个或两个以上的Form窗体,把其中的一个做为专门的程序封面制做场所,具体方法:
1、建立一个新项目Form1,并在此窗体内安放Command1命令按钮,在Command1-Click()事件中输入结束程序代码“END”。
2、单击菜单的“Insert"项目,加入一个新窗体Form1。
3、双击Form1窗体空白处,在Form1-Load()事件中输入以下代码,用于隐藏主窗体Form1,置第二窗体为最大模式,并在运行程序首先显示和二窗体:
Private Sub Form-Load () ’隐藏主窗口
Form1.Visible = 0 ’窗口2最大模式
Form2.WindowState =2 ’显示窗口2
Form2.Show
End Sub
4、 在窗体Form2中定义全程变量:
Dim strr1 As String
Dim i As Integer
5、在窗体Form2中放入一个时间控件Timer1。
6、在窗体Form2中的Form-Load ()事件中输入如下代码,用于在窗体2中显示图像,并置时间控件频率:
Private Sub Form-Load ()
Form2.Picture = LoadPicture("c:/windows/setup.bmp")
Timer1.Interval = 10
i =0
End Sub
7、在时间控件Timer1- Timer1()事件中进行程序封面的制做工做,演示简单的动画,并控制此动画运行一段时间后自动中止,关闭程序封面,返回程序主窗口;下面的代码实如今一个图片上随机显示字符串,显示30次字符串后自动退出。
Private Sub Timer1-Timer ()
Strr1 = "程序封面演示“
With Form2
.Font.Transparent =True ’透明显示字符
.Font.Size = Rnd *30+10 ’随机变化字号
.Font.Italic =True ’斜体有效
.ForeColor=RGB(Rnd*256,Rnd*256,Rnd*256) ’随机变化前景
.FontName =Screen.Fonts (Rnd*7+14) ’随机变化字体
End With
hh=Form2.TextHehght (strr1) ’取字符串高度
ww= Form2.TextWidth (strr1) ’取字符串宽度
x=Rnd * ( Form2.ScaleWidth-ww) ’随机改变坐标
y=Rnd *( Form2.ScaleHeight-hh)
Form2.Current X=x
Form2.Current Y=y
Form2.Print strr1 ’显示字符
i = i +1 ’计数
If i >30 Then
Unload Me ’关闭封面
Form1.Show ’调入主窗口
Timer1.Enabled =False ’关闭时间控件
End If
End Sub
8、为了可以人为地控制程序封面的停留时间,可在窗体Form2鼠标单击事件中安放退出封面代码:
Private Sub Form-Click ()
Unload Me
Form1.Show
Timer1.Enabled =False ’关闭时间控件
End If
End Sub
至此工做所有完成,当运行程序时,首先弹出程序封面,封面上显示一幅·BMP图像,以后在此图像上进行随机字符串的显示,字符串的位置、字体、字号、前景色等值都是随机变化的,显示30次后自动关闭封面返回主窗口,演示过程当中用鼠标单击窗口也会返回主窗口,在主窗口中按下结束按钮退出程序。具体操做时还有不少其它技巧,好比能够置第二个窗体为主窗体,这样运行时可自动先弹出程序封面,可省略隐藏窗体和调入窗体的过程,另外第二窗体也能够在程序运行时由代码动态生成,这样编程时复杂一些,但有利于程序代码的管理;程序封面的具体制做过程,有许多动态图像控制方法能够使用,只要灵活动用VB的做图方法,再加上一些必要的API函数的配合,会制做出理想的程序封面。
第二种方法:隐藏控件方法
多窗口编程存在着必定的复杂性,须要对多个窗体的·Frm文件进行管理,编码时还须要频繁地在多个窗口间进行转换。实际上经过一个窗体也能够编制出相似的封面效果。基本原理就是在程序运行时首先经过VISIBLE属性隐藏所有控件,而后在主窗体内进行程序封面设计和演示,延时必定时间再恢复全部控件的显示,即达到了独立程序封面的制做过程。因为窗体内的控件不少,逐一隐藏或显示很是繁琐,可采用容器控件简化操做过程,即把控件所有放到Frame1等控件上,这样只要执行Frame1.Visible=0,便可使其上面的全部控件隐藏起来。
c因为程序只涉及一个窗体,程序设计的大部分工做只是编码过程,因此再也不分步介绍。在窗体Form1中安放一个时间控件Timer1 和一个容器控件Frame1,再在Frame1上安放一个命令按钮Command1,具体程序设计时可把全部主程序工做控件放在Frame1上;以后把下面的代码填入相应的事件之中便可完成所有程序设计工做。运行此程序后首先在全屏幕窗体内显示图像,并从左上角开始逐渐放大字符串“程序封面演示”,放大过程当中颜色发平生滑变化,造成美丽的拖尾效果,连续显示5次后自动关闭封面,返回主程序窗口,一样当即关闭程序封面,返回主程序窗口,单击主窗体中的命令按钮退出程序。
’定义全程变量
Dim i ,j As Integer
’退出程序按钮
Private Sub Command1-Click ()
End
End Sub
’单击窗体关闭封面
Private Sub Form-Click ()
Frame1.Visible =1 ’恢复容器控件
timer1.Enabled =False ’关闭时间控件
Form1.WindowState =0 ’恢复缺省窗口模式
End Sub
’准备工做
Private Sub Form -Load ()
Form1.WindowState =2 ’窗口最大化
Frame1.Width =Form1.Width ’调整容器控件尺寸
Frame1.Height =Form1.Height
Frame1.Top =0 ’调整容器控件位置
Frame1.Left =0
Frame1.Visible =0 ’隐藏容器控件
timer1.Interval =10 ’置时间频率
Form1.Picture =LoadPicture ("c:/windows/setup.bmp") ’装入图像
Form1.ScaleMode=3 ’置坐标刻度
Form1.FontName =“黑体” ’置字体名称
End Sub
’封面制做 (动画演示)
Private Sub timer1-Timer ()
Strr ="程序封面演示"
With Form1 ’透明显示
.Font.Transparent =True
.Font.Size = i + 1 ’放大字号
.Font.Italic =True ’斜体有效
.ForeColor=RGB(i*3,56,256-i*3) ’平滑变化颜色
End With
string =strr
Form1.Current X=i ’连续改变坐标
Form1.Current Y=i
Form1.Print stringg ’显示字符串
i = i +1
If i >72 Then ’放大到72号字
j =j +1 ’循环计数
i =0
Form1.Current X=72
Form1.Current Y=72
Form1.ForeColor =RGB(255,56,0) ’从新显示一次字符
Form1.Print stringg
End If
If j =5 Then ’动画计数
Frame1.Visible =1 ’显示容器控件
timer1.Enabled =False ’关闭时间控件
Form1.WindowState=0 ’恢复窗口模式
End If
End Sub
以上方法及程序在WINDOWS 95系统下,在VB4.0环境下调试经过。
用VB实现全屏幕图形界面及动态功能提示
王华 张晖 黄润发
1、 全屏幕图形界面设计
图形界面是现代软件中人机交互的主要手段。为了追求界面的统一和美观,在软件开放过程当中,图形界面大多采用全屏幕构图方式。这是经过将窗体的边框设置为无边框(BorderStyle=None),将窗体显示模式设置为极大化(WindowState=Maximized)来实现的。
当一个窗体界面的设计中要容纳多张图片和多个控制时,将出现窗体显示速度明显变慢的现象,严重影响了程序运行的流畅性。为了解决这一问题,在开放过程当中,采用了一种将【界面设计窗体】与【功能实现窗体】分开处理的方法。
在【界面设计窗体】中,首先按功能的须要和界面设计的创意,将所需的大量图片和控制在屏幕上安排好,选择美观的字体、颜色、线型,对屏幕界面进行设计、修饰加工;而后在其全屏幕运行的状态下,利用剪贴技术,将这一设计完成的图形界面全屏幕复制到剪贴板上;接着将这一屏幕映象做为一张图片粘贴在【功能实现窗体】的背景上。这样,从外观上看,两个窗体的形状彻底相同,而在屏幕的显示速度上,后者明显加快。这时,【功能实现窗体】中的控件已变成一个象征性的图标,对它的操做,可在控制图标的对应位置上设置一个Image 类型的图象框,经过对图象框的操做,来代替原先对控制对象的操做。
采用这种方法,使窗体界面设计的灵活性大大增长,能够任意发挥,而不用担忧控件、图片太多,影响窗体的显示速度。但采用这种方法,将不可避免地增长应用程序自己所占的存储容量,这是以容量换取速度必须付出的代价。
2、 动态功能提示信息的实现
在现代软件设计中,多数功能图标、按钮都在界面上直接肯定其对应的名称,同时也提供了动态提示的功能,即当鼠标移至某一控件时,或使鼠标的形状用一具备象征意义的图标代替,或自动出现一条文字提示,下面介绍一下如何实现这种先进的提示模式。
动态改变鼠标的图形形状,是经过控件的MousePointer属性设置为13(自定义),而后在MouseIeon属性中选取一ICO图标文件来完成的;动态文字提示功能是利用控件的MouseMove事件来实现的:将功能提示处理程序设计在对应的MouseMove事件过程当中,当鼠标移动到该控件范围区域时,便可触发程序执行,完成动态功能提示;为了防止处理程序反复触发,必须设置一控制开关,使处理程序只在鼠标第一次触发该控件区域时被执行;取消功能提示的处理程序设计在窗体的MouseMove事件中,说明程序以下:
Dim FirstTouch As Boolean '防止反复触发处理程序的控制变量
Private Sub ControlObject- MouseMove ()
If FirstTouch Then
FirstTouch =False '显示功能提示字符
End Sub
Private Sub Form- MouseMove ()
FirstTouch =True '取消功能提示字符
End Sub
Visual Basic窗体背景花纹的实现
咱们在开发软件过程当中,为提升软件的商品化程度,感受到界面的美观程度是一个软件可否得到成功的一个重要因素,咱们仔细研究了一些成功的商品化软件,从这些软件上能够看到,程序窗口背景能显示出很是美丽的、富有立体感的花纹。而采用Visual Basic进行窗体设计,若只按照系统提供的功能,只能从有限的几种颜色中选择一种颜色或采用程序绘制一些简单的线条。而想实现立体感很强的纹理图案,通常只能采用窗体的PICTURE属性调用位图文件,使用这种方法实现有许多缺点 ,其一是窗体大小受位图大小的限制,调整起来麻烦,不具备通用性和灵活性;其二是浪费资源,由于花纹图案基本上是重复图案,采用与窗体一样大小的位图是一种浪费。
下面介绍一种窗体背景花纹实现的方法。在窗体上创建一个网格控件,设定网格行不可见,去掉固定行和固定列,用程序实现网格控件与窗体一样大小,并随窗体大小的改变而改变。而后设计一个花纹图案,造成BMP位图文件(本文程序使用文件Pict1.bmp),或者从其它图象中截取一段图案,也能够利用Windows系统提供的图案(如c:/windows/Tiles.bmp),将其调入Picture控件。设定网格的每一个单元与该图案大小相同,使单元的数量正好覆盖整个窗体背景,再将全部单元均显示该图案。经过子程序Backpict()实现以上过程,不论图案大小、窗体大小,程序都能自动调整网格控件大小和网格单元大小及单元数量。
该程序在Visual Basic 5.0上调试成功。
1.新建窗体Form1,属性以下:
Caption =“背景花纹的实现”
Borderstyle=3(无最大、最小化按钮)
2.建网格控件Grid1,它的位置和大小将在程序中设置(与Form1一样大),属性为:
Enabled = False(焦点不会落在网格控件Grid1上)
Fillstyle=1(改变全部单元Text特性)
Fixedcols=0(无固定行)
Fixedrows=0(无固定列)
Gridlines = False(网格行不可见),
Visible = True
3.创建图象控件Picture1,程序运行时将背景花纹基本图案放入其中,属性为
Visible = False(不可见)
Autosize = True(自动调整大小)
4.控件中加入Sheridan 3D Controls,选取其中的三维命令按钮SSCommand,创建两个按钮
SSCommand1.Caption=“退出”
SSCommand2.Caption=“更换背景”(演示不一样的背景图案)
它们的属性Picture可调用与背景相同或不一样的图案,若是使用普通的命令按钮控件Command也可,只是命令按钮无背景图案。
5.创建背景图案造成子程序:
Dim pictfile As String '位图文件名
Dim FILEPATH As String '文件路径
Sub Backpict(pictfile)
picture1.ScaleMode = 3
Form1.ScaleMode = 3
picture1.Picture = LoadPicture(pictfile)
'网格控件覆盖整个窗体背景
grid1.Top = -1
grid1.Left = -1
grid1.Width = Width
grid1.Height = Height
grid1.Cols=Int(Form1.ScaleWidth/picture1.ScaleWidth) + 1
grid1.Rows=Int(Form1.ScaleHeight/picture1.ScaleHeight) + 1
'全部单元大小等于基本图案大小
For i = 0 To grid1.Cols - 1
For j = 0 To grid1.Rows - 1
grid1.ColWidth(i) = picture1.ScaleWidth * 15
grid1.RowHeight(j) = picture1.ScaleHeight * 15
Next j
Next I
'选定全部单元
grid1.SelStartCol = 0
grid1.SelStartRow = 0
grid1.SelEndCol = grid1.Cols - 1
grid1.SelEndRow = grid1.Rows - 1
grid1.Picture = Picture1.Picture
End Sub
6.窗体主程序
Private Sub Form_Load()
Private Sub Form_Load()
'获得运行程序路径名,路径名后带反斜杠
If Right(App.Path, 1) <> "/" Then
filePath = App.Path & "/"
Else
filePath = App.Path
End If
'窗体初始显示由Tiles.bmp基本图案组成的背景
pictfile = "c:/windows/Tiles.bmp"
backpict (pictfile)
End Sub
7.退出程序命令按钮
Private Sub SSCommand1_Click()
End
End Sub
8.演示不一样的底纹图案
Private Sub SSCommand2_Click()
'两种背景图案交替演示
If pictfile = filePath & "Pict1.bmp" Then
pictfile = "c:/windows/Tiles.bmp"
Else
pictfile = filePath & "Pict1.bmp"
End If
Backpict (pictfile)
End Sub
VB编程的一些心得
在大学做毕业设计的课题是编制一个教学软件,因此很天然地和VB这种易学、易懂、界面友好漂亮的语言打上了交道。在编写的过程当中固然遇到了许多的问题,这里将一些简单的小程序写下来与喜好编程的朋友们分享。
1、封面
封面的设计是这样的,先出现一窗体,上面为你喜欢的图案。而后出现一艘从左向右行驶着的船。屏幕上方从两侧分别移动出“欢迎”两个字。
具体的制做方法是:把预先选好的背景图案装入封面窗体中,窗体命名为CAI。再分别在三个图像控件(image)中装入预先制做好的位图“欢”、“迎”和船型图案。而后把三个image放置在初始位置(即 图案刚在窗体出现时的位置),并把它们的可视属性都设置为“false”。程序以下:
Sub Form_load()
cai.Show ′显示封面窗体
Dim i ′定义变量
image3.visible=True ′船型图像控件出现
a1: If image3.Left < 6120 Then
′6120为船移动到屏幕右边的坐标,此值能够随须要选取
image3.Move image3.Left+50
′移动此图像控件如嫌移动慢,可改变移动值
Goto a1
End If
image1.visible=True ′“欢”字出现
a2: If image1.Left < 2120 Then
′2120为“欢”字移动到屏幕中间的位置
image1.Move image1.Left+50 ′移动此图像控件
Goto a2
End If
image2.visible=True ′“迎”字出现
a3: If image2.Left > 5420 Then
′5420为“迎”字移动到屏幕中间的位置
image2.Move image2.Left-50 ′移动此图像控件
Goto a3
End If
For i=1 To 10000
′使窗体暂停一段时间时间长短可经过改变循环次数实现
Next i
menul.Show ′显示程序主窗体
Unload cai ′卸载封面窗体
End Sub
2、简单的“动画”
点击一3D按钮后,屏幕表现光线平行进入一玻璃管,在管中有一散射中心,有的光线射到此中心后反射到管的初始端。程序以下:
Sub Command3Dl_Click()
Dim i, j, k, m, n ′定义变量
For i=2080 To 5520
′显示出三条线,直到图像中的散射中心处,颜色为黑色
Line(2080,2760)-(i,2760),RGB(0, 0, 0)
Line(2080,2860)-(i,2860),RGB(0, 0, 0)
Line(2080,2660)-(i,2660),RGB(0, 0, 0)
Next i
For j=5520 To 4800 Step-1 ′反射光线第一次射到管壁上
Line(5520,2760)-(j,2760-(5520-j)*.33333333),RGB
(255, 0, 0) ′反射光线,颜色为红色
Line(5520,2660)-(5520+(5520-j),2660),RGB(0, 0, 0)
Line(5520,2860)-(5520+(5520-j),2860),RGB(0, 0, 0)
′没有遇到散射中心的两条光线,为黑色,继续前进
Next j
For k=4800 To 3360 Step-1 ′反射光线第二次射到管壁上
Line(4800,2520)-(k,2520+(4800-k)*.33333333),
RGB(255, 0, 0) ′反射光线,颜色为红色
Line(6240,2660)-(6240+(4800-k),2660),RGB(0,0,0)
Line(6240,2860)-(6240+(4800-k),2860),RGB(0,0,0)
′没有遇到散射中心的两条光线,颜色为黑色
Next k
For m=3360 To 2080 Step-1 ′反射光线第三次射到管壁上
Line(3360,3000)-(m,3000-(3360-m)*.33333333),
RGB(255, 0, 0) ′反射光线,颜色为红色
Next m
End Sub
3、封底
封底的设计是:先出现全黑的屏幕,而后从上至下逐渐拉出白底红字的“再见”的字样。先按要求在画板中作一个BMP图,上面写着“再见”。而后在一名为BYE的窗体中加入一个全屏大的Picturel, 将BMP图装入。程序以下:
Sub Form_Load()
Dim i ′定义变量
bye.Show ′封底出现
Unload menu1 ′卸载主菜单
al: If picture1.Height < 7130 Then ′7130为图的高度
picturel.Height=picture1.Height+50 ′下拉屏幕
GoTo al
End If
For i=1 To 20000 ′使窗体暂停一段时间
Next i
End ′结束全部操做
End Sub
处理过程时的鼠标显示
为让你的程序更加专业一点,咱们每每须要在程序处理过程时的鼠标形状显示为“沙漏”状态。咱们通常的方法是在子程序的开始及结尾编程来改变鼠标形状,这样十分烦琐且容易忘记。咱们还能够如下面的方法来实现这一目标:
1、建立一个新类,命名为:CHourGlass;
2、在此类中加入如下代码:
Private Sub Class_Initialize()
Screen.MousePointer = vbHourglass
End Sub
Private Sub Class_Terminate()
Screen.MousePointer = vbDefault
End Sub
3、在子程序的开始加入下面代码:
Dim MyHourGlass As CHourGlass
Set MyHourGlass = New CHourGlass
文 章 点 评 0 篇
>>上篇文章:VB编程技巧几例
>>下篇文章:用VB实现全屏幕图形界面及动态功能提示
『关闭窗口』
************************************************************************
文章浏览时的广告
文章浏览广告
VB应用程序访问SQL Server方法探讨
如今加入 http://14.66.102.214
VB应用程序访问SQL Server方法探讨
摘要
本文讨论了Visual Basic应用程序访问SQL Server数据的几中经常使用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法的性能和优缺点。
引言
Microsoft Visual Basic(简称VB)做为一种面向对象的可视化编程工具,具备简单易学的,灵活方便和易于扩充的特色。并且Microsoft为其提供了与SQL Server通讯的API函数集及工具集。所以它愈来愈多地用做大型公司数据和客户机—服务器应用程序的前端。与后端的Microsoft SQL Server相结合,VB可以提供一个鲁棒的、高性能的客户机—服务器方案。
使用Visual Basic做为前端开发语言,与SQL Server接口有三种经常使用的方法,即:
*数据访问对象/Jet
*为ODBC API编程
*使用SQL Server的Visual Basic库(VBSQL)为DB库API编程
本文将讨论这三种VB应用程序管理SQL Server数据的方法,并比较每种方法的性能和优缺点。
方法1. 数据访问对象/JetVisual Basic支持Data Access Objects(DAOs)的子集。DAO的方法虽然不是性能最好的管理客户机椃衿髦涞亩曰胺绞剑酚行矶嘤诺恪J褂?/FONT>DAOs访问SQL Server的过程以下:应用程序准备好语句并送至Jet,Jet引擎(MASJT200.DLL)优化查询,载入驱动程序管理器并与之通信,驱动程序管理器(ODBC.DLL)通地调用驱动器(SQLSRVR.DLL)的函数,实现链接到数据源,翻译并向SQL Server提交SQL语句且返回结果。
下面是一个用DAOs访问SQL Server的VB实例。
'Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset
Private Sub Form_Load()
Set mydb=OpenDatabase("",Fa|se,Fa|se,"ODBC;DSN=Myserver;WSID=LCL;DATABASE=sa|es")
Set mydynaset=mydb CreateDynaset("Select*from Customers")
End Sub
上述例子是以非独占、非只读方式打开sales数据库,并检索Customers表中的全部字段。OpenDatabase函数的最后一个参数是ODBC链接字符串参数,它指明了Microsoft Access链接到SQL Server所须要知道的一些内容。其中“DSN”为数据源名,“WSID”为工做站名,“DATABASE”为所要访问的数据库名。
方法2.用ODBC API编程
ODBC(Open Database Connectivity)的思想是访问异种数据库的一种可移植的方式。与数据资源对话的公用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动态链接中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来经过驱动器反过来通来驱动器(SQLSRVR.DLL)把它们送到服务器中。
用ODBC API编程,通常要用到如下一些函数。下面列出了经常使用的函数以及它们的功能。
下面的代码使用上面一些函数先登陆到一个服务器数据库,并为随后的工做设置了语句句柄。
Global giHEnv As Long
Global giHDB As Long
Global giHStmt As Long
Dim myResult As integer
Dim myConnection As Srting
Dim myBuff As String*256
Dim myBufflen As Integer
If SQLA||ocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"A||ocation couldn't happen!"
End if
if SQL||ocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "SQL Server couldn't connect!"
End if
myConnection="DSN=myServer;UID=|c|;PWD=;APP=ODBCTest;WS|D=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),
myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQUIED)
myResult=SQLA||ocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select*from Customers Where City="Wuhan""
myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
方法3.使用VBSQL对DB库API编程
DB库是SQL Server的本地API,SQL Server的Visual Basic库(VBSQL)为Visual Basic程序员提供API。从必定意义上说,VBSQL是链接Visual Basic程序到SQL Server的性能最好最直接的方式。VBSQL包含如下三个文件:
VBSQL.VBX 包含库函数,具备访问重要的消息和处理错误的能力
VBSQL.BI 包括全部的常量和变量说明
VBSQL.HLP Windows帮助文件,使用VBSQL的指南
使用VBSQL时,必需将VBSQL.BI加入到Visual Basic工程文件中,并确保VB程序运行时有VBSQL.VBX文件。 一个典型的VBSQL对话中,通常要用到如下这些函数。
<div align="center"><center><table border="0" width="100%">
<tr>
<td><p ALIGN="JUSTIFY"> 函数 </td>
<td><p ALIGN="JUSTIFY">功能 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLALLocEnv </td>
<td><p ALIGN="JUSTIFY">初始化ODBC环境,返回环境句柄 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLALLocConnect </td>
<td><p ALIGN="JUSTIFY">为链接句柄分配内存并返回链接句柄 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLConnect </td>
<td><p ALIGN="JUSTIFY">链接一个SQL数据资源 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLDriverConnect </td>
<td><p ALIGN="JUSTIFY">链接一个SQL数据资源,容许驱动器向用户询问信息</td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLALLocStmt </td>
<td><p ALIGN="JUSTIFY">为语句句柄分配内存并返回语句句柄 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLExecDirect </td>
<td><p ALIGN="JUSTIFY">把SQL语句送到服务器 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLFetchAdvances </td>
<td><p ALIGN="JUSTIFY">到结果集的下一行(或第一行) </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLGetData </td>
<td><p ALIGN="JUSTIFY">从结果集的特定的一列取回数据 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLFreeStmt </td>
<td><p ALIGN="JUSTIFY">释放与语句句柄相关的资源 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLDisconnect </td>
<td><p ALIGN="JUSTIFY">切断链接 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLFreeConnect </td>
<td><p ALIGN="JUSTIFY">释放与链接句柄相关的资源 </td>
</tr>
<tr>
<td><p ALIGN="JUSTIFY"> SQLFreeEnv </td>
<td><p ALIGN="JUSTIFY">释放与环境句柄相关的资源 </td>
</tr>
</table>
</center></div>
通常的DB库API编程的过程是这样的:先经过调用SqlInit对DB库进行初始化,再调用SqlConnection打开一个链接,而后就可作一些工做。下面的代码是一个初始化DB库并登陆到服务器的通用例程。
Private Sub InitializeApplication()
DBLIB-VERSION=SqlInit()
If DBLIB_VERSION=""Then
MsgBox"Could not initialize DBLIB!Exit application.", MB_ICONEXCLAMATION
End
End if
End Sub
Private Function LoginToServer() As integer
loginToServer=SUCCEED
Status%=SqlSetloginTime%(loginTimeOut)
If giSqlConn<>0 Then
SqlClose(giSqlConn) '关闭已打开的链接
giSqlConn=SqlOpenConnection(gsServerName,gsLoginID,gsPassword,ProgramName, ProgramName)
If giSqlConn<>o Then
liresult=SqlUse(giSqlConn,"Sales")
Else
LogintoServer=FAIL
End If
End Function
性能比较
以上三种访问SQL Server的方法各有各的特色。DAOs方法是基于对象的,于是便于使用,可是它从Visual Basic到SQL Server的最慢的方式。ODBC API和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性好,容许最强的互操做性,编程简单,但速度慢于VBSQL方法。VBSQL方法经过VBSQL控件,提供了重要的SQL Server前端应用程序所需的灵活性、强大功能和良好性能。它具备真正的事件驱动及错误处理能力,彻底支持异步处理、游标和计算列等。这些都是VBSQL方法超出其它方法的优点,但其编程稍复杂。至于实际使用哪种接口方式,在很大程度上依赖于用户的应用程序的具体状况而定。
**********************************************************************文章浏览广告
VB编程的一些心得
如今加入 http://14.66.102.214
在大学做毕业设计的课题是编制一个教学软件, 因此很天然地和
VB这种易学、易懂、界面友好漂亮的语言打上了交道。 在编写的
过程当中固然遇到了许多的问题, 这里将一些简单的小程序写下来
与喜好编程的朋友们分享。
1、封面
封面的设计是这样的,先出现一窗体,上面为你喜欢的图案。 然
后出现一艘从左向右行驶着的船。 屏幕上方从两侧分别移动出“
欢迎”两个字。
具体的制做方法是:把预先选好的背景图案装入封面窗体中, 窗
体命名为CAI。再分别在三个图像控件(image) 中装入预先制做好
的位图“欢”、“迎”和船型图案。而后把三个image放置在初始
位置(即 图案刚在窗体出现时的位置),并把它们的可视属性都设
置为“false”。程序以下:
Sub Form_load()
cai.Show '显示封面窗体
Dim i '定义变量
image3.visible=True '船型图像控件出现
a1: If image3.Left <6120 Then '6120为船移动到屏幕右边的坐标,此值能够随须要选取 image3.Move image3.Left+50 '移动此图像控件如嫌移动慢,可改变移动值 Goto a1 End If image1.visible="True" '“欢”字出现 a2: If image1.Left < 2120 Then '2120为“欢”字移动到屏幕中间的位置 image1.Move image1.Lefe+50 '移动此图像控件 Goto a2 End If image2.visible="True" '“迎”字出现 a3: If image2.Left> 5420 Then
'5420为“迎”字移动到屏幕中间的位置
image2.Move image2.Left-50 '移动此图像控件
Goto a3
End If
For i=1 To 10000
'使窗体暂停一段时间时间长短可经过改变循环次数实现
Next i
menul.Show '显示程序主窗体
Unload cai '卸载封面窗体
End Sub
2、简单的“动画”
点击一3D按钮后,屏幕表现光线平行进入一玻璃管, 在管中有一
散射中心,有的光线射到此中心后反射到管的初始端。程序以下:
Sub Command3Dl_Click()
Dim i, j, k, m, n '定义变量
For i=2080 To 5520
'显示出三条线,直到图像中的散射中心处,颜色为黑色
Line (2080,2760)-(i,2760),RGB(0, 0, 0)
Line (2080,2860)-(i,2860),RGB(0, 0, 0)
Line (2080,2660)-(i,2660),RGB(0, 0, 0)
Next i
For j=5520 To 4800 Step-1 '反射光线第一次射到管壁上
Line (5520,2760)-(j,2760-(5520-j)*.33333333),RGB
(255, 0, 0) '反射光线,颜色为红色
Line (5520,2660)-(5520+(5520-j),2660),RGB(0, 0, 0)
Line (5520,2860)-(5520+(5520-j),2860),RGB(0, 0, 0)
'没有遇到散射中心的两条光线,为黑色,继续前进
Next j
For k=4800 To 3360 Step-1 '反射光线第二次射到管壁上
Line (4800,2520)-(k,2520+(4800-k)*.33333333),
RGB(255, 0, 0) '反射光线,颜色为红色
Line (6240,2660)-(6240+(4800-k),2660),RGB(0, 0, 0)
Line (6240,2860)-(6240+(4800-k),2860),RGB(0, 0, 0)
'没有遇到散射中心的两条光线,颜色为黑色
Next k
For m=3360 To 2080 Step-1 '反射光线第三次射到管壁上
Line (3360,3000)-(m,3000-(3360-m)*.33333333),
RGB(255, 0, 0) '反射光线,颜色为红色
Next m
End Sub
3、封底
封底的设计是:先出现全黑的屏幕, 而后从上至下逐渐拉出白底
红字的“再见”的字样。先按要求在画板中作一个BMP图,上面写
着“再见”。 而后在一名为 BYE 的窗体中加入一个全屏大的
Picturel,将BMP图装入。程序以下:
Sub Form_Load()
Dim i '定义变量
bye.Show '封底出现
Unload menu1 '卸载主菜单
al: If picture1.Height <7130 Then '7130为图的高度 picturel.Height="picture1.Height+50" '下拉屏幕 GoTo al End If For i="1" To 20000 '使窗体暂停一段时间 Next i End '结束全部操做 End Subぅ
文章浏览广告
Visual Basic调用Windows API函数的应用举例
如今加入 http://14.66.102.214
【 摘 要】
本 文 介 绍 了 利 用Visual Basic 调 用 Windows API 函 数 的 方 法, 并 通 过 举 例 介 绍 部 分
API 函 数 的 功 能 。 例 如:VB 程 序 私 有 初 始 化 参 数 的 存 取, 及 当 前 系 统 信 息 的 检 测。
【 关 键 字】
Windows Microsoft( 微 软) 公 司 的 视 窗 系 统。
Visual Basic(VB) Microsoft( 微 软) 公 司 的 可 视 化 编 程 工 具。
API(Application Program Interface) 应 用 程 序 接 口。
初 始 化 文 件( 例 如:DEMO.INI)
【 正 文 】
1、 利 用VB 调 用API 函 数 的 方 法。
(1) 用Declare 语 句 申 明 所 要 调 用 的API 函 数, 若 该 函 数 务 返 回 值, 可 申 明 为Sub 过 程; 若 有 返 回 值, 则 可 申 明 为Function 函 数。
注: 所 有 的API 函 数 的 申 明 都 在 ./VB/WINAPI/WIN31API.HLP 中, 只 需 用Copy 和 Paste 的 方 法 即 可 放 到 相 应 的 地 方。
(2) 一 旦 申 明 了 某 一 个API 函 数 后, 就 可 以 象 调 用VB 的 函 数 一 样。 但 需 注 意, 如 果 参 数 传 递 不 对, 可 能 会 导 致 死 机。
2、 VB 程 序 私 有 初 始 化 参 数 的 存 取。
Windows 软 件 的 初 始 化 参 数 的 获 取 与 保 存 是 通 过 读 取 扩 展 名 为 .INI 的 文 本 文 件 来 实 现 的, 即 程 序 运 行 前 先 从 指 定 的INI 文 件 中 搜 索 到 所 需 的 参 数, 并 反 映 到 程 序 的 运 行 环 境 中; 当 程 序 退 出 时 又 将 当 前 的 环 境 参 数 保 存 到 指 定 的INI 文 件 中。Windows 提 供 的API 函 数 中 的GetPrivateProfileString 和WritePrivateProfileString 就 有 这 些 功 能。
说 明:
(1) GetPrivateProfileString 声 明:Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
功 能: 获 取INI 文 件 中 与 指 定 关 键 字 对 应 的 参 数( 字 符 串 性) 并 将 此 参 数 拷 贝 到lpReturnedString 中。
参 数
类 型
说 明
lpApplicationName
String
待 寻 找 的 关 键 字 所 在 的 段
lpKeyName
String
与 参 数 相 对 应 的 关 键 字 名
lpDefault
String
指 定 的 关 键 字 不 存 在 时 返 回 的 缺 省 值
lpReturnedString
String
预 先 分 配 好 的 长 度 至 少 为nSize 字 节 的 字 符 串 缓 冲 区
nSized
Integer
将 要 装 入lpReturnedString 缓 冲 区 的 最 大 字 符 数
lpFileName
String
初 始 化 文 件 的 名 字
返 回 值
Integer
拷 贝 到lpReturnedString 缓 冲 区 的 字 符 数
(2)WritePrivateProfileString
声 明:Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
功 能: 在 初 始 化 文 件 的 指 定 关 键 字 项 内 设 置 参 数( 字 符 串)。
返 回 值: 如 果 设 置 成 功, 返 回TRUE; 否 则 返 回FALSE。
3、 VB 检 测 当 前 系 统 信 息
所 需 的API 函 数 有GetWindowsDirectory,GetWinFlags,GetVersion,GetSystemDirectory, 等, 具 体 的 使 用 方 法 可 见 举 例。
4、 举 例
DEMO.PRJ
( 一) 建 立 项 目 文 件DEMO.PRJ; 建 立 模 块 文 件DEMO.BAS. 并 将 下 列 声 明 插 入 到DEMO.BAS 中。
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Declare Function GetKeyboardType Lib "user32" (ByVal nTypeFlag As Long) As Long
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Declare Function GetVersion Lib "kernel32" () As Long
Declare Function GetWinflags Lib "kernel32" () As Long
注:
GetWindowsDirectory: 该 函 数 获 取Windows 目 录 的 路 径。
GetSystemDirectory: 该 函 数 获 取Windows 系 统 子 目 录 的 路 径。
GetVersion: 该 函 数 返 回 当 前Windows 版 本 号 和DOS 版 本 号。 返 回 值 的 低 位 字 节 说 明Windows 主 版 本 号, 返 回 值 的 低 位 字 的 高 位 字 节 说 明Windows 副 版 本 号, 高 位 字 的 低 位 字 节 说 明DOS 副 版 本 号, 高 位 字 的 高 位 字 节 说 明DOS 主 版 本 号。
4、 GetWinflags: 该 函 数 返 回Windows 运 行 系 统 上 的 内 存 配 置。
返 回 标 志 值
含 意
WF_80X87
Intel 数 字 协 处 理 器
WF_CPU386
80386 CPU
WF_CPU486
80486 CPU
WF_ENHANCED
Windows 系 统 运 行 在386 增 强 模 式
WF_PMODE
Windows 系 统 运 行 在 保 护 模 式
WF_STANDARD
Windows 系 统 运 行 在 标 准 模 式
WF_WLO
运 行 在OS/2 下
5、GetKeyboardType(): 该 函 数 得 到 系 统 键 盘 类 型,nTypeFlag=0 时 返 回 键 盘 类 型。
返 回 值
含 意
1
IBM PC/XT 或 兼 容 键 盘
2
Olivetti "ICO" 键 盘(102 个 键)
3
IBM 或 兼 容 键 盘(84 个 键)
4
IBM 增 强 型 或 相 似 键 盘(101 或102 个 键)
5
Nokia 1050 或 相 似 键 盘
6
Nokia 9140 或 相 似 键 盘
7
日 本 键 盘
6、 为 了 调 用 这 些API 函 数 更 加 方 便, 可 以 编 写 一 些 包 含 函 数。 这 些 用 户 自 定 义 函 数 的 功 能 也 需 要 在 模 块 中。
Function SysDir()
Temp = Space$(255)
StringLen = GetSystemDirectory(Temp, 255)
SysDir = Left$(Temp, StringLen)
End Function
___________________________________________________________________________
Function WinDir() As String
Temp = Space$(255)
StringLen = GetWindowsDirectory(Temp, 255)
WinDir = Left$(Temp, StringLen)
End Function
___________________________________________________________________________
Function KeyType()
KbType = GetKeyboardType(0)
Select Case KbType
Case 1
KeyType="IBM PC/XT,or compatible(83key)"
Case 2
KeyType="Olivetti 'ICO'(102key)"
Case 3
KeyType="IBM AT,or similar(84key)"
Case 4
KeyType = "IBM Enhance (101 or 102 keys)"
Case 5
KeyType = "Nokia 1050 or similar"
Case 6
KeyType = "Nokia 1050 or similar"
Case 6
KeyType = "Nokia 9140 or similar"
Case 7
KeyType = "Japan Keyboard"
End Select
End Function
___________________________________________________________________________
Function Initial()
Form1.Left = Val(StringFormINI("Form", "left", "0 ", "c:/windows/demo.ini"))
Form1.Top = Val(StringFormINI("Form", "top", "0 ","c:/windows/demo.ini" ))
Form1.WindowState = Val(StringFormINI("Form", "windowstate", "0 ","
c:/windows/demo.ini"))
End Function
_______________________________________________________________________
Function SaveInfor()
x = WritePrivateProfileString("Form", "left", Str$(Form1.Left),
"c:/windows/demo.ini")
x = WritePrivateProfileString("Form", "top", Str$(Form1.Top),
"c:/windows/demo.ini")
x = WritePrivateProfileString("Form", "windowstate", Str$
(Form1.WindowState), "c:/windows/demo.ini")
End Function
___________________________________________________________________________
Function StringFormINI(SectionName As String, KeyName As String,
Default As String, FileName As String) As String
MaxStringLen% = 255
returnedstr$ = Space$(MaxStringLen%)
Result% = GetPrivateProfileString(SectionName, KeyName,
Default, returnedstr$, MaxStringLen%, FileName)
returnedstr$ = LTrim$(RTrim$(returnedstr$))
returnedstr$ = Left$(returnedstr$, Len(returnedstr$) - 1)
StringFormINI = returnedstr$
End Function
__________________________________________________________________________
Function WinVer()
ver& = GetVersion()
winhigh = ver& Mod 256
winlow = Int(ver& / 256) Mod 256
WinVer = ((winhigh * 100) + winlow) / 100
End Function
___________________________________________________________________________
Function DosVer()
ver& = GetVersion()
Temp = ver& / 65536
doshigh = Int(Temp / 256) Mod 256
doslow = Temp Mod 256
DosVer = ((doshigh * 100) + doslow) / 100
End Function
___________________________________________________________________________
Function CPU()
Flags&=GetWinFlags()
Match=1
Select Case Match
Case (Flags& And &H8)/&H8
CPU=486
Case (Flags& And &H4)/&H4
CPU=386
End Select
End Function
___________________________________________________________________________
Function Mode()
Flags&=GetWinFlags()
If flags& And &H20 Then
Mode="Enhanced"
Else
Mode="Standard"
End If
End Function
( 二) 建 立 窗 体 文 件Form1.frm
Form1.Caption="System Information"
Sub Form_Paint()
Cls
Print , "System Information"
Print , "WindowsDir: ", WinDir()
Print , "SystemDir: ", SysDir()
Print , "WindowsVersion: ", WinVer()
Print , "DosVersion: ", DosVer()
Print , "KeyboardType: ", KeyType()
End Sub
Sub Form_Load()
x = Initial()
End Sub
Sub Form_Unload(Cancel As Integer)
x = SaveInfor()
End Sub
( 三) 运 行 本 程 序。( 本 程 序 在486 兼 容 机Windows3.1 下 通 过)
本 程 序 能 够 检 测 当 前 部 分 系 统 信 息, 在 退 出 时 能 将 窗 口 的 左、 上 位 置 及 窗 口 状 态 记 录 在DEMO.INI 文 件 中, 待 下 次 运 行 时, 窗 口 能 保 持 上 次 退 出 时 的 位 置 和 状 态。
注: 需 要 用 文 本 编 辑 器 编 辑DEMO.INI
[Form]
Left=100
Top=100
Windowstate=0
并 存 在 当 前 系 统Windows 目 录 下。
本 文 仅 仅 是 介 绍 了 一 下API 函 数 的 使 用 方 法, 以 做 抛 砖 引 玉 之 用。 真 正 的 应 用API 函 数, 还 需 要 更 详 尽 的 资 料 和 读 者 更 大 的 努 力。
*******************************************************************8
文章浏览广告
第七章(2)★输出(2)
如今加入 http://14.66.102.214
好久没有继续VB教程了,也有不少初学VB的朋友来信留言要求继续,提及来惭愧,不是有时候犯懒,就是杂物缠身,今天好不容易作在电脑前想敲几个字,哪知打开VB5出现非法操做,卸载后从新安装非法提示依然出现,真是岂有此理!Windows系统用了好久了,看来冲突实在是太多,但这么久没有更新,实在说不过去,此次就算是一次纸上谈兵,带来不便之处还请你们包涵。
上次为你们讲解了MsgBox的用法,此次我来说讲其余的输出方法。
在程序中咱们若是想输出执行的结果最常常要用到什么对象,你可能会告诉我是文本框或标签控件,但事实每每不是这样,由于它们的显示方法单调,不能把各类字体的文字、图形结合在一块儿,所以最符合要求的控件应该是图片框(PictureBox),或直接就在Form自己上显示,其中要用到一个很重要的方法:“Print”,它的用法是:
对象.Print Spc(n)/Tab(n);字符串表达式;……
其中Spc(),表示打印字符之间的空格,n表示空格数目,Tab()表示绝对列数,n表示列数,也就是说你能够指定在那一列上打印,它们用“;”和字符串表达式分开,但也能够是这样:
对象.Print 字符串表达式1,字符串表达式2,……
用“,”隔开字符串,这样系统就会按默认的(14列)为一个输出位。每使用一次Print方法,程序就会在指定的对象上打印一行,在用Print则在下一行打印,当对象是窗体时,对象能够省略,例如打印一个表格:
(注意:要把使用Print的对象的Autoredraw属性设为True,咱们知道,当有多个窗口层叠时,哪一个窗口获得焦点就会显示到最上面,当它显示时就是一种重绘的过程,Windows系统须要从新计算原来它的图形界面,这是一个很是复杂的过程,不过在VB中只需用一个Autoredraw属性就能够作到了,不信的话能够保持该属性为False,看看会怎样?)
Private Sub Form_Load()
Print '空一行
FontUnderline = True
FontSize = 18
FontBold = True
Print , "中国VB联盟成员列表"
FontUnderline = False
FontSize = 10
Print Tab(3); "姓名"; Tab(15); "年龄"; Tab(25); "性别"; Tab(35); "我的简介"
FontBold = False
Print Tab(3); "Mars"; Tab(15); "21"; Tab(25); "男"; Tab(35); "……"
……………
……………
End Sub
更多的内容我将在下一章的用VB做图中向你说明。
固然,在平时用文本框或标签控件显示输出结果也是一种简单的方法,这些和咱们之前讲到的大同小异,也就再也不进行过多的介绍了,下面我来说讲对字符串的格式化方法。
这里要用到Format()函数,它能够对字符串按照指定的形式输出,也能够用作数字、日期的格式化,方法是:
Format (表达式,[格式化表达式])
其中格式化的表达式能够为:“0”,“#”,“.”,“,”,“:”,“$”,以及“()+-E+E-”等等表示,下面我将举一个小例子说明Format的全部功能(奇迹!奇迹!这时在打开VB5竟然非法操做消失了!):
请先创建一个项目文件,在Form1上添加两个框架控件(Frame)和若干按钮、文本框、无线钮和标签控件,具体如图所示:(图7-2-1):
其中有两排八个按钮为Command1,Index从0到7,又有七个无线钮Option1,Index从0到7,下面为了可以使用,请为它们修改Caption属性,如图7-2-2。
而后加入以下代码:
Dim FormatExp As String
Dim ThisTime As Date
Private Sub Command1_Click(Index As Integer)
FormatExp = FormatExp + Command1(Index).Caption
Text1.Text = FormatExp
End Sub
Private Sub Command2_Click()
a$ = Format("1234567890.0987654321", FormatExp)
Label1.Caption = "格式化后的数值:" + a$
Text1.Text = ""
FormatExp = ""
End Sub
Private Sub Form_Load()
ThisTime = Now
Label2.Caption = ThisTime
End Sub
Private Sub Option1_Click(Index As Integer)
Text2.Text = Format(ThisTime, Option1(Index).Caption)
End Sub
其中0和#表明数值显示的位数,不一样的是若是定义格式化表达式的位数若是多于原表达式,则使用0则补0,使用#则省略0;“.”用来指定小数点的位置;其他字符用来分割数值,如“,”。
结果以下图:7-2-3。
关于时间的格式化表达式的定义方法以下表:
格式符
含义
日
d
显示不带0的日期(1-31)
dd
显示带0的日期(01-31)
ddd
以Sun-Sat格式显示日期
dddd
以Sunday-Saturday格式显示日期
ddddd
以年月日标准格式显示日期
月/分钟
m
显示不带0的月,若是后面紧跟h或hh则显示不带0的分
mm
显示带0的月,若是后面紧跟h或hh则显示带0的分
mmm
以Jan-Dec显示月份
mmmm
以January-December显示月份
年
yy
以两位数显示年(00-99)
yyy
以四位数显示年(1900-2040)
好吧,第七章的内容就讲完了,在第八章中我将把VB的简单绘图知识教给你们,下次再见!
*************************************************************88
文章浏览广告
第七章★输出
如今加入 http://14.66.102.214
上一章里,咱们讨论的VB的输人机制,此次咱们来集中讨论VB中信息的输出。
输入和输出是不可分割的,人们输入的最终目的是但愿计算机做出反应,任何一个程序都不可能避开这个问题,因此就算要完成一个最基本的程序,也要有输出的部分,复杂的程序更是如此。
在输入的一章里,咱们学习的第一个输入方法是InputBox,相应的在输出中咱们第一个要接触的是MsgBox(Message Box),和InputBox类似,MsgBox也是简化了的窗体,能够以函数的形式返回操做。它的基本语法是:
MsgBox "显示内容",按钮值,"标题"
经过这个函数能够产生一个标准的Windows消息框,象咱们平时常常接触的“Yes/No”、“OK/Cancel”,“Retry/Abort/Ignore”等等,这些都是在按钮值中设定的,按钮值以下:
数值
含义
0
OK
1
OK和Cancel
2
Abort、Retry和Ignore
3
Yes、No和Cancel
4
Yes和No
5
Retry和Cancel
而且不一样的消息能够搭配不一样的图标,好比帮助文件用问号,通常提示用一个圈里一个I等等,它们也是按钮值的一部分:
数值
含义
16
表示危险
32
表示问号
48
表示警告
64
表示信息
可是如何既显示按钮也显示相应的图标呢,请看一下子下面的例子。前面说过,MsgBox是函数,那么它就会有返回值,当你按下某个按钮就会返回一个数值,以便对用户不一样动做的捕捉,返回值以下:
数值
含义
1
OK
2
Cancel
3
Abort
4
Retry
5
Ignore
6
Yes
7
No
说了这么多,可能你已经不知所措了,不过看过下面的例子后,相信一切都会迎刃而解。
首先创建一个新项目文件,并添加如下对象(见图7-1)――一个Button(Command1),两个ComboBox(Combo1和Combo2),不要对其属性作更多的修改,只需把Command1的Caption改成“Click Me”。这个程序的目的是自由组合上面的按钮值,以显示各类消息框,而且返回按下的按钮,Combo1和Combo2分别用来选择按钮值,首先在Form_Load中初始化程序:
Private Sub Form_Load()
Combo1.AddItem "OK"
Combo1.AddItem "OK and Cancel"
Combo1.AddItem "Abort,Retry and Ignore"
Combo1.AddItem "Yes,No,Cancel"
Combo1.AddItem "Yes,No"
Combo1.AddItem "Retry,Cancel"
Combo1.ListIndex = 0
Combo2.AddItem "危险"
Combo2.AddItem "询问"
Combo2.AddItem "警告"
Combo2.AddItem "信息"
Combo2.ListIndex = 0
End Sub
ComboBox的用法已经在上一章中讨论过,在此再也不赘述,ListIndex属性用来把第一个元素放在选择位置。
可是如何显示须要的按钮和图标呢?很简单,只需把它们相加,好比说要显示OK、Cancel按钮和警告的图标,只需把1和48相加,获得49便可,因而咱们在Command1中填写这样一行:
Private Sub Command1_Click()
message = MsgBox("显示" & Combo1.List(Combo1.ListIndex) & "和" & Combo2.List(Combo2.ListIndex), Combo1.ListIndex + (Combo2.ListIndex + 1) * 16, "消息演示")
End Sub
由于图标值是从16开始的因此要把Combo2的ListIndex加1再乘以16。
小知识:按钮值并不是简单的相加
按钮值并不是简单的相加,咱们知道,在计算机里最终的语言是机器语言,而机器语言是以0和1的二进制表示的,在这里用到的实际上不是相加,而是逻辑操做符“OR”,你知道OR和AND是怎样工做的吗?正如你所知,True And False获得False,而True Or False获得True,这是怎么造成的呢?咱们有时也用0表明False,用1或-1表明True(其实,只要非零均可以表明True),而0和1在二进制中仍是自己,因而True、False的运算就变成的0 和1的运算,咱们能够把And叫作补0运算,把Or叫作补1运算,当用And处理两个二进制数的时候,它们逐位比较,若是相同的位上都是0或都是1则没有变化,而若是一位上是0,另外一位上是1,最后结果上相应的位上就变成0。好比1010(十进制中10)And 1101(十进制中13),最后就得1000(十进制中8),相同的Or亦是如此,只不过在不一样的地方补1。在位数不一样时,前面补0,你能够在VB中试试看。但为何要讲这些呢,缘由是我不想让你们真的觉得这个例子中就是相加,只不过碰巧它们的0和1处在不一样的位置上,而且这个小知识在从此的位图操做和API操做中颇有用处。
下面在来判断用户按下的按钮。
Private Sub Command1_Click()
message = MsgBox("显示" & Combo1.List(Combo1.ListIndex) & "和" & Combo2.List(Combo2.ListIndex), Combo1.ListIndex + (Combo2.ListIndex + 1) * 16, "消息演示")
Select Case message
Case 1
MsgBox "你按下了OK钮"
Case 2
MsgBox "你按下了Cancel按钮"
Case 3
MsgBox "你按下了Abort按钮"
Case 4
MsgBox "你按下了Retry按钮"
Case 5
MsgBox "你按下了Ignore按钮"
Case 6
MsgBox "你按下了Yes按钮"
Case 7
MsgBox "你按下了No按钮"
End Select
End Sub
运行程序,结果如图7-2,7-3。
第七章未完待续
因为时间仓促,此次就只能写这么多了,请你们多多原谅。--Mars
*******************************************************8
文章浏览广告
第六章(3)★输入(3)
如今加入 http://14.66.102.214
首先,我想先对第六章的拖拖拉拉表示歉意,一是由于它实在太长了,二也是由于我本身太懒了,今天写几个字,明天添两笔,以至于写了三次才将它真正完成,还请你们原谅。
好,废话少说,让咱们赶快切入正题。上次咱们讨论了无线钮和检查框的使用方法,相信你已经熟悉,由于它们实在太简单了,如今让咱们继续“输入”的最后几个部分。
滚动条(ScrollBar)在视窗中也是一个不可缺乏的部分,因为面积所限,咱们不得把屏幕上的内容滚来滚去,以显示大量的内容,这就是咱们常常要用到的滚动条。但滚动条除去滚动窗口,还有一个很重要的做用――输入,想一想你常常用到的一些家用电器上调节声音或别的什么东西的滑块,你把它滑向大的一方音量就会增大,而你把它滑向小的一方音量就会减少,或者一个控制左右两个音箱的均衡器,当滑块在正中央的时候,两个音箱的音量是相同的,当你把滑块偏向一方时,音箱的音量有了大小之分,在Windows操做中,咱们也常常要用到相似的效果。
在VB中提供了两个常规的滚动条控件――Vscroll和Hscroll,分别表明垂直的和水平的滚动条,它们只不过是方向不一样而已,而它们的属性,以及会发生的事件都是相同的。,滚动条有几个特殊的属性:
Value属性,当滑块挪动后停在某一位置时,就改变了滚动条的Value属性。
Max和Min属性,用来设置滚动条的最大值和最小值,譬如把Max设为100,把Min设为0时,滚动条的Value就在0到100之间移动,当Max和Min倒置时,滚动条的方向也会相反,也就是说,当Max<Min时,原来Value增长的方向就会变成相反的方向。Max和Min也可设为负值。
SmallChange和LargeChange属性,当鼠标在滚动条两头的箭头上单击时,就会把滚动条向相应的方向挪动一点,这时用到的就是SmallChange属性,当你把它设为1时,每点一下,滚动条的Value就改变1;当鼠标在滚动条上点击时,用到的就是LargeChange,当设为10时,每点击一下滚动条,Value就改变10。
下面咱们看一个实例。
你们都知道,物体之因此会有颜色是由于物体表面的材料吸取了太阳光中的部分色光,而还有部分色光没被吸取而被反射回来,它就成了咱们看到的颜色,黑色就是物体吸取了全部的太阳光的全部色光,没有反射颜色,因此在咱们看来是黑的,而当物体反射了全部的色光,咱们看到的就是白色。在计算机中,颜色的表示就是象咱们刚才描述的样子,它把颜色分为红(R)、绿(G)和蓝(B)。众所周知,计算机的机器语言是使用二进制表示的,为了方便查阅咱们看到的每每是十六进制代码,一个字节包括两位十六进制数字,从0-255(十六进制表示0-FF),而一个字节是由八位二进制数值表示(2^8,2的8次方),计算机中用分别用一个字节,也就是八位表示一种颜色,和在一块儿也就是三个字节(24位)表示全部的颜色,这就是咱们平时常说的24位真彩,它一共能够组成256×256×256(2^24)种颜色,对于咱们的肉眼,是根本分辨不出来相邻两个不一样的颜色的,好比用FFFFFF表示白色,就好象咱们刚才说的物体反射了全部的色光,相反的能够用000000表示黑色,它吸取了全部的色光,还能够用FF0000表示红色,在HTML语言中就是这样表示颜色的。
小知识:如今你能够根据你的显卡的显存来计算一下显卡在24位真彩下能够以多大的分辨率显示,计算是这样的,用显存的字节数÷3(24位色)=显示器宽的象素数×显示器高的象素数,宽的象素数:高的象素数=4:3,好比4兆显存,就应该是4×1024×1024÷3=1365×1024。
在下面的小程序中,咱们经过三个滚动条分别表明R、G、B,滚动滚动条,将在右边的图片框中显示相应的颜色,而且在下面的文本框中显示颜色的十六进制数值。
如今,新建一个项目文件,在Form1中如图6-12布局控件,各控件属性以下表:
HsrollBar
Name Hscroll1
Index 0、1、2
(共同属性)
Max 255
Min 0
LargeChange 10
SmallChange 1
Label
Name Label1
Index 0、1、2
Index 0 Caption “红:”
Index 1 Caption “绿:”
Index 2 Caption “蓝:”
Label
Name Label2
Caption “颜色值”
TextBox
Name Text1
Text “”
PictureBox
Name Picuture1
为了把十进制数值换成十六进制数值,要使用一个叫作Hex()的函数,它把十进制数值转化为十六进制的字符,但对于只有一位的十六进制字符,这个函数并不在高位补零,为了视觉上的正确,我设计了一个小函数帮助它给一位的十六进制字符补零.
程序代码很简单,见下:
Dim RedStr, GreenStr, BlueStr As String’RGB的字符
Dim RedNum, GreenNum, BlueNum As Integer’RGB的数值
Function GetColorValue() As String
‘得到输入值
RedNum = HScroll1(0).Value
GreenNum = HScroll1(1).Value
BlueNum = HScroll1(2).Value
RedStr = Hex(RedNum)
If Len(RedStr) < 2 Then RedStr = "0" + RedStr’补零
GreenStr = Hex(GreenNum)
If Len(GreenStr) < 2 Then GreenStr = "0" + GreenStr
BlueStr = Hex(BlueNum)
If Len(BlueStr) < 2 Then BlueStr = "0" + BlueStr
GetColorValue = RedStr + GreenStr + BlueStr’合并
End Function
Private Sub Form_Load()
‘初始化程序
Text1.Text = GetColorValue
Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)'RGB函数返回颜色值
End Sub
Private Sub HScroll1_Change(Index As Integer)
‘当滚动条被改变时
Text1.Text = GetColorValue
Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)
End Sub
运行如图6-13。
列表框(ListBox)和复合列表框(ComboBox)也是咱们常常见到的视窗元素,咱们从它所列示的条目中选出所需的,两种列表框只是在外观上略有不一样,但从本质和操做方法来讲它们是很相象的,它们也有一些特殊的属性:
List属性,你能够利于该属性象列表框或复合列表框中添加条目,但也能够在程序设计中经过AddItem方法添加。
ListCount属性,返回列表框或复合列表框中条目的数目。
ListIndex属性,表示列表框或复合列表框的第几项条目。(从0到ListCount-1)
Sorted属性,能够经过该属性对列表框或复合列表框中的条目根据字母顺序排序。
MultiSelect属性,0表示不能多选,1表示简单多选,2表示宽展多选,仅限于列表框。
Columns属性,表示条目是以一列显示仍是两列显示,仅限于列表框。
Style属性:表示列表框或复合列表框以何种风格显示,两者参数不一样。
举两个简单的例子。
例子一,创建一个新项目文件,在Form1上添加一个List控件,调整适当的尺寸,无需改变任何属性。填写如下代码。
Private Sub Form_Load()
With List1
.AddItem "0-Default"
.AddItem "1-Arrow"
.AddItem "2-Cross"
.AddItem "3-I-Beam"
.AddItem "4-Icon"
.AddItem "5-Size"
.AddItem "6-Size NE SW"
.AddItem "7-Size NS"
.AddItem "8-Size NW SE"
.AddItem "9-Size WE"
.AddItem "10-Up Arrow"
.AddItem "11-Hourglass"
.AddItem "12-NoDrag"
.AddItem "13-Arrow And Hourglass"
.AddItem "14-Arrow And Question"
.AddItem "15-Size All"
End With
End Sub
Private Sub List1_Click()
MousePointer = List1.ListIndex’这里的MousePointer是窗体全局内的属性
End Sub
当你点在不一样项上面鼠标指针也会随着改变,如图6-14。
AddItem方法语法以下:
ListObject “字符串”,数值
字符串后的数值能够指定条目加入在第几个条目的位置上,若是没有的话,添加项将逐次排下去。
下面举一个复合列表框的例子,例子经过选择复合列表框中的选项来改变文本框的字体。请新建一个项目文件,在窗体中添加一个ComboBox(Combo1)和一个TextBox(Text1),添加以下代码。
Private Sub Combo1_Click()
Text1.FontName = Combo1.List(Combo1.ListIndex)
End Sub
Private Sub Form_Load()
With Combo1
.AddItem "宋体"
.AddItem "隶书"
.AddItem "黑体"
.AddItem "楷体"
.ListIndex = 0'把第一个条目做为初始项
End With
Text1.FontSize = 30’放大字体
Text1.FontName = Combo1.List(0)’初始字体为“宋体”
End Sub
************************************88
文章浏览广告
第六章(2)★输入(2)
如今加入 http://14.66.102.214
在继续上面的内容时,我想再回顾和强调几个在字符串操做中常常函数:
先是几个已经接触过的,Mid(),Asc(),Len(),它们的语法分别是:
Mid(字符型,起始字符,长度)
返回子字符串,若是从字符串的第一个字符取起,起始字符为1,依此类推。
Asc(字符型)
返回数值,若是参数不是一个字符,而是字符串(多个字符),将返回参数的第一个字符ASCII值。
Len(字符型)
返回字符串的长度。
下面我再为你解释几个新的函数:
Left(字符串,长度)
将返回字符型,从字符串的第一个字符向左取字符串,与之相对应的是Right(),它将从字符串的最后一个字符向右取字符串。
Chr(数值型)
该数值范围从0-255,返回字符型,如Chr(65)可返回字符“A”,这样能够输入一些用键盘没法输入的字符。
Str(数值型)
该函数把数值型转换为字符型,也许你以为数值“123”和字符串“123”没什么区别,但在内存中一个ASCII字符是占一个字节,也就是说字符串“123”占3个字节,而当数值“123”是整型时,它占两个字符,当它是长整型时,占4个字节。与之向对应的是Val(数值型),它把数值型转换为字符型。
上面的函数都是之后要常常用到的,请将它们熟悉。
上次讲到文本框的用处,还有意思吗?你是否能把上次的程序稍稍变更一下,来计算出输入的单词数,提示一下,单词与单词之间是用空格分隔开的。
咱们继续下面的内容。
上次说到,输入不只仅是向文本框输入字符,凡是从外界向程序传递数据均可以叫作输入,咱们一一说明白。
无线钮,记得咱们曾在第一章中完成过咱们的第一个程序――“Hello World!”它就是一种输入的方法,在设计VB程序时能够经过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。它由于很象无线电收音机上的按钮于是得名无线钮。若是要在一个窗体内放置多组无线钮必须用Frame控件把它们区分开来。下面咱们在来完成一个例子,顺便熟悉一下另外两个处理字符串的函数――LTrim()和Rtrim(),它们分别用来删除字符串左边的空格和右边的空格,让咱们看看它们是如何工做的。
程序窗体如图6-8,因为窗体比较简单,无需修改更多的属性,一共有三个文本框(Text1到3),分别用来显示输入字符,显示把空格换成星号的字符,和通过处理的字符,还有三个无线钮(Option1到3),要修改的只有Caption属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。由于空格在咱们在文本框中没法看到空格,因此咱们经过一个称做AddStar的函数把原有字符串中的空格转换为星号,使咱们可以看到函数的效果。下面在程序中添加代码,首先在General中声明窗体级变量:
Dim LTrimmedword$, RTrimmedword$ '删除左边空格和右边空格后的字符串
Dim LRTrimmedword$ '删除两边空格后的字符串
而后,咱们经过一个叫作addstar的函数为字符串加上星号,之前曾说过函数与过程的分别,函数会返回一个函数值,因此addstar也就至关于一个变量,其实这很好理解,就象中学代数中的函数,函数就至关于变量Y,而函数中的参数则至关于自变量X,固然可能有不少自变量X1、X2……请原谅,我并不想在这里上数学课,由于我厌恶那玩意儿,特别是上了大学以后,好在大二之后就不再会有数学课了,哈哈……
Function addstar(tempword As String) As String
Dim charindex%
Dim pasteword$ '加星号后的字符串
For charindex = 1 To Len(tempword)
If Mid(tempword, charindex, 1) = " " Then '若是字符为空格
pasteword = pasteword + "*"
Else: pasteword = pasteword + Mid(tempword, charindex, 1)
End If
Next
addstar = pasteword '返回函数值
End Function
下面的代码很简单,而且我为它作了注释,就再也不一一解释了,我只想简要的提几句,Ltrim和Rtrim只有一个参数(字符型),另外下面用到了焦点事件,咱们曾在第三章中介绍过,当Text1获得焦点(GotFocus)时,清空全部的文本框,当它失去焦点(LostFocus)时,对字符进行addstar而且在Text2中显示。
Private Sub Text1_GotFocus() '但焦点于Text1
'清除全部文本框中的字符
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
Private Sub Text1_LostFocus()
Dim Origionword As String
Origionword = Text1.Text
Text2.Text = addstar(Origionword)
LTrimmedword = addstar(LTrim(Origionword))
RTrimmedword = addstar(RTrim(Origionword))
LRTrimmedword = LTrim(RTrim(Origionword))
End Sub
Private Sub Option1_Click()
Text3.Text = LTrimmedword '显示删除左空格后的字符串
End Sub
Private Sub Option2_Click()
Text3.Text = RTrimmedword '显示删除右空格后的字符串
End Sub
Private Sub Option3_Click()
Text3.Text = LRTrimmedword '显示删除两边空格后的字符串
End Sub
最后结果如图6-9。
与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则能够有多个选择,就象在添表时,性别那项只能有一个选择,而在描述你之前的职业时能够有学生、程序员、家庭教师或者什么,总之有不少选择,下面咱们举一个简单的例子加以说明。
假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机状况,你就须要一个调查表,为了使这个调查表不止枯燥,能够在这个程序中加入一些图形。新建一个项目文件,窗体布局如图6-10。
程序很简单,一共有两个框架(Frame1和Frame2),它们的Caption分别为“选择你的计算机拥有的配置”和“这是你的计算机系统”,在Frame1有四个检查框(Check1到Check4),Caption分别为“网络系统”、“鼠标”、“密码保护”和“电子邮件”,另把Check4的Enabled属性改成False,使其无效;在Frame2中放置四个图片框(Picture1到Picture4)与四个检查框向对应,请把全部图片框的BorderStyle属性设为0(无边框),它们的Picture属性请根据上图,在存放图标的目录中找到相对的图标。下面是程序代码:
Private Sub Check1_Click()
If Check1.Value Then
Check4.Enabled = -1
Picture1.Visible = -1
Else: Check4.Enabled = 0
Picture1.Visible = 0
Check4.Value = 0
Picture4.Visible = 0
End If
End Sub
Private Sub Check2_Click()
If Check2.Value Then
Picture2.Visible = -1
Else: Picture2.Visible = 0
End If
End Sub
Private Sub Check3_Click()
If Check3.Value Then
Picture3.Visible = -1
Else: Picture3.Visible = 0
End If
End Sub
Private Sub Check4_Click()
If Check4.Value Then
Picture4.Visible = -1
Else: Picture4.Visible = 0
End If
End Sub
这个程序比咱们见过的任何程序都简单,就再也不作说明。
(第六章 未完)
在继续上面的内容时,我想再回顾和强调几个在字符串操做中常常函数:
先是几个已经接触过的,Mid(),Asc(),Len(),它们的语法分别是:
Mid(字符型,起始字符,长度)
返回子字符串,若是从字符串的第一个字符取起,起始字符为1,依此类推。
Asc(字符型)
返回数值,若是参数不是一个字符,而是字符串(多个字符),将返回参数的第一个字符ASCII值。
Len(字符型)
返回字符串的长度。
下面我再为你解释几个新的函数:
Left(字符串,长度)
将返回字符型,从字符串的第一个字符向左取字符串,与之相对应的是Right(),它将从字符串的最后一个字符向右取字符串。
Chr(数值型)
该数值范围从0-255,返回字符型,如Chr(65)可返回字符“A”,这样能够输入一些用键盘没法输入的字符。
Str(数值型)
该函数把数值型转换为字符型,也许你以为数值“123”和字符串“123”没什么区别,但在内存中一个ASCII字符是占一个字节,也就是说字符串“123”占3个字节,而当数值“123”是整型时,它占两个字符,当它是长整型时,占4个字节。与之向对应的是Val(数值型),它把数值型转换为字符型。
上面的函数都是之后要常常用到的,请将它们熟悉。
上次讲到文本框的用处,还有意思吗?你是否能把上次的程序稍稍变更一下,来计算出输入的单词数,提示一下,单词与单词之间是用空格分隔开的。
咱们继续下面的内容。
上次说到,输入不只仅是向文本框输入字符,凡是从外界向程序传递数据均可以叫作输入,咱们一一说明白。
无线钮,记得咱们曾在第一章中完成过咱们的第一个程序――“Hello World!”它就是一种输入的方法,在设计VB程序时能够经过一组这样的无线钮,它们之间互相排斥,也就是说,只能有一个按钮被选中。它由于很象无线电收音机上的按钮于是得名无线钮。若是要在一个窗体内放置多组无线钮必须用Frame控件把它们区分开来。下面咱们在来完成一个例子,顺便熟悉一下另外两个处理字符串的函数――LTrim()和Rtrim(),它们分别用来删除字符串左边的空格和右边的空格,让咱们看看它们是如何工做的。
程序窗体如图6-8,因为窗体比较简单,无需修改更多的属性,一共有三个文本框(Text1到3),分别用来显示输入字符,显示把空格换成星号的字符,和通过处理的字符,还有三个无线钮(Option1到3),要修改的只有Caption属性,分别是“删除左边的空格”、“删除右边的空格”和“删除两边的空格”。由于空格在咱们在文本框中没法看到空格,因此咱们经过一个称做AddStar的函数把原有字符串中的空格转换为星号,使咱们可以看到函数的效果。下面在程序中添加代码,首先在General中声明窗体级变量:
Dim LTrimmedword$, RTrimmedword$ '删除左边空格和右边空格后的字符串
Dim LRTrimmedword$ '删除两边空格后的字符串
而后,咱们经过一个叫作addstar的函数为字符串加上星号,之前曾说过函数与过程的分别,函数会返回一个函数值,因此addstar也就至关于一个变量,其实这很好理解,就象中学代数中的函数,函数就至关于变量Y,而函数中的参数则至关于自变量X,固然可能有不少自变量X1、X2……请原谅,我并不想在这里上数学课,由于我厌恶那玩意儿,特别是上了大学以后,好在大二之后就不再会有数学课了,哈哈……
Function addstar(tempword As String) As String
Dim charindex%
Dim pasteword$ '加星号后的字符串
For charindex = 1 To Len(tempword)
If Mid(tempword, charindex, 1) = " " Then '若是字符为空格
pasteword = pasteword + "*"
Else: pasteword = pasteword + Mid(tempword, charindex, 1)
End If
Next
addstar = pasteword '返回函数值
End Function
下面的代码很简单,而且我为它作了注释,就再也不一一解释了,我只想简要的提几句,Ltrim和Rtrim只有一个参数(字符型),另外下面用到了焦点事件,咱们曾在第三章中介绍过,当Text1获得焦点(GotFocus)时,清空全部的文本框,当它失去焦点(LostFocus)时,对字符进行addstar而且在Text2中显示。
Private Sub Text1_GotFocus() '但焦点于Text1
'清除全部文本框中的字符
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
Private Sub Text1_LostFocus()
Dim Origionword As String
Origionword = Text1.Text
Text2.Text = addstar(Origionword)
LTrimmedword = addstar(LTrim(Origionword))
RTrimmedword = addstar(RTrim(Origionword))
LRTrimmedword = LTrim(RTrim(Origionword))
End Sub
Private Sub Option1_Click()
Text3.Text = LTrimmedword '显示删除左空格后的字符串
End Sub
Private Sub Option2_Click()
Text3.Text = RTrimmedword '显示删除右空格后的字符串
End Sub
Private Sub Option3_Click()
Text3.Text = LRTrimmedword '显示删除两边空格后的字符串
End Sub
最后结果如图6-9。
与无线钮相对的是检查框,在同一范围内一组无线钮只能有一个被选中,而检查框则能够有多个选择,就象在添表时,性别那项只能有一个选择,而在描述你之前的职业时能够有学生、程序员、家庭教师或者什么,总之有不少选择,下面咱们举一个简单的例子加以说明。
假设编写了一个共享软件,在让用户注册的时候你想知道你的用户使用的计算机状况,你就须要一个调查表,为了使这个调查表不止枯燥,能够在这个程序中加入一些图形。新建一个项目文件,窗体布局如图6-10。
程序很简单,一共有两个框架(Frame1和Frame2),它们的Caption分别为“选择你的计算机拥有的配置”和“这是你的计算机系统”,在Frame1有四个检查框(Check1到Check4),Caption分别为“网络系统”、“鼠标”、“密码保护”和“电子邮件”,另把Check4的Enabled属性改成False,使其无效;在Frame2中放置四个图片框(Picture1到Picture4)与四个检查框向对应,请把全部图片框的BorderStyle属性设为0(无边框),它们的Picture属性请根据上图,在存放图标的目录中找到相对的图标。下面是程序代码:
Private Sub Check1_Click()
If Check1.Value Then
Check4.Enabled = -1
Picture1.Visible = -1
Else: Check4.Enabled = 0
Picture1.Visible = 0
Check4.Value = 0
Picture4.Visible = 0
End If
End Sub
Private Sub Check2_Click()
If Check2.Value Then
Picture2.Visible = -1
Else: Picture2.Visible = 0
End If
End Sub
Private Sub Check3_Click()
If Check3.Value Then
Picture3.Visible = -1
Else: Picture3.Visible = 0
End If
End Sub
Private Sub Check4_Click()
If Check4.Value Then
Picture4.Visible = -1
Else: Picture4.Visible = 0
End If
End Sub
*****************************************************8
文章浏览广告
第六章(1)★输入
如今加入 http://14.66.102.214
咱们为何要设计计算机程序呢,固然是为了计算机能为咱们完成工做,可是要完成不一样的任务,咱们就必须对计算机下达命令,而后计算机在把信息返馈回来――任务是否完成。以上就是所谓的人机对话或交互功能,尤为是在Windows操做里咱们须要进行更多的输入工做,咱们须要填写各类各样的表格,设置程序的重要参数,把数据输入给计算机,再又它完成既定的工做就是今天咱们本章要重点讨论的问题――在VB中如何创建完整的输入机制。
在VB中提供了一个函数InputBox能帮助咱们创建一个最简单的输入窗体,语法以下:
InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])
该函数返回一个字符串表达式,其参数含义为:(“[]”表示可缺省)
prompt――字符串表达式,最大长度为1024字符,窗体上的提示部分。
Title――字符串表达式,显示标题栏里的文本。
Default――字符串表达式,窗体中文本框的缺省值。
xpos,ypos――数值表达式,以Twips为单位指定窗体出如今屏幕上的位置。
helpfile――字符串表达式,是帮助文件的完整路径。
Context――数值表达式,指定适合的帮助主题。
可能你看了上面的说明并不明白,那么下面咱们就用Input语句完成一个最简单的程序。
小知识:屏幕坐标
在计算机的屏幕上也有一个相似于咱们在中学里经常使用到的直角坐标系,之不过它的原点不在左下,而是在屏幕的右上角,屏幕的最右上方坐标为(0,0),它的横坐标和咱们的习惯是一致的,而纵坐标则是越向下越大,不只是屏幕,全部的对象里都是同样,须要记清。见图6-1
新建一个项目(project),在Form_load里填写一行代码:
a$ = InputBox("举荐你最欣赏的网站", "最佳网站投票", "VB小驿")’不算无耻吧?:->
按下F5运行程序,在Form1出现以前先会弹出一个输入对话框,如图6-2。这时,不管你按下OK仍是Cancel都是没有区别的,由于咱们并无对输入数据进行处理,下面咱们完成一个更加复杂些的程序。
新建一个项目文件,把窗口布局成相似于图6-3的结构,各对象属性以下表:
Form1
Caption “最佳网站投票演示”
BorderStyle 3’不可调整大小
ControlBox 0’False
Frame1
Caption “输入框属性“
Label1
Autosize 1’True
Index 0至5
0至5 Caption “提示语句”
“标题”
“缺省网站”
“X坐标”
“Y坐标”
“”
Index 4 Enabled False
Index 4 Enabled False
Text1
Text “”’(空字符串)
Index 0至4