purebasic.info

PureBasic forum
Текущее время: Пн июл 16, 2018 6:11 am

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Выделение части графика.
СообщениеДобавлено: Сб мар 18, 2017 11:12 pm 
Не в сети
доцент

Зарегистрирован: Чт окт 27, 2011 7:43 pm
Сообщений: 64
Откуда: Санкт-Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Надо построить график (из массива, размер которого может быть различным), при этом иметь возможность выделять его часть, с запоминанием начальной и конечной абциссы выделения (и наоборот, изменяя значение абциссы, должно изменяться выделение).
Пока кое-что реализовал при помощи перерисовки всего изображения:
Код:
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
 
Enumeration
  #Window_Main
  #Konteyner
  #CanvGadg
  #SpinBeg
  #SpinEnd
EndEnumeration
 
 
 
 
  ;--- Create Window Main
 
 
  If OpenWindow(#Window_Main, 130, 130, 300, 200, "Title", #PB_Window_MinimizeGadget | #PB_Window_Invisible)
 
  Else
    MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
    End
  EndIf
 
      HideWindow(#Window_Main, 0)      ;Делаем окно видимым
 
 
 
 
      #HighPlsSaml = 63
      #WidthPlsSaml = 260
 
 
      ColorbR.b = 244
      ColorbG.b = 244
      ColorbB.b = 244
      ColorbA.b = 255
 
      ColorlR.b = 180
      ColorlG.b = 60
      ColorlB.b = 120
 
      ColorR.b = 077
      ColorG.b = 255
      ColorB.b = 111
      NachRis.b = 0
      StepRis.b = 5
 
      ColoraR.b = 111
      ColoraG.b = 098
      ColoraB.b = 255
      ColoraA.b = 125
      NachRisa.b = 20
      StepRisa.b = 1
 
      presleftbut.b = 0
 
      ContainerGadget(#Konteyner, 4, 4, 292, 192, #PB_Container_Raised)
 
      SpinGadget(#SpinBeg, 10, 100, 60, 22, 0, 260)
      SpinGadget(#SpinEnd, 190, 100, 60, 22, 0, 260)
 
 
      If CanvasGadget(#CanvGadg, 8, 8, #WidthPlsSaml+1, #HighPlsSaml)
 
 
          If StartDrawing(CanvasOutput(#CanvGadg))
 
                DrawingMode(#PB_2DDrawing_AlphaBlend)
 
              For zapersg.w=0 To #WidthPlsSaml
 
                LineXY(zapersg.w,0,zapersg.w,#HighPlsSaml,RGBA(ColorbR.b,ColorbG.b,ColorbB.b,ColorbA.b))
 
              Next
 
                LineXY(0,#HighPlsSaml/2,#WidthPlsSaml,#HighPlsSaml/2,RGBA(ColorlR.b,ColorlG.b,ColorlB.b,255))
 
 
                LineXY(NachRis.b,45,NachRis.b+(StepRis.b*001),05,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b,45,NachRis.b+(StepRis.b*001),40,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*001),40,NachRis.b+(StepRis.b*002),80,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*002),80,NachRis.b+(StepRis.b*003),04,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*003),04,NachRis.b+(StepRis.b*004),82,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*004),82,NachRis.b+(StepRis.b*005),84,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*005),84,NachRis.b+(StepRis.b*006),86,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*006),86,NachRis.b+(StepRis.b*007),02,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*007),02,NachRis.b+(StepRis.b*008),04,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*008),04,NachRis.b+(StepRis.b*009),13,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*009),13,NachRis.b+(StepRis.b*010),36,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*010),36,NachRis.b+(StepRis.b*011),55,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*011),55,NachRis.b+(StepRis.b*012),55,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*012),55,NachRis.b+(StepRis.b*013),27,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*013),27,NachRis.b+(StepRis.b*014),82,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*014),82,NachRis.b+(StepRis.b*015),03,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*015),03,NachRis.b+(StepRis.b*016),64,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*016),64,NachRis.b+(StepRis.b*017),58,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*017),58,NachRis.b+(StepRis.b*018),51,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*018),51,NachRis.b+(StepRis.b*019),47,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*019),47,NachRis.b+(StepRis.b*020),31,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
 
 
              StopDrawing()
 
 
          Else
              MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
              End
          EndIf
 
      Else
          MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
          End
      EndIf
 
 
   loopbeg.w = 0
   loopend.w = 260
   izmvalueh.b = 1
 
 
 
 
    Repeat
 
      If izmvalueh.b = 1      ; Установлен флаг необходимости изменения ручного ввода
 
        izmvalueh.b = 0
        SetGadgetState (#SpinBeg, loopbeg.w)
        SetGadgetState (#SpinEnd, loopend.w)
        SetGadgetText(#SpinBeg, Str(GetGadgetState(#SpinBeg)))
        SetGadgetText(#SpinEnd, Str(GetGadgetState(#SpinEnd)))
 
      ElseIf izmvalueh.b = 0
 
      Else
         MessageRequester("FatalError", "Bad tag hand enter") ; Выводим на экран сообщение.
         End
      EndIf
 
 
 
      Event = WaitWindowEvent()
 
      If Event = #PB_Event_Gadget And EventGadget() = #CanvGadg
        If EventType() = #PB_EventType_LeftButtonDown
 
          If StartDrawing(CanvasOutput(#CanvGadg))
 
                DrawingMode(#PB_2DDrawing_AlphaBlend)
 
              For zapersg.w=0 To #WidthPlsSaml
 
                LineXY(zapersg.w,0,zapersg.w,#HighPlsSaml,RGBA(ColorbR.b,ColorbG.b,ColorbB.b,ColorbA.b))
 
              Next
 
                LineXY(0,#HighPlsSaml/2,#WidthPlsSaml,#HighPlsSaml/2,RGBA(ColorlR.b,ColorlG.b,ColorlB.b,255))
 
 
                LineXY(NachRis.b,45,NachRis.b+(StepRis.b*001),40,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*001),40,NachRis.b+(StepRis.b*002),80,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*002),80,NachRis.b+(StepRis.b*003),04,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*003),04,NachRis.b+(StepRis.b*004),82,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*004),82,NachRis.b+(StepRis.b*005),84,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*005),84,NachRis.b+(StepRis.b*006),86,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*006),86,NachRis.b+(StepRis.b*007),02,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*007),02,NachRis.b+(StepRis.b*008),04,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*008),04,NachRis.b+(StepRis.b*009),13,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*009),13,NachRis.b+(StepRis.b*010),36,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*010),36,NachRis.b+(StepRis.b*011),55,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*011),55,NachRis.b+(StepRis.b*012),55,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*012),55,NachRis.b+(StepRis.b*013),27,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*013),27,NachRis.b+(StepRis.b*014),82,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*014),82,NachRis.b+(StepRis.b*015),03,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*015),03,NachRis.b+(StepRis.b*016),64,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*016),64,NachRis.b+(StepRis.b*017),58,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*017),58,NachRis.b+(StepRis.b*018),51,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*018),51,NachRis.b+(StepRis.b*019),47,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*019),47,NachRis.b+(StepRis.b*020),31,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
 
 
           x = GetGadgetAttribute(#CanvGadg, #PB_Canvas_MouseX)
 
                LineXY(x,0,x,#HighPlsSaml,RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
 
             StopDrawing()
 
               poslkoord.w = x
               loopbeg.w = x
               loopend.w = x
               presleftbut.b = 1
               izmvalueh.b = 1
 
          Else
              MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
              End
          EndIf
 
        ElseIf (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#CanvGadg, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
 
          If StartDrawing(CanvasOutput(#CanvGadg))
 
           x = GetGadgetAttribute(#CanvGadg, #PB_Canvas_MouseX)
 
 
             DrawingMode(#PB_2DDrawing_AlphaBlend)
 
                If x > poslkoord.w
 
                      If presleftbut.b = 2 Or presleftbut.b = 1    ; Движение мыши слева направо, или ещё не было
                           presleftbut.b = 2
 
                            For Tempcy.w = poslkoord.w+1  To x
                                LineXY(Tempcy.w,0,Tempcy.w,#HighPlsSaml,RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                            Next
 
                            poslkoord.w = x
                            loopend.w = x
                            izmvalueh.b = 1
 
                      ElseIf presleftbut.b = 3    ; Движение мыши справа налево
 
                      Else
                          MessageRequester("FatalError", "Bad >naprav cursore") ; Выводим на экран сообщение.
                          End
                      EndIf
 
 
 
                ElseIf x < poslkoord.w
 
                      If presleftbut.b = 3 Or presleftbut.b = 1    ; Движение мыши справа налево, или ещё не было
                           presleftbut.b = 3
 
                            For Tempcy.w = poslkoord.w-1  To x  Step -1
                                LineXY(Tempcy.w,0,Tempcy.w,#HighPlsSaml,RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                            Next
 
                            poslkoord.w = x
                            loopbeg.w = x
                            izmvalueh.b = 1
 
                      ElseIf presleftbut.b = 2    ; Движение мыши слева направо
 
                      Else
                          MessageRequester("FatalError", "Bad <naprav cursore") ; Выводим на экран сообщение.
                          End
                      EndIf
 
 
 
                Else
 
                EndIf
 
             StopDrawing()
 
          Else
              MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
              End
          EndIf
 
        Else     ; Левая кнопка не нажата
               presleftbut.b = 0
 
        EndIf
 
 
 
 
      EndIf    
     
 
 
 
 
    Until Event = #PB_Event_CloseWindow
 
      End


Как-то не очень нравится такой подход.
Возможно ли как-то изменять только "закраску", не трогая сам график?

_________________
ICQ нет, и, в ближайшее время, не будет


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выделение части графика.
СообщениеДобавлено: Вс мар 19, 2017 11:52 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1637
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
так рисуй их в две картинки. график в одну, закраску во вторую, в которую изначально рисуешь первую картинку. и выводи эту вторую в гаджет. то есть в памяти всегда висит чистая базовая - только график без раскраски. и когда надо опять её копируешь, накладываешь сверху закраски и выводишь. то есть повторно график рисовать не надо. я так делал в гаджете записи звука. у меня слева и справа полупрозрачные зеленые границы можно было двигать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выделение части графика.
СообщениеДобавлено: Вс мар 19, 2017 11:24 pm 
Не в сети
доцент

Зарегистрирован: Чт окт 27, 2011 7:43 pm
Сообщений: 64
Откуда: Санкт-Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
SereZa писал(а):
в памяти всегда висит чистая базовая
А примерчик мона?

_________________
ICQ нет, и, в ближайшее время, не будет


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выделение части графика.
СообщениеДобавлено: Пн мар 20, 2017 11:44 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1637
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
так жеж вроде все понятно объяснил :) пример... легко сказать пример... там куча кода. вырезать надо, басс длл нужна будет. твой код работает? ща посмотрим мож его можно использовать...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выделение части графика.
СообщениеДобавлено: Пн мар 20, 2017 11:46 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1637
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
оп... так у тебя итак все работает :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выделение части графика.
СообщениеДобавлено: Пн мар 20, 2017 12:55 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1637
Откуда: Алматы
Благодарил (а): 14 раз.
Поблагодарили: 45 раз.
Пункты репутации: 5
значица какие проблемы возникли:

пришлось делать поток для функционала вставления значений старта и конца выделения в гаджеты. иначе если это использовалось в основном потоке, то тогда событие на канвасе #PB_EventType_LeftButtonUp порой несрабатывало. видимо SetGadgetText(#SpinBeg, Str(xstart)) настолько тормозючая, что на несколько микросекунд подвешивает всю программу и в результате #PB_EventType_LeftButtonUp просто пропускался не обработавшись.

второй затык - там думай сам - если выделять слева на право - все работает. если справа на лево - то стартовая и конечная координаты меняются местами. в итоге когда начинаешь в спингаджете увеличивать или уменьшать значение - то двигается выделение совсем с другой стороны :) то есть типа жмешь на #SpinEnd - должна менятся правая граница, но меняется левая :) так что там сам додумай. что-то типа условия если xstart > xend - то менять их местами.

Код:
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
Enumeration
  #Window_Main
  #Konteyner
  #CanvGadg
  #SpinBeg
  #SpinEnd
 
  #BasovoeIzobrazenie4tobNeRisovatKazdiyRaz
 
EndEnumeration
 
Global xstart, xend, Quit
 
Procedure DopolnitelnyPotok(*Value)
 
  Repeat
   
    If xstart <> oldxstart
      SetGadgetText(#SpinBeg, Str(xstart))
      oldxstart = xstart
    EndIf
 
    If xend <> oldxend
      SetGadgetText(#SpinEnd, Str(xend))
      oldxend = xend
    EndIf
   
    Delay(100)
   
  Until Quit = 1
 
EndProcedure
 
 
  ;--- Create Window Main
 
If OpenWindow(#Window_Main, 130, 130, 300, 200, "Title", #PB_Window_MinimizeGadget)
 
      #HighPlsSaml = 63
      #WidthPlsSaml = 260
 
 
      ColorbR.b = 244
      ColorbG.b = 244
      ColorbB.b = 244
      ColorbA.b = 255
 
      ColorlR.b = 180
      ColorlG.b = 60
      ColorlB.b = 120
 
      ColorR.b = 077
      ColorG.b = 255
      ColorB.b = 111
      NachRis.b = 0
      StepRis.b = 5
 
      ColoraR.b = 111
      ColoraG.b = 098
      ColoraB.b = 255
      ColoraA.b = 125
      NachRisa.b = 20
      StepRisa.b = 1
 
      presleftbut.b = 0
 
      ContainerGadget(#Konteyner, 4, 4, 292, 192, #PB_Container_Raised)
 
      SpinGadget(#SpinBeg, 10, 100, 60, 22, 0, 260, #PB_Spin_Numeric)
      SpinGadget(#SpinEnd, 190, 100, 60, 22, 0, 260, #PB_Spin_Numeric)
      SetGadgetText(#SpinBeg, "0")
      SetGadgetText(#SpinEnd, "0")
     
      CanvasGadget(#CanvGadg, 8, 8, #WidthPlsSaml+1, #HighPlsSaml)
      CreateImage(#BasovoeIzobrazenie4tobNeRisovatKazdiyRaz, #WidthPlsSaml+1, #HighPlsSaml, 24, RGBA(ColorbR.b,ColorbG.b,ColorbB.b,ColorbA.b))
 
  ;{ создание базовой картинки
  ;If CanvasGadget(#CanvGadg, 8, 8, #WidthPlsSaml+1, #HighPlsSaml)
    ;If StartDrawing(CanvasOutput(#CanvGadg))
    If StartDrawing(ImageOutput(#BasovoeIzobrazenie4tobNeRisovatKazdiyRaz))
     
      DrawingMode(#PB_2DDrawing_AlphaBlend)
 
      ;For zapersg.w=0 To #WidthPlsSaml
        ; закраска заднего фона
        ;LineXY(zapersg.w,0,zapersg.w,#HighPlsSaml,RGBA(ColorbR.b,ColorbG.b,ColorbB.b,ColorbA.b))
        ; и нахрена она такая нужна в цикле? когда проще одиночный FillArea заюзать типа:
        ;FillArea(0, 0, 0,RGBA(ColorbR.b,ColorbG.b,ColorbB.b,ColorbA.b))      
      ;Next
       
      ; центральная линия
      LineXY(0,#HighPlsSaml/2,#WidthPlsSaml,#HighPlsSaml/2,RGBA(ColorlR.b,ColorlG.b,ColorlB.b,255))
 
      ; типа график
                ; этот походу лишний, так как в "повторе" его нет
                ;LineXY(NachRis.b,45,NachRis.b+(StepRis.b*001),05,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b,45,NachRis.b+(StepRis.b*001),40,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*001),40,NachRis.b+(StepRis.b*002),80,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*002),80,NachRis.b+(StepRis.b*003),04,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*003),04,NachRis.b+(StepRis.b*004),82,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*004),82,NachRis.b+(StepRis.b*005),84,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*005),84,NachRis.b+(StepRis.b*006),86,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*006),86,NachRis.b+(StepRis.b*007),02,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*007),02,NachRis.b+(StepRis.b*008),04,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*008),04,NachRis.b+(StepRis.b*009),13,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*009),13,NachRis.b+(StepRis.b*010),36,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*010),36,NachRis.b+(StepRis.b*011),55,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*011),55,NachRis.b+(StepRis.b*012),55,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*012),55,NachRis.b+(StepRis.b*013),27,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*013),27,NachRis.b+(StepRis.b*014),82,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*014),82,NachRis.b+(StepRis.b*015),03,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*015),03,NachRis.b+(StepRis.b*016),64,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*016),64,NachRis.b+(StepRis.b*017),58,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*017),58,NachRis.b+(StepRis.b*018),51,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*018),51,NachRis.b+(StepRis.b*019),47,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
                LineXY(NachRis.b+(StepRis.b*019),47,NachRis.b+(StepRis.b*020),31,RGBA(ColorR.b,ColorG.b,ColorB.b, 255))
 
 
              StopDrawing()
             
      ; выставление подготовленной картинки в гаджет
      SetGadgetAttribute(#CanvGadg, #PB_Canvas_Image, ImageID(#BasovoeIzobrazenie4tobNeRisovatKazdiyRaz))
 
 
 
    Else
      MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
      End
    EndIf
 
  ;Else
  ;    MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
  ;    End
  ;EndIf
  ;}
 
   loopbeg.w = 0
   loopend.w = 260
   izmvalueh.b = 1
   
   ; создание потока, причина ниже
   CreateThread(@DopolnitelnyPotok(), *Value)
 
 
    Repeat
 
      Event = WaitWindowEvent()
     
      ; как-то у нас принято через селект делать
      Select Event
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #CanvGadg
             
              Select EventType()
                Case #PB_EventType_LeftButtonDown
                  xstart = GetGadgetAttribute(#CanvGadg, #PB_Canvas_MouseX)
                  xend   = xstart
                  work   = 1
                Case #PB_EventType_LeftButtonUp
                  xend   = GetGadgetAttribute(#CanvGadg, #PB_Canvas_MouseX)
                  work   = 0
                Case #PB_EventType_MouseMove
                  If work
                    xend   = GetGadgetAttribute(#CanvGadg, #PB_Canvas_MouseX)
                   
                    ; при включении этих пунктов начинает несрабатывать #PB_EventType_LeftButtonUp
                    ;SetGadgetText(#SpinBeg, Str(xstart))
                    ;SetGadgetText(#SpinEnd, Str(xend))
                    ; видимо надо сделать через поток    
                    ; но из-за потока цифры будут не так четко отображаться в гаджете
                   
                    If StartDrawing(CanvasOutput(#CanvGadg))
                      DrawImage(ImageID(#BasovoeIzobrazenie4tobNeRisovatKazdiyRaz), 0, 0)
                      DrawingMode(#PB_2DDrawing_AlphaBlend)
                      ;LineXY(x,0,x,#HighPlsSaml,RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                      Box(xstart, 0, xend - xstart, #HighPlsSaml, RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                      StopDrawing()                      
                    EndIf
                   
                  EndIf
              EndSelect                    
             
             
            Case #SpinBeg
              If EventType() = #PB_EventType_Change
                xstart = GetGadgetState(#SpinBeg)
                    ; поскольку код перерисовки повторяется, то хорошо бы его в процедуру засунуть
                    If StartDrawing(CanvasOutput(#CanvGadg))
                      DrawImage(ImageID(#BasovoeIzobrazenie4tobNeRisovatKazdiyRaz), 0, 0)
                      DrawingMode(#PB_2DDrawing_AlphaBlend)
                      ;LineXY(x,0,x,#HighPlsSaml,RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                      Box(xstart, 0, xend - xstart, #HighPlsSaml, RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                      StopDrawing()                      
                    EndIf
              EndIf
             
             
            Case #SpinEnd  
              If EventType() = #PB_EventType_Change
                xend = GetGadgetState(#SpinEnd)
                    ; поскольку код перерисовки повторяется, то хорошо бы его в процедуру засунуть
                    If StartDrawing(CanvasOutput(#CanvGadg))
                      DrawImage(ImageID(#BasovoeIzobrazenie4tobNeRisovatKazdiyRaz), 0, 0)
                      DrawingMode(#PB_2DDrawing_AlphaBlend)
                      ;LineXY(x,0,x,#HighPlsSaml,RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                      Box(xstart, 0, xend - xstart, #HighPlsSaml, RGBA(ColoraR.b,ColoraG.b,ColoraB.b,ColoraA.b))
                      StopDrawing()                      
                    EndIf
              EndIf
             
             
          EndSelect
         
        Case #PB_Event_CloseWindow
          Quit = 1
      EndSelect
 
    ;Until Event = #PB_Event_CloseWindow
    Until Quit = 1
      Delay(110) ; пауза чуть больше, чем в треде, чтоб программа не кританула при закрытии
                 ; а то гаджета уже не будет - окно то закрыто - а команда вписать в гаджет
                 ; придет из потока, и будет вылет программы.
   
Else
  MessageRequester("FatalError", "FatalErrorMes") ; Выводим на экран сообщение.
EndIf
 
End
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выделение части графика.
СообщениеДобавлено: Пн мар 20, 2017 5:11 pm 
Не в сети
доцент

Зарегистрирован: Чт окт 27, 2011 7:43 pm
Сообщений: 64
Откуда: Санкт-Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
SereZa писал(а):
там думай сам
Поэкспериментирую на досуге.

_________________
ICQ нет, и, в ближайшее время, не будет


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

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


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

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


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

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