标题:这段代码什么意思?
只看楼主
烙印时光
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-6-17
结帖率:0
已结贴  问题点数:20 回复次数:2 
这段代码什么意思?

这个是随机image(名字改为l1)飘落的代码
根据网络做了些注解,。。
________________________________-
'move方法用法:移动窗体和控件,可改变其大小,对象是除了计时器和菜单的所有对象。
'属性有左边距离,上边距离,宽度,高度。
'count 是统计窗体上控件的个数
'tag保存一些临时性的数据
Private Sub Form_Load()
Randomize
For I = 0 To 40 '数量
If I > 0 Then Load L1(I): L1(I).Visible = True
L1(I).Move Me.ScaleWidth * Rnd, Me.ScaleHeight * Rnd  '随机出现
L1(I).Tag = Rnd * 7 - 3 & "|" & Rnd * 5 + 1  '存储两个数,中间用竖线分隔,便于取用
Next
Timer1.Enabled = True
End Sub

Private Sub timer1_timer()
Dim I As Long, S As Long, T As Single, L As Single
Dim nTag As String, X As Single, Y As Single, W As Single

Randomize
W = L1(0).Height * 0.05
For I = 0 To L1.Count - 1 '0 to l1的总数量减一
nTag = L1(I).Tag
S = InStr(nTag, "|") 'InStr([start, ]string1, string2[, compare])—起始位置、主体字符串、要查找的字符串,Compare是可选参数—举例子: s=InStr(1,"abcdefg","cd")  结果为3
'nstr 返回值S是查找第一个"l" 出现的位置

X = Left(nTag, S - 1): Y = Mid(nTag, S + 1) 'Left(a,N)从左边取N位,mid(a,M,N)从第M位取N位
'left 的作用是提取 字符串ntag 'l'之前的数据 后面那个是取后面的数据

S = Int(Rnd * 10) '
If S = 0 Then X = Rnd * 11 - 5
L1(I).Tag = X & "|" & Y '
L = L1(I).Left + X * W
T = L1(I).Top + Y * W '
If L < -L1(I).Width Then L = Me.ScaleWidth '
If T < -L1(I).Height Then T = Me.ScaleHeight '
If L > Me.ScaleWidth Then L = -L1(I).Width '
If T > Me.ScaleHeight Then
T = -L1(I).Height '
L1(I).Tag = Rnd * 11 - 5 & "|" & Rnd * 5 + 1 '
End If
L1(I).Move L, T '移动
end sub


____________________________
L = L1(I).Left + X * W

T = L1(I).Top + Y * W
这里的L和T分别通过公式能得到什么?公式是什么意思?
搜索更多相关主题的帖子: 临时性 计时器 count 统计 网络 
2016-06-17 18:11
烙印时光
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-6-17
得分:0 
可能有些乱,注解去掉后是这样:
————————————————
Private Sub Form_Load()
Randomize
For I = 0 To 40
If I > 0 Then Load L1(I): L1(I).Visible = True
L1(I).Move Me.ScaleWidth * Rnd, Me.ScaleHeight * Rnd
L1(I).Tag = Rnd * 7 - 3 & "|" & Rnd * 5 + 1  
Next
Timer1.Enabled = True
End Sub

Private Sub timer1_timer()
Dim I As Long, S As Long, T As Single, L As Single
Dim nTag As String, X As Single, Y As Single, W As Single

Randomize
W = L1(0).Height * 0.05
For I = 0 To L1.Count - 1
nTag = L1(I).Tag
S = InStr(nTag, "|")

X = Left(nTag, S - 1): Y = Mid(nTag, S + 1)

S = Int(rnd * 10) '
If S = 0 Then X = Rnd * 11 - 5
L1(I).Tag = X & "|" & Y
L = L1(I).Left + X * W
T = L1(I).Top + Y * W
If L < -L1(I).Width Then L = Me.ScaleWidth
If T < -L1(I).Height Then T = Me.ScaleHeight
If L > Me.ScaleWidth Then L = -L1(I).Width
If T > Me.ScaleHeight Then
T = -L1(I).Height
L1(I).Tag = Rnd * 11 - 5 & "|" & Rnd * 5 + 1
End If
L1(I).Move L, T

End Sub
2016-06-17 18:12
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:934
专家分:5244
注 册:2015-8-10
得分:20 
你不都写出来了么L = L1(I).Left + X * W
L1应该是一个控件数组,L1(I).Left不用说了吧,
W是这句
W = L1(0).Height * 0.05

X是下面这两句
S = InStr(nTag, "|") 
X = Left(nTag, S - 1): Y = Mid(nTag, S + 1) 

L、T是为了计算得到这个控件L1(I)最后的坐标

你要说都看不懂的话,那就建议你重新的好好学习一下。 学习VB不能跳过读代码这个环节的。

[此贴子已经被作者于2016-6-17 19:25编辑过]

2016-06-17 19:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-466056-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.107889 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved