Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const cDef = 0 'default color
Dim i As Integer
Dim j As Integer
Dim x As Integer, y As Integer
Dim c As Long
Private Sub Form_Load()
Me.AutoRedraw = True
Show
'ðàññòàâëÿåì òî÷êè
For i = 1 To 10000
x = Int(Rnd * Me.Width \ Screen.TwipsPerPixelX)
y = Int(Rnd * Me.Height \ Screen.TwipsPerPixelY)
SetPixel Me.hdc, x, y, cDef
Next
Refresh
Sleep 400
For j = 0 To Me.Width \ Screen.TwipsPerPixelY
For i = 0 To Me.Height \ Screen.TwipsPerPixelX
c = GetPixel(Me.hdc, i, j)
If c = cDef Then
SetPixel Me.hdc, i, j, RGB(Rnd * 255, Rnd * 255, Rnd * 255)
End If
Next
Next
Refresh
End Sub
а ещё можно сделать тип "tochka" состоящий из координат и текущего цвета и задав один раз координаты потом менять цвет, не меняя положения точек. Если каждую 1/10 секунды прибавлять к каждому цвету по 1 (первоначально ест-но цвета по рандому), то возможно неплохо получится...
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const cDef = vbWhite 'default color
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x As Integer, y As Integer
Dim c As Long
Private Type Point_NOT_API
x As Long
y As Long
c As Long
End Type
Dim p(1 To 10000) As Point_NOT_API
Dim gx As Integer, gy As Integer
Dim cn As Long
Private Sub Form_Load()
Timer1.Interval = 110
Timer1.Enabled = False
Me.AutoRedraw = True
Me.BackColor = vbBlack
Me.Caption = "Superb"
Show
' Randomize
gy = Me.Width \ Screen.TwipsPerPixelY
gx = Me.Height \ Screen.TwipsPerPixelX
For i = 1 To 10000
x = Int(Rnd * gx)
y = Int(Rnd * gy)
SetPixel Me.hdc, x, y, cDef
Next
Refresh
Sleep 400
k = 0
For j = 0 To gy
For i = 0 To gx
c = GetPixel(Me.hdc, i, j)
If c = cDef Then
cn = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
SetPixel Me.hdc, i, j, cn
k = k + 1
p(k).x = i
p(k).y = j
p(k).c = cn
End If
Next
Next
Refresh
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Cls
For k = 1 To 10000
p(k).x = p(k).x - 2
If p(k).x <= 0 Then p(k).x = gx
SetPixel Me.hdc, p(k).x, p(k).y, p(k).c
Next
Refresh
End Sub
...то почти звёзды получатся. Мы с другом делали такую же ерунду только трёхслойную т.е. задний слой из маленьких точек двигался оч мееедленно, средний из точек чуть подольше бвигался побыстрее а передний слой двигался ещё побыстрее, тогда получалость почти 3D
Это конечно все хорошо, но не то что мне нужно, RGB(Rnd * 255, Rnd * 255, Rnd * 255) этой строчкой он задает цвета, а мне нужны 7 конкретных цветов например: желтый, зеленый, темно-зеленый, салатовый и тд, и еще как можно сделать чтобы он цвета задавал по формуле, например: зеленых должно быть 500 и тд.
дык какие проблемы?
можно задать счётчик K в цикле (код 1), потом замени RGB(Rnd * 255, Rnd * 255, Rnd * 255) на какую нить переменную color а потом писать:
if k<500 then color=vbGreen ' color- an example avriable
if k>=500 and k<1000 then color=vbRed 'for example
'.....