VB6控件加载卡死的问题
一个翻翻乐游戏的加载过程
[code=vb]Const BaseTop = 1080
Const BaseLeft = 360
Const StepTop = 735
Const StepLeft = 735
Private Declare Function GetTickCount Lib "kernel32 " () As Long
Public Sub LoadCmd(ByVal row As Integer, ByVal col As Integer, ByRef num As Integer)
Load frmGame.cmdCard(num)
With frmGame.cmdCard(num)
.Top = BaseTop + StepTop * row
.Left = BaseLeft + StepLeft * col
.Height = StepLeft
.Width = StepLeft
End With
End Sub
'等待过去多长时间,以毫秒计
Public Sub TimeDelay(DT As Long)
Dim TT As Long
TT = GetTickCount()
Do
DoEvents
If GetTickCount - TT < 0 Then TT = GetTickCount
If gblnCancel = True Then Exit Do '用户单击了取消
Loop Until GetTickCount - TT >= DT
End Sub
Private Sub Form_Paint()
On Error Resume Next
If painted = False Then
cmdRestart.Enabled = False
cmdHelp.Enabled = False
cmdLook.Enabled = False
remain = 100
Progress.Value = remain
lblScore = score
lblWrong = wrong
Dim arr()
arr = Array("剩余卡片:", "剩余时间:", "分数:", "错误计数器:")
'清除图片,减少内存占用
cmdCard(100).Picture = Nothing
Dim cmdNo As Integer, i As Integer, j As Integer
For i = 0 To 3
lblLabels(i).Caption = arr(i)
Next
For i = 0 To 9
For j = 0 To 9
LoadCmd i, j, cmdNo
cmdNo = cmdNo + 1
Next j
Next i
'不用删除原来的标准按钮,只需设置Visible = False 即可
Dim Rand1%, Rand2%, Rand3%
Dim Total%
Randomize
Do While Total < 100
Rand1 = Int(Rnd * 25) + 1 '随机生成一个图片号码
Do
Rand2 = Int(Rnd * 10) '随机生成行号
Rand3 = Int(Rnd * 10) '随机生成列号
Loop Until Pict(Rand2 * 10 + Rand3) = 0
Pict(Rand2 * 10 + Rand3) = Rand1
cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
Do
Rand2 = Int(Rnd * 10) '随机生成行号
Rand3 = Int(Rnd * 10) '随机生成列号
Loop Until Pict(Rand2 * 10 + Rand3) = 0
Pict(Rand2 * 10 + Rand3) = Rand1
cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
Total = Total + 2
Loop
[color=#FF0000]'标记[/color]
For i = 0 To 99
'显示按钮
cmdCard(i).Visible = True
cmdCard(i).Enabled = False
TimeDelay 15
Next i
For t = 10 To 1 Step -1
lblTime = t
TimeDelay 1000
Next t
For i = 0 To 99
cmdCard(i).Enabled = True
Next i
painted = True '设置标记
cmdRestart.Enabled = True
cmdHelp.Enabled = True
cmdLook.Enabled = True
For i = 0 To 99
cmdCard(i).Picture = Nothing
Next
End If
Exit Sub
End Sub[/code]
为什么每次运行时第一次是好的,第二次到标记处就卡了呢?
这段程序还有一个Bug就是在倒计时10秒的时候窗体被其他窗体挡住会停止计时,请帮忙解决一下
[解决办法]
Do While Total < 100
Rand1 = Int(Rnd * 25) + 1 '随机生成一个图片号码
Do
Rand2 = Int(Rnd * 10) '随机生成行号
Rand3 = Int(Rnd * 10) '随机生成列号
Loop Until Pict(Rand2 * 10 + Rand3) = 0
Pict(Rand2 * 10 + Rand3) = Rand1
cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
Do
Rand2 = Int(Rnd * 10) '随机生成行号
Rand3 = Int(Rnd * 10) '随机生成列号
Loop Until Pict(Rand2 * 10 + Rand3) = 0
Pict(Rand2 * 10 + Rand3) = Rand1
cmdCard(Rand2 * 10 + Rand3).Picture = LoadPicture(App.Path + "\" + Trim(Str$(Rand1)) + ".jpg")
Total = Total + 2
Loop
这个循环算法有问题,会造成死循环。