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