Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [VB6]рисую солнышко


Автор: brunetka 21.9.2007, 20:58
Всем привееет... smile ...
я вот тут пытаюсь нарисовать солнышко...написала процедуру...а она не яботает smile ...не мог бы кто-нибуть умудренный жизненным опытом в этом плане подсказать что не так...вот тут...

Код

Private Sub Painting()
Dim red(20) As Byte, green(20) As Byte, blue(20) As Byte
For zi = 0 To 20
 red(zi) = Round(Rnd * (254))
 green(zi) = Round(Rnd * (254))
 blue(zi) = Round(Rnd * (254))
 Next zi
 x = 2500
 y = 2500
  If dlr < 100 Then
  If ugr = 360 Then
     dlr = dlr + 5: ugr = -10
  End If
  ugr = ugr + 10
  i = Int((15 - 3) * Rnd + 4)
x = x + (dlr * Cos(ugr * 3.14 / 180))
y = y + (dlr * Sin(ugr * 3.14 / 180))
  Form1.FillStyle = 0
  Form1.FillColor = RGB(red(i), green(i), blue(i))
Circle (x, y), 1.5, i
End If
End Sub


заранее спс smile 

Автор: Akina 21.9.2007, 23:18
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: brunetka 22.9.2007, 17:18
Спасибо за помощь...
я тут подработала...теперь все работает как надо кроме того что кружки в солнышке должны по таймеру рисоваться...по однуму кружочку...а у меня все сразу выскакивают... smile ...что я не так написала?

Код

Private Sub Timer1_Timer()
Timer1.Interval = 100
 For dlr = 300 To 1800
   If ugr = 360 Then
     dlr = dlr + 60
     k = k + 1
     ugr = 0
  End If
  ugr = ugr + 10
  x = 1700 - (dlr * Cos(ugr * 3.14159 / 180))
  y = 1700 + (dlr * Sin(ugr * 3.14159 / 180))
  Form1.FillStyle = 0
If (k = 0) Or (k = 4) Or (k = 8) Or (k = 12) Then
  Form1.FillColor = RGB(255, 255, 0)
End If
If (k = 1) Or (k = 5) Or (k = 9) Or (k = 13) Then
  Form1.FillColor = RGB(0, 255, 0)
End If
If (k = 2) Or (k = 6) Or (k = 10) Or (k = 14) Then
  Form1.FillColor = RGB(255, 0, 0)
End If
If (k = 3) Or (k = 7) Or (k = 11) Or (k = 15) Then
  Form1.FillColor = RGB(0, 255, 255)
End If
Circle (x, y), 50, 0
Next
Timer1.Enabled = False
End Sub

Автор: W4FhLF 22.9.2007, 17:25
Ой какая красота...  smile 


Цитата(brunetka @  22.9.2007,  17:18 Найти цитируемый пост)
что я не так написала?


Задержку надо в цикле поставить.

Код

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Timer1_Timer()
Timer1.Interval = 100
    For dlr = 300 To 1800
    
        If ugr = 360 Then
            dlr = dlr + 60
            k = k + 1
            ugr = 0
        End If
        
        ugr = ugr + 10
        
        x = 1700 - (dlr * Cos(ugr * 3.14159 / 180))
        y = 1700 + (dlr * Sin(ugr * 3.14159 / 180))
        
        Form1.FillStyle = 0
        
        If (k = 0) Or (k = 4) Or (k = 8) Or (k = 12) Then Form1.FillColor = RGB(255, 255, 0)
        If (k = 1) Or (k = 5) Or (k = 9) Or (k = 13) Then Form1.FillColor = RGB(0, 255, 0)
        If (k = 2) Or (k = 6) Or (k = 10) Or (k = 14) Then Form1.FillColor = RGB(255, 0, 0)
        If (k = 3) Or (k = 7) Or (k = 11) Or (k = 15) Then Form1.FillColor = RGB(0, 255, 255)
        
        Circle (x, y), 50, 0
        
        Call Sleep(3) ' задержка в миллисекундах
    Next
Timer1.Enabled = False
End Sub



Автор: SelenIT 22.9.2007, 17:37
Насколько я понимаю логику таймера, цикл в процедуре вообще не нужен. По таймеру нужно делать одну итерацию, затем инкрементить параметр (в данном случае dlr) и, если его значение не превысило предел, устанавливать таймер на следующую...

Автор: brunetka 22.9.2007, 22:22
Ух ты............ smile  smile  smile  smile  smile  smile  smile 

W4FhLF, спасибо тебе...нет не так...СПАСИБО ТЕБЕ ОГРОМНОЕ...я уже и не думала что кто-нить с этим солнцем мине помагет))))очень-очень тебе спасиба... smile 
ток вот у меня теперь тута непонятка случается...у меня в проге кроме солнца еще телега едет и на ней в конце надпись появляется "зачет!"...дело в том что после вставки задержки у меня начало сначала солнышко рисоваться, а потом надпись появляться...а до этого (и мне так надо) у меня сначала надпись появлялась, а потом уже солнце...что вот тута надо бы еще дописать?...подскажите пазаласта...
Код

Private Sub Timer1_Timer()
Dim kx2(7), ky2(7)
stl = stl + 1           
rl = 600
kx2(0) = kx2o(0) - (rl - rl * Cos(stl / 180 * 3.14159 - 3.14 / 2)) + rl
ky2(0) = ky2o(0) + rl * Sin(stl / 180 * 3.14159 - 3.14 / 2) + rl
kx2(1) = kx2o(1) - (rl - rl * Cos(stl / 180 * 3.14159 + 3.14 / 2)) + rl
ky2(1) = ky2o(1) + rl * Sin(stl / 180 * 3.14159 + 3.14 / 2) - rl
kx2(2) = kx2o(2) - (rl - rl * Cos(stl / 180 * 3.14159 - 3.14 / 2)) + rl
ky2(2) = ky2o(2) + rl * Sin(stl / 180 * 3.14159 - 3.14 / 2) + rl
kx2(3) = kx2o(3) - (rl - rl * Cos(stl / 180 * 3.14159 + 3.14 / 2)) + rl
ky2(3) = ky2o(3) + rl * Sin(stl / 180 * 3.14159 + 3.14 / 2) - rl
kx2(4) = kx2o(4) - (rl - rl * Cos(stl / 180 * 3.14159))
ky2(4) = ky2o(4) + rl * Sin(stl / 180 * 3.14159)
kx2(5) = kx2o(5) - (rl - rl * Cos(stl / 180 * 3.14159 + 3.14)) + 2 * rl
ky2(5) = ky2o(5) + rl * Sin(stl / 180 * 3.14159 + 3.14)
kx2(6) = kx2o(6) - (rl - rl * Cos(stl / 180 * 3.14159))
ky2(6) = ky2o(6) + rl * Sin(stl / 180 * 3.14159)
kx2(7) = kx2o(7) - (rl - rl * Cos(stl / 180 * 3.14159 + 3.14)) + 2 * rl
ky2(7) = ky2o(7) + rl * Sin(stl / 180 * 3.14159 + 3.14)
Shape1.Left = Shape1.Left + 10
Shape2.Left = Shape2.Left + 10
Shape3.Left = Shape3.Left + 10
 For i = 0 To 7
 Line1(i).X2 = kx2(i) + 10
 Line1(i).X1 = Line1(i).X1 + 10
 Line1(i).Y2 = ky2(i)
 kx2o(i) = kx2o(i) + 10
Next i
If Shape3.Left + Shape3.Width + 105 = Form1.Width Then
Picture1.Visible = True
 For dlr = 300 To 1800
   If ugr = 360 Then
     dlr = dlr + 60
     k = k + 1
     ugr = 0
  End If
  ugr = ugr + 10
  x = 1700 - (dlr * Cos(ugr * 3.14159 / 180))
  y = 1700 + (dlr * Sin(ugr * 3.14159 / 180))
  Form1.FillStyle = 0
If (k = 0) Or (k = 4) Or (k = 8) Or (k = 12) Then
  Form1.FillColor = RGB(255, 255, 0)
End If
If (k = 1) Or (k = 5) Or (k = 9) Or (k = 13) Then
  Form1.FillColor = RGB(0, 255, 0)
End If
If (k = 2) Or (k = 6) Or (k = 10) Or (k = 14) Then
  Form1.FillColor = RGB(255, 0, 0)
End If
If (k = 3) Or (k = 7) Or (k = 11) Or (k = 15) Then
  Form1.FillColor = RGB(0, 255, 255)
End If
Circle (x, y), 50, 0
Call Sleep(10) 
Next
Timer1.Enabled = False
End If
End Sub

Автор: W4FhLF 23.9.2007, 06:29
brunetka, тележку и надпись сделай в другом таймере. Т.е. добавь ещё один таймер на форум и код, который отвечает за езду тележки и надпись перенеси туда. 

Автор: brunetka 23.9.2007, 10:29
W4FhLF, еще раз огромное тебе спасибо...теперь все у меня чики-пуки... smile 

Автор: brunetka 23.9.2007, 14:25
W4FhLF, а можно вопрос...вот эта строчка...
Код

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

она как объясняется? smile ...просто из знакомо-понятных мне в ней слов 4 из 10 smile ...

Автор: cardinal 23.9.2007, 15:23
Цитата(brunetka @  23.9.2007,  13:25 Найти цитируемый пост)
она как объясняется?

Для того, чтобы сделать задержку (паузу) в программе можно использовать пустой цикл, который крутиться опр. кол-во раз (но по времени на каждом компьютере он будет крутиться разное кол-во времени), а можно использовать API функцию Sleep. Она позволяет сделать паузу в опр. кол-во миллисекунд (с погрешностью!). Чтобы воспользоваться этой функцией надо ее объявить. Как это делается написано выше. Еще можно почитать тут:
http://i2r.rusfund.ru/static/375/out_15251.shtml

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)