您的位置:寻梦网首页编程乐园VB 编程乐园VB问题全功略

VB问题全功略(17)

上一页(17)下一页

81、我已经知道 "电脑名称" 及 "LoginUser" 的抓法了, 我可以将电脑名称改成 LoginUser 吗?
82、反向思考---怎样让程序跑慢一点?
83、《打砖块》一颗在画面上跳动碰撞的小球
84、为什么有的程序的画面或控制项总是闪个不停,如何避免?
85、计算二个时间的时间差

81、我已经知道 "电脑名称" 及 "LoginUser" 的抓法了, 我可以将电脑名称改成 LoginUser 吗?

可以的, 请在声明区中放入以下声明:

Private Declare Function SetComputerName Lib "kernel32" Alias "SetComputerNameA" (ByVal lpComputerName As String) As Long 

程序中要使用时只要直接 call 即可. 例如: 要将电脑名称改成员工编号 "RT000588"

Private Sub Command1_Click()
Dim res As Long
res = SetComputerName("RT000588")
If res <> 0 Then
MsgBox "成功!!!"
Else
MsgBox "有问题!!!"
End If
End Sub

虽然已经更改成功,但并不会马上有作用,所以在网路上的芳邻中,还会是旧的电脑名称,一直要等到重新开机之后才有作用。

82、反向思考---怎样让程序跑慢一点?

大部份时间,我们都希望我们自己开发的程序跑得越快越好,但是有些状况,我们却希望它能够稍微停一下,等待某一个返回值或某一个动作做完了,才继续执行下一个指令,可是偏偏 VB 没有提供这样的指令,我要怎样延迟一个VB程序呢   

在声明区中加入以下声明:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

在事件中只要 call 它即可

Call Sleep(1000) '1000代表延迟1秒

不过很抱歉,它只在 32位元中才有提供, 所以要在 VB4-32 位元以上才可使用 !!!

83、《打砖块》一颗在画面上跳动碰撞的小球

这个范例加以引申,就可以做出像一样的游戏!

'在 Form 中放一个 Shape,Shape 属性设成 3-圆形,长宽设成 60
'在 Form 中放一个 Timer,Interval 属性设成 48
'声明二个 Form Level 或 Global 变数 (此范例声明在 Form 中)
Dim horizan As Integer
Dim vertical As Integer

'在 Form_Load 设定每次水平或垂直移动的距离
Private Sub Form_Load()
horizan = 50 '水平移动的距离
vertical = 50 '垂直移动的距离
End Sub

'移动小球并检查是否超出四个边界 ? 若超过则改变方向.
'注意: Me.Width 包含 Form 左右二边 Border 的宽度
' Me.Height 包含 Form 上方 TitleBar 的高度及下方 Border 的高度
Private Sub Timer1_Timer()
ball.Move ball.Left + horizan, ball.Top + vertical
If ball.Top <= 0 Then vertical = -vertical
If ball.Top + ball.Height >= Me.Height - 420 Then vertical = -vertical
'扣除 420 是指 Form 上方 TitleBar 的高度 + 下方 Border 的高度
If ball.Left <= 0 Then horizan = -horizan
If ball.Left + ball.Width >= Me.Width - 100 Then horizan = -horizan
'扣除 120 是指 Form 左右二边 Border 的宽度
End Sub

如果是固定的 Form,以上的程序代码就已经完成了,但是如果 Form 的大小是可以调整的话,当您调整 Form 的大小后,小球的位置可能有一段时间会跑到荧幕外,要预防这种情形,必须再加上以下的程序代码:

Private Sub Form_Resize()
If ball.Top <= 0 Then
ball.Top = -25
vertical = -vertical
End If
If ball.Top >= (Me.Height - 420) Then
ball.Top = (Me.Height - 445) - ball.Height
vertical = -vertical
End If
If ball.Left <= 0 Then
ball.Left = -25
horizan = -horizan
End If
If ball.Left >= (Me.Width - 100) Then
ball.Left = (Me.Width - 125) - ball.Width
horizan = -horizan
End If
End Sub

运用时要做调整,主要就是调整以下二个因素:
1、每次水平或垂直移动的距离,就是 horizan / vertical 
2、Timer 的间距,就是 Timer 的 Interval

注:其实要完整一点的话,还需要用 API 去抓出 Form 上方 TitleBar 的高度四方 Border 的宽度。

84、为什么有的程序的画面或控制项总是闪个不停,如何避免?

原因很多,但最主要的原因是 '不停地改变一些可能不需要改变的控制项属性',这些属性通常是一些会造成控制项 Repaint 的属性,例如:Enabled, Visible, Contents 及 Text。如果某一个物件的属性已经是您要设定的值,那就不要再设定一次,如此便会大大降低控制项闪动的频率。例如:

If Not Command1.Enabled
Then Command1.Enabled=True
End If 

以下是一个完成的 Module:

Sub SetEnabled (ctrlIn as Control, bSetting as Integer)
If ctrlIn.Enabled <> bSetting Then
ctrlIn.Enabled=bSetting
End If
End Sub

85、计算二个时间的时间差

VB 有提供一些好用的日期时间计算函数,但是没有一个计算时间差的功能,有些人会说有的,是 DateDiff,但是,DateDiff 功能却不够,您可以算出二个时间所差的总日数、总时数或总秒数,但您算不出是相差几天几小时几分钟又几秒钟!

以下这个模组的功能就是计算二个时间之时间差:

Function Convtime(date1 As Date, date2 As Date) As String
'
'功能 : 计算二个时间的时间差
'
'参数 : date1 是较早的时间, Variant (Date)。
' date2 是较晚的时间, Variant (Date)。
'
'若要计算两个日期之时间差,计算顺序是从 date1 到 date2
'
'返回值 : 时间差的组合字串, 例如 2年21天13小时5分钟3秒
'
Dim wsecond As Long '总秒数 / 剩余秒数
Dim wminute As Long '总分钟数 / 剩余分钟数
Dim whour As Long '总时数 / 剩余时数
Dim wday As Long '总天数 / 剩余天数
Dim wyear As Long '总年数

wsecond = DateDiff("s", date1, date2) '总秒数
If wsecond > 60 Then
wminute = wsecond \ 60 '总分钟数
wsecond = wsecond Mod 60 '计算剩余秒数
End If
If wminute > 60 Then
whour = wminute \ 60 '总时数
wminute = wminute Mod 60 '计算剩余分钟数
End If
If whour > 24 Then
wday = whour \ 24 '总天数
whour = whour Mod 24 '计算剩余时数
End If
If wday > 365 Then
wyear = wday \ 365 '总年数
wday = wday Mod 365 '计算剩余天数
End If

'拼凑计算结果字串
If wyear > 0 Then Convtime = Convtime & wyear & "年"
If wday > 0 Then Convtime = Convtime & wday & "天"
If whour > 0 Then Convtime = Convtime & whour & "小时"
If wminute > 0 Then Convtime = Convtime & wminute & "分钟"
If wsecond > 0 Then Convtime = Convtime & wsecond & "秒"
End Function

当然,或许您要的结果不是我算出的字串,可能要算几周!但是只要将以上的程序稍作修改,就可以得到您要的结果!

上一页(17)下一页