purebasic.info

PureBasic forum
Текущее время: Пт фев 21, 2020 6:45 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: scrolly
СообщениеДобавлено: Вс янв 12, 2020 3:24 pm 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 256
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Код:
1
2
3
 
Event = WaitWindowEvent()
 



и что при этом будет? пошевелишь мышкой над окном, начнется действие. Без таймера.

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: scrolly
СообщениеДобавлено: Вс янв 12, 2020 3:27 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11587
Благодарил (а): 4 раз.
Поблагодарили: 485 раз.
egons писал(а):
и что при этом будет?
Не будет загружать процессор на 100%.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: scrolly
СообщениеДобавлено: Вс янв 12, 2020 3:31 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 932
Благодарил (а): 2 раз.
Поблагодарили: 47 раз.
Пункты репутации: 9
egons писал(а):
WaitWindowEvent(20) - нет такого.
(

Есть но это означает что цикл обработчика не будет останавливаться а будет тикать от установленного времени,
но только одно но при движении мышки к примеру будет ускорение вне установки время. :roll:
на вот с таймером апишным посмотри. :D

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
 
Import "libminifmod170.lib"
  MiniFmod_SetVolume(Volume) As "_MiniFmod_SetVolume@4"
  MiniFmod_Free() As "_MiniFmod_Free@0"
  MiniFmod_GetChannels() As "_MiniFmod_GetChannels@4"
  MiniFmod_GetOrder() As "_MiniFmod_GetOrder@0"
  MiniFmod_GetRow() As "_MiniFmod_GetRow@0"
  MiniFmod_GetSynch(channel) As "_MiniFmod_GetSynch@4"
  MiniFmod_GetTime() As "_MiniFmod_GetTime@0"
  MiniFmod_Init(*File,Size) As "_MiniFmod_Init@8"
  MiniFmod_Play() As "_MiniFmod_Play@0"
  MiniFmod_Stop() As "_MiniFmod_Stop@0"
EndImport
 
Structure lin
  x1.l
  y1.l
  x2.l
  y2.l
  c.l
EndStructure
 
Global Dim lines.lin(255)
 
UsePNGImageDecoder()
Global Dim colors.l(255)
Restore cols
 
 
Global t$="     Another scroll another demo? Happy New Year 2020! Greets to DiHalt visitors. Vote vote vote for teh winner of scrolly demo compo Read again:"
Global tp.l=1 ; позиция в тексте
Global bw.a=128 ; битовый вес
Global li.a=64; line index
Global x1.l=10
Global y1.l=10
Global x2.l=800-20
Global y2.l=600-20
 
Global dx1.l=-5
Global dy1.l=5
Global dx2.l=5
Global dy2.l=-5
CatchImage(0,?ci)
If MiniFmod_Init(?ModStart,?ModEnd-?ModStart)
 For i=0 To 255
  Read.l colors(i)
 Next i
  If MiniFmod_Play()=0
    End
  EndIf
EndIf
Procedure Windows_Calback(hwnd,msg,wParam,lParam)
 
Select msg
 Case #WM_TIMER; тик таймера
   StartDrawing(CanvasOutput(0))
     
      Box(0,0,800,600,0)
     
      ;draw lines
      ll.a=li
      For i=0 To 63
        LineXY(lines(ll)\x1,lines(ll)\y1,lines(ll)\x2,lines(ll)\y2,lines(ll)\c)
        ll-1
      Next i
     
      For i=0 To 2
        If x1+dx1<0 Or x1+dx1>800
          dx1=-dx1
        Else
          x1+dx1
        EndIf
       
        If x2+dx2<0 Or x2+dx2>800
          dx2=-dx2
        Else
          x2+dx2
        EndIf
       
        If y1+dy1<0 Or y1+dy1>600
          dy1=-dy1
        Else
          y1+dy1
        EndIf
       
        If y2+dy2<0 Or y2+dy2>600
          dy2=-dy2
        Else
          y2+dy2
        EndIf
       
      Next i
     
      lines(li)\x1=x1
      lines(li)\x2=x2
      lines(li)\y1=y1
      lines(li)\y2=y2
      lines(li)\c=colors(ll)
     
      li+1;li=(li+1)&255
     
     
      For y=7 To 1 Step -1
        tt.l=tp; текстовая позиция
        bb.a=bw
       
        For x=0 To 19+4
          If PeekA( ?fnt+y+8*( Asc( Mid(t$,tt,1) )-32 ) )&bb
            DrawAlphaImage(ImageID(0),34*x-17,y*40+x*17-74-17)
          Else
            DrawAlphaImage(ImageID(0),800-70,0)
          EndIf
          bb>>1
          If bb=8
            bb=128
            tt+1
            ; Debug Mid(t$,tt,1)
            If tt>Len(t$)
              tt=1
            EndIf
          EndIf
        Next x
       
      Next y
     
      Box(800-70,0,75,75,0)
      StopDrawing()
     
      bw>>1
      If bw=8
        bw=128
        tp+1
        If tp>Len(t$)
          tp=1
        EndIf
      EndIf
      ;FlipBuffers()
 Case #WM_KEYDOWN;{;
      Debug 666
   Select wParam
     Case 27;Esc  (#VK_ESCAPE)
        MiniFmod_Stop()
        MiniFmod_Free()
      End  
         EndSelect
Case #WM_SETFOCUS      
  Debug "#WM_SETFOCUS"
Case #WM_DESTROY;
     Debug 555    
  KillTimer_(GadgetID(0),1);Убить таймер
 
EndSelect
;}
   
 ProcedureReturn DefWindowProc_(hwnd,msg,wParam,lParam)
 
EndProcedure
 
 
If OpenWindow(0, 0, 0, 800, 600, "Scrolly", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  SmartWindowRefresh(0,1)
  CanvasGadget(0, 0, 0, 800, 600,#PB_Canvas_Keyboard)
  ;SetWindowLongPtr_(GadgetID(0),-8,WindowID(0));дискриптор родителя
  SetFocus_(GadgetID(0))
  SetWindowLongPtr_(GadgetID(0),-4,@Windows_Calback())
    SetTimer_(GadgetID(0),1,200,#Null);установка таймера непосредственно в обработчик можно сделать в отдельную процедуру тогда возможно и обработчик не понадобится
   
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Debug 444
          MiniFmod_Stop()
          MiniFmod_Free()
          Break
    EndSelect    
  ForEver
EndIf
 
 
 
DataSection
  ModStart:
 ;  IncludeBinary "jd-xmas.xm"
  IncludeBinary "christmas_mix.xm"
  ModEnd:
 fnt:
 IncludeBinary "Orneta.fnt"
  ci:
 IncludeBinary "cube1.png"
  cols:
 XIncludeFile "cols.pbi"
EndDataSection
 
 


и
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
 
Import "libminifmod170.lib"
  MiniFmod_SetVolume(Volume) As "_MiniFmod_SetVolume@4"
  MiniFmod_Free() As "_MiniFmod_Free@0"
  MiniFmod_GetChannels() As "_MiniFmod_GetChannels@4"
  MiniFmod_GetOrder() As "_MiniFmod_GetOrder@0"
  MiniFmod_GetRow() As "_MiniFmod_GetRow@0"
  MiniFmod_GetSynch(channel) As "_MiniFmod_GetSynch@4"
  MiniFmod_GetTime() As "_MiniFmod_GetTime@0"
  MiniFmod_Init(*File,Size) As "_MiniFmod_Init@8"
  MiniFmod_Play() As "_MiniFmod_Play@0"
  MiniFmod_Stop() As "_MiniFmod_Stop@0"
EndImport
 
Structure lin
  x1.l
  y1.l
  x2.l
  y2.l
  c.l
EndStructure
UsePNGImageDecoder()
 
Global Dim lines.lin(255)
Global Dim colors.l(255)
;Restore cols
 
 
 
 
Global t$="     Another scroll another demo? Happy New Year 2020! Greets to DiHalt visitors. Vote vote vote for teh winner of scrolly demo compo Read again:"
Global tp.l=1 ; позиция в тексте
Global bw.a=128 ; битовый вес
Global li.a=64; line index
Global x1.l=10
Global y1.l=10
Global x2.l=800-20
Global y2.l=600-20
 
Global dx1.l=-5
Global dy1.l=5
Global dx2.l=5
Global dy2.l=-5
CatchImage(0,?ci)
 
 
; Debug #PB_Event_Timer
; Debug #WM_TIMER
If MiniFmod_Init(?ModStart,?ModEnd-?ModStart)
 For i=0 To 255
  Read.l colors(i)
 Next i
  If MiniFmod_Play()=0
    End
  EndIf
EndIf
 
If InitSprite() And OpenWindow(0,0,0,800,600,"Scrolly",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget) And OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
  SmartWindowRefresh(0,1)
 ;SetFocus_(WindowID(0))
  SetTimer_(WindowID(0),1,200,#Null)
 
  Repeat
   Select WaitWindowEvent()
     Case #WM_TIMER
      ; Debug 7777
      StartDrawing(ScreenOutput())
     
      Box(0,0,800,600,0)
     
      ;draw lines
      ll.a=li
      For i=0 To 63
        LineXY(lines(ll)\x1,lines(ll)\y1,lines(ll)\x2,lines(ll)\y2,lines(ll)\c)
        ll-1
      Next i
     
      For i=0 To 2
        If x1+dx1<0 Or x1+dx1>800
          dx1=-dx1
        Else
          x1+dx1
        EndIf
       
        If x2+dx2<0 Or x2+dx2>800
          dx2=-dx2
        Else
          x2+dx2
        EndIf
       
        If y1+dy1<0 Or y1+dy1>600
          dy1=-dy1
        Else
          y1+dy1
        EndIf
       
        If y2+dy2<0 Or y2+dy2>600
          dy2=-dy2
        Else
          y2+dy2
        EndIf
       
      Next i
     
      lines(li)\x1=x1
      lines(li)\x2=x2
      lines(li)\y1=y1
      lines(li)\y2=y2
      lines(li)\c=colors(ll)
     
      li+1;li=(li+1)&255
     
     
      For y=7 To 1 Step -1
        tt.l=tp; текстовая позиция
        bb.a=bw
       
        For x=0 To 19+4
          If PeekA( ?fnt+y+8*( Asc( Mid(t$,tt,1) )-32 ) )&bb
            DrawAlphaImage(ImageID(0),34*x-17,y*40+x*17-74-17)
          Else
            DrawAlphaImage(ImageID(0),800-70,0)
          EndIf
          bb>>1
          If bb=8
            bb=128
            tt+1
            ; Debug Mid(t$,tt,1)
            If tt>Len(t$)
              tt=1
            EndIf
          EndIf
        Next x
       
      Next y
     
      Box(800-70,0,75,75,0)
      StopDrawing()
     
      bw>>1
      If bw=8
        bw=128
        tp+1
        If tp>Len(t$)
          tp=1
        EndIf
      EndIf
     
      FlipBuffers()
 
    Case #PB_Event_CloseWindow
        Debug 444
          MiniFmod_Stop()
          MiniFmod_Free()
        KillTimer_(WindowID(0),1);Убить таймер
        Break
    Case #WM_KEYDOWN
      Debug 666
     ; Select ;апишной функцией смотрим wparam
     ; Case 27;Esc  (#VK_ESCAPE)
        MiniFmod_Stop()
        MiniFmod_Free()
        KillTimer_(WindowID(0),1);Убить таймер
        Break
      ;EndSelect
     
    EndSelect    
  ForEver
EndIf
 
 
 
 
DataSection
  ModStart:
 ;  IncludeBinary "jd-xmas.xm"
  IncludeBinary "christmas_mix.xm"
  ModEnd:
 fnt:
 IncludeBinary "Orneta.fnt"
  ci:
 IncludeBinary "cube1.png"
  cols:
 XIncludeFile "cols.pbi"
EndDataSection
 
 



Последний раз редактировалось Сергейчик Вс янв 12, 2020 4:37 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: scrolly
СообщениеДобавлено: Вс янв 12, 2020 3:36 pm 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 256
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Все, теперь ясно

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: scrolly
СообщениеДобавлено: Пн янв 13, 2020 7:30 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 918
Благодарил (а): 99 раз.
Поблагодарили: 30 раз.
Пункты репутации: 5
egons писал(а):
WaitWindowEvent(20) - нет такого.

чего именно нет? что ты имел ввиду?
в справке всё расписано про эту функцию


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB