下面的程序是加上Doevents,但这不是根本,因为你程序很慢,所以怎么改都是很慢的。 你可以使用ImageList控件,在程序开始时把图片全部都读入内存,这样可能快一些.For j = 1 To 3 Do Data1.Recordset.MoveLast con = Data1.Recordset("number") + 1 LG = Int(Rnd * con)
Private Sub Timer1_Timer() If intz = 1 Then For j = 1 To 3 Do Data1.Recordset.MoveLast con = Data1.Recordset("number") + 1 LG = Int(Rnd * con) Data1.Recordset.MoveFirst Data1.Recordset.Index = "0165" Data1.Recordset.Seek "=", LG, 0 Loop While Data1.Recordset.NoMatch = True Call fact(Data1.Recordset("card"), Int(j)) Next End If End Sub ---------------------------------------------- 在你的这段代码里面,可能运行速度很慢。特别是数据库操作方面的。 为什么不把它转换为SQL语句呢?
搞了半天,你又卡在了图片预加载上面啦? 其实这个十分简单,根本不用ImageList控件,只要用一个Object数组就可以啦!比如:你有0 - 9 共十张图片。定义一个Form全局的Object数组: Private Pics(9) As Object在启动的时候加载这十张图片(0.gif - 9.gif): Private Sub Form_Load() Dim i as integer for i=0 to 9 Set Pics(i)=LoadPicture("c:\165彩票\pic\" & cint(i) & ".gif") Next End Sub 这样就实现了十张图片的预加载。 使用的时候: Set Images(i)=Pics(n) '这里n代表要显示的数字0 - 9 是不是很简单啊?你哪200分在那里?给我吧?
什么意思?
怎么做?
谢谢!
你可以使用ImageList控件,在程序开始时把图片全部都读入内存,这样可能快一些.For j = 1 To 3
Do
Data1.Recordset.MoveLast
con = Data1.Recordset("number") + 1
LG = Int(Rnd * con)
Data1.Recordset.MoveFirst
Data1.Recordset.Index = "0165" Data1.Recordset.Seek "=", LG, 0
Doevents'这里加上Doevents
Loop While Data1.Recordset.NoMatch = True
Call fact(Data1.Recordset("card"), Int(j))Next
请问还有什么方法?
请问我还应该怎样改进我的程序
惭愧呀,写出这么慢的程序!
If intz = 1 Then
For j = 1 To 3
Do
Data1.Recordset.MoveLast
con = Data1.Recordset("number") + 1
LG = Int(Rnd * con)
Data1.Recordset.MoveFirst
Data1.Recordset.Index = "0165"
Data1.Recordset.Seek "=", LG, 0
Loop While Data1.Recordset.NoMatch = True
Call fact(Data1.Recordset("card"), Int(j))
Next
End If
End Sub
----------------------------------------------
在你的这段代码里面,可能运行速度很慢。特别是数据库操作方面的。
为什么不把它转换为SQL语句呢?
不要每个循环都先movelast再movefirst,这当然会很慢!
从磁盘中加载图片是很费时的,这是瓶颈。
在程序启动的时候把所有的图片加载到内存中。
然后以后每次都取内存中的图片进行显示。
加DoEvents并不会加快速度,相反会稍微降低速度,但是DoEvents还是很有用的,因为可以让窗口及时画出新的图片。
这里的DoEvents没有必要放在循环之中,因为三张图片是一起显示的,所以应该放在循环之外,这可以稍微提高性能(但不明显),其实如果Timer控件的Interval足够大(>图片加载绘制时间),可以不使用DoEvents,如果你采用我所说的预先加载图片的方法,那么这里的加载时间为0,而绘制时间也非常的短,因为只有3张图片时间因该小于Interval,所以DoEvents可以去掉。
另外,还有那个随机抽取的FOR循环可以进成:
For j = 1 To 3
Do
con = Data1.Recordset.RecordCount
LG = Int(Rnd * con)
Data1.Recordset.Move LG, AdBookFirst
Call fact(Data1.Recordset("card"), Int(j))
Next
这下就只剩下一重循环了。
试试看,够快了吗?重点在图片的预加载。
首先预加载图片
然后在随机抽取中先随机取三个数,再用SQL查询出三条记录,最后显示,这样应该够快了
对速度确实有一定的改善,
我觉得还是预加载图片能够改善速度,
但是我不会做呀,那位给个范例好吗?
我是在数据库取出三条记录中的“card”字段
并把每一位数都用一幅gif图片显示出来
如在窗口中显示
30005677854788 '每一位数字都是一幅图片,例如8就是8.gif'
20003453346453
30005395949545
怎样才能实现预加载图片呢?
帮帮我,我很急呀!!谢谢!!!
我给你来优化
使用image 控件数组 调用imagelist预加载的图片呢???
但是怎样可以把他与image相关联,调用加载的图片??
例如
我在imagelist中加载1.gif,2.gif......9.gif,a.gif,j.gif,m.gif
但是怎样可以把他与image相关联,调用加载的图片??
解决imagelist可以预加载图片与image相关联问题的朋友
一定给加分!!!
或者用别的方法做到
在程序启动的时候把所有的图片加载到内存中。
然后以后每次都取内存中的图片进行显示。
也有分呀!!
欢迎大家来交流,解决这个问题,
谢谢!!!!!!!!!!!!!!!!!!!
其实这个十分简单,根本不用ImageList控件,只要用一个Object数组就可以啦!比如:你有0 - 9 共十张图片。定义一个Form全局的Object数组:
Private Pics(9) As Object在启动的时候加载这十张图片(0.gif - 9.gif):
Private Sub Form_Load()
Dim i as integer
for i=0 to 9
Set Pics(i)=LoadPicture("c:\165彩票\pic\" & cint(i) & ".gif")
Next
End Sub
这样就实现了十张图片的预加载。
使用的时候:
Set Images(i)=Pics(n) '这里n代表要显示的数字0 - 9
是不是很简单啊?你哪200分在那里?给我吧?