Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1176 andrew_pro 1
/*
2
		control ScrollBar
3
*/
4
 
5
////////////////////////////////////////////////////////////////////////////////
6
//				Draw Ruller
7
////////////////////////////////////////////////////////////////////////////////
8
void DrawRuller(struct ControlScrollBar *ScrollBar)
9
{
10
	int			x,y,sizex,sizey;
11
	int			scrollbar_size,ruller_size,ruller_pos;
12
	struct FINITION 	*fin;
13
 
14
	x=ScrollBar->ctrl_x;
15
	y=ScrollBar->ctrl_y;
16
	sizex=ScrollBar->ctrl_sizex;
17
	sizey=ScrollBar->ctrl_sizey;
18
	fin=(struct FINITION*)ScrollBar->finition;
19
 
20
	if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
21
	{
22
		scrollbar_size=sizex-sizey*2;
23
		ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
24
		if (ruller_size<5) ruller_size=5;
25
		if (ruller_size>sizex) ruller_size=sizex-2*sizey;
26
 
27
		ruller_pos=x+sizey+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
28
		//left bar
29
		Draw(fin,TOOL_FILLED_RECTANGLE,x+sizey,y+1,ruller_pos-x-sizey,sizey-2,COLOR_FON);
30
		//right bar
31
		Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+ruller_size,y+1,x+sizex-sizey-ruller_pos-ruller_size,sizey-2,COLOR_FON);
32
		//roller
33
		Draw(fin,TOOL_RECTANGLE,ruller_pos,y,ruller_size,sizey,COLOR_ABSOLUTE_DARK);
34
		Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+1,y+1,ruller_size-2,sizey-2,COLOR_MIDDLE_LIGHT);
35
		Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)-2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
36
		Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2),y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
37
		Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)+2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
38
	}
39
 
40
	if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
41
	{
42
		scrollbar_size=sizey-sizex*2;
43
		ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
44
		if (ruller_size<5) ruller_size=5;
45
		if (ruller_size>sizey) ruller_size=sizey-2*sizex;
46
 
47
		ruller_pos=y+sizex+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
48
		//up bar
49
		Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizex,sizex-2,ruller_pos-y-sizex,COLOR_FON);
50
		//down bar
51
		Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+ruller_size,sizex-2,y+sizey-sizex-ruller_pos-ruller_size,COLOR_FON);
52
		//roller
53
		Draw(fin,TOOL_RECTANGLE,x,ruller_pos,sizex,ruller_size,COLOR_ABSOLUTE_DARK);
54
		Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+1,sizex-2,ruller_size-2,COLOR_MIDDLE_LIGHT);
55
		Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)-2,COLOR_ABSOLUTE_DARK);
56
		Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2),COLOR_ABSOLUTE_DARK);
57
		Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)+2,COLOR_ABSOLUTE_DARK);
58
	}
59
 
60
}
61
 
62
////////////////////////////////////////////////////////////////////////////////
63
//				Draw full Scroll Bar
64
////////////////////////////////////////////////////////////////////////////////
65
void DrawScrollBar(struct ControlScrollBar *ScrollBar)
66
{
67
	int			x,y,sizex,sizey;
68
	struct FINITION 	*fin;
69
 
70
	x=ScrollBar->ctrl_x;
71
	y=ScrollBar->ctrl_y;
72
	sizex=ScrollBar->ctrl_sizex;
73
	sizey=ScrollBar->ctrl_sizey;
74
	fin=(struct FINITION*)ScrollBar->finition;
75
 
76
	if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
77
	{
78
 
79
		//draw child buttons and roller
80
		Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
81
		//left button
82
		Draw(fin,TOOL_RECTANGLE,x,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
83
		Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
84
		//left arrow of left button
85
		Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
86
		Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
87
		Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
88
		Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
89
		//right button
90
		Draw(fin,TOOL_RECTANGLE,x+sizex-sizey,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
91
		Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
92
		//right arrow of right button
93
		Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
94
		Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
95
		Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
96
		Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
97
		//roller
98
		DrawRuller(ScrollBar);
99
	}
100
 
101
	if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
102
	{
103
		//draw child buttons and roller
104
		Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
105
		//up button
106
		Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
107
		Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
108
		//up arrow of up button
109
		Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
110
		Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
111
		Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
112
		Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
113
		//down button
114
		Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
115
		Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
116
		//down arrow of down button
117
		Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
118
		Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
119
		Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
120
		Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
121
		//roller
122
		DrawRuller(ScrollBar);
123
	}
124
}
125
 
126
////////////////////////////////////////////////////////////////////////////////
127
//				Vertical Scroll Bar
128
////////////////////////////////////////////////////////////////////////////////
129
 
130
////////////////////////////////////////////////////////////////////////////////
131
//		animation of up button of Scroll Bar
132
////////////////////////////////////////////////////////////////////////////////
133
void ScrollBar_DrawPressedUpButton(struct ControlScrollBar *ScrollBar)
134
{
135
	int			x,y,sizex,sizey;
136
	struct FINITION 	*fin;
137
 
138
	x=ScrollBar->ctrl_x;
139
	y=ScrollBar->ctrl_y;
140
	sizex=ScrollBar->ctrl_sizex;
141
	sizey=ScrollBar->ctrl_sizey;
142
	fin=(struct FINITION*)ScrollBar->finition;
143
 
144
	//up button
145
	Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
146
	Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_FON);
147
	//up arrow of up button
148
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
149
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
150
	Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
151
	Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
152
}
153
 
154
void ScrollBar_DrawReleasedUpButton(struct ControlScrollBar *ScrollBar)
155
{
156
	int			x,y,sizex,sizey;
157
	struct FINITION 	*fin;
158
 
159
	x=ScrollBar->ctrl_x;
160
	y=ScrollBar->ctrl_y;
161
	sizex=ScrollBar->ctrl_sizex;
162
	sizey=ScrollBar->ctrl_sizey;
163
	fin=(struct FINITION*)ScrollBar->finition;
164
 
165
	//up button
166
	Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
167
	Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
168
	//up arrow of up button
169
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
170
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
171
	Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
172
	Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
173
}
174
 
175
////////////////////////////////////////////////////////////////////////////////
176
//		animation of down button of Scroll Bar
177
////////////////////////////////////////////////////////////////////////////////
178
void ScrollBar_DrawPressedDownButton(struct ControlScrollBar *ScrollBar)
179
{
180
	int			x,y,sizex,sizey;
181
	struct FINITION 	*fin;
182
 
183
	x=ScrollBar->ctrl_x;
184
	y=ScrollBar->ctrl_y;
185
	sizex=ScrollBar->ctrl_sizex;
186
	sizey=ScrollBar->ctrl_sizey;
187
	fin=(struct FINITION*)ScrollBar->finition;
188
 
189
	//down button
190
	Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
191
	Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_FON);
192
	//down arrow of down button
193
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
194
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
195
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
196
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
197
}
198
 
199
void ScrollBar_DrawReleasedDownButton(struct ControlScrollBar *ScrollBar)
200
{
201
	int			x,y,sizex,sizey;
202
	struct FINITION 	*fin;
203
 
204
	x=ScrollBar->ctrl_x;
205
	y=ScrollBar->ctrl_y;
206
	sizex=ScrollBar->ctrl_sizex;
207
	sizey=ScrollBar->ctrl_sizey;
208
	fin=(struct FINITION*)ScrollBar->finition;
209
 
210
	//down button
211
	Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
212
	Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
213
	//down arrow of down button
214
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
215
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
216
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
217
	Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
218
}
219
 
220
////////////////////////////////////////////////////////////////////////////////
221
//		callback function for up button of Scroll Bar
222
////////////////////////////////////////////////////////////////////////////////
223
void ScrollBar_FuncCallbackForUpButton_Pressed(struct HEADER *control,void *data)
224
{
225
	struct ControlScrollBar *ScrollBar;
226
	struct	HEADERPARENT	*main_parent;
227
 
228
	ScrollBar=(struct ControlScrollBar*)data;
229
	if (ScrollBar->ruller_size!=1.0)
230
	{
231
		ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
232
	}
233
	if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
234
	ScrollBar_DrawPressedUpButton(ScrollBar);
235
 
236
	if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
237
	{
238
		main_parent=(struct	HEADERPARENT*)ScrollBar->main_parent;
239
		ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
240
		main_parent->control_for_callback_function[main_parent->number_callbacks]=
241
		(DWORD*)ScrollBar;
242
		main_parent->callback_for_control_callback[main_parent->number_callbacks]=
243
		(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
244
		main_parent->number_callbacks++;
245
	}
246
	DrawRuller(ScrollBar);
247
}
248
 
249
void ScrollBar_FuncCallbackForUpButton_Released(struct HEADER *control,void *data)
250
{
251
	struct ControlScrollBar *ScrollBar;
252
 
253
	ScrollBar=(struct ControlScrollBar*)data;
254
	ScrollBar_DrawReleasedUpButton(ScrollBar);
255
}
256
 
257
////////////////////////////////////////////////////////////////////////////////
258
//		callback function for down button of Scroll Bar
259
////////////////////////////////////////////////////////////////////////////////
260
void ScrollBar_FuncCallbackForDownButton_Pressed(struct HEADER *control,void *data)
261
{
262
	struct ControlScrollBar *ScrollBar;
263
	struct	HEADERPARENT	*main_parent;
264
 
265
	ScrollBar=(struct ControlScrollBar*)data;
266
	if (ScrollBar->ruller_size!=1.0)
267
	{
268
		ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
269
	}
270
	if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
271
	ScrollBar_DrawPressedDownButton(ScrollBar);
272
 
273
	if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
274
	{
275
		main_parent=(struct	HEADERPARENT*)ScrollBar->main_parent;
276
		ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
277
		main_parent->control_for_callback_function[main_parent->number_callbacks]=
278
		(DWORD*)ScrollBar;
279
		main_parent->callback_for_control_callback[main_parent->number_callbacks]=
280
		(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
281
		main_parent->number_callbacks++;
282
	}
283
	DrawRuller(ScrollBar);
284
}
285
 
286
void ScrollBar_FuncCallbackForDownButton_Released(struct HEADER *control,void *data)
287
{
288
	struct ControlScrollBar *ScrollBar;
289
 
290
	ScrollBar=(struct ControlScrollBar*)data;
291
	ScrollBar_DrawReleasedDownButton(ScrollBar);
292
	DrawRuller(ScrollBar);
293
}
294
 
295
////////////////////////////////////////////////////////////////////////////////
296
//		Horizontal Scroll Bar
297
////////////////////////////////////////////////////////////////////////////////
298
 
299
////////////////////////////////////////////////////////////////////////////////
300
//		animation of left button of Scroll Bar
301
////////////////////////////////////////////////////////////////////////////////
302
void ScrollBar_DrawPressedLeftButton(struct ControlScrollBar *ScrollBar)
303
{
304
	int			x,y,sizex,sizey;
305
	struct FINITION 	*fin;
306
 
307
	x=ScrollBar->ctrl_x;
308
	y=ScrollBar->ctrl_y;
309
	sizex=ScrollBar->ctrl_sizex;
310
	sizey=ScrollBar->ctrl_sizey;
311
	fin=(struct FINITION*)ScrollBar->finition;
312
 
313
	//left button
314
	Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_FON);
315
	//left arrow of left button
316
	Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
317
	Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
318
	Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
319
	Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
320
}
321
 
322
void ScrollBar_DrawReleasedLeftButton(struct ControlScrollBar *ScrollBar)
323
{
324
	int			x,y,sizex,sizey;
325
	struct FINITION 	*fin;
326
 
327
	x=ScrollBar->ctrl_x;
328
	y=ScrollBar->ctrl_y;
329
	sizex=ScrollBar->ctrl_sizex;
330
	sizey=ScrollBar->ctrl_sizey;
331
	fin=(struct FINITION*)ScrollBar->finition;
332
 
333
	//left button
334
	Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
335
	//left arrow of left button
336
	Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
337
	Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
338
	Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
339
	Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
340
}
341
 
342
////////////////////////////////////////////////////////////////////////////////
343
//		animation of right button of Scroll Bar
344
////////////////////////////////////////////////////////////////////////////////
345
void ScrollBar_DrawPressedRightButton(struct ControlScrollBar *ScrollBar)
346
{
347
	int			x,y,sizex,sizey;
348
	struct FINITION 	*fin;
349
 
350
	x=ScrollBar->ctrl_x;
351
	y=ScrollBar->ctrl_y;
352
	sizex=ScrollBar->ctrl_sizex;
353
	sizey=ScrollBar->ctrl_sizey;
354
	fin=(struct FINITION*)ScrollBar->finition;
355
 
356
	//right button
357
	Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_FON);
358
	//right arrow of right button
359
	Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
360
	Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
361
	Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
362
	Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
363
}
364
 
365
void ScrollBar_DrawReleasedRightButton(struct ControlScrollBar *ScrollBar)
366
{
367
	int			x,y,sizex,sizey;
368
	struct FINITION 	*fin;
369
 
370
	x=ScrollBar->ctrl_x;
371
	y=ScrollBar->ctrl_y;
372
	sizex=ScrollBar->ctrl_sizex;
373
	sizey=ScrollBar->ctrl_sizey;
374
	fin=(struct FINITION*)ScrollBar->finition;
375
 
376
	//right button
377
	Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
378
	//right arrow of right button
379
	Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
380
	Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
381
	Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
382
	Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
383
}
384
////////////////////////////////////////////////////////////////////////////////
385
//		callback function for left button of Scroll Bar
386
////////////////////////////////////////////////////////////////////////////////
387
void ScrollBar_FuncCallbackForLeftButton_Pressed(struct HEADER *control,void *data)
388
{
389
	struct ControlScrollBar *ScrollBar;
390
	struct	HEADERPARENT	*main_parent;
391
 
392
	ScrollBar=(struct ControlScrollBar*)data;
393
	if (ScrollBar->ruller_size!=1.0)
394
	{
395
		ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
396
	}
397
	if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
398
	ScrollBar_DrawPressedLeftButton(ScrollBar);
399
 
400
	if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
401
	{
402
		main_parent=(struct	HEADERPARENT*)ScrollBar->main_parent;
403
		ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
404
		main_parent->control_for_callback_function[main_parent->number_callbacks]=
405
		(DWORD*)ScrollBar;
406
		main_parent->callback_for_control_callback[main_parent->number_callbacks]=
407
		(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
408
		main_parent->number_callbacks++;
409
	}
410
	DrawRuller(ScrollBar);
411
}
412
 
413
void ScrollBar_FuncCallbackForLeftButton_Released(struct HEADER *control,void *data)
414
{
415
	struct ControlScrollBar *ScrollBar;
416
 
417
	ScrollBar=(struct ControlScrollBar*)data;
418
	ScrollBar_DrawReleasedLeftButton(ScrollBar);
419
}
420
 
421
////////////////////////////////////////////////////////////////////////////////
422
//		callback function for right button of Scroll Bar
423
////////////////////////////////////////////////////////////////////////////////
424
void ScrollBar_FuncCallbackForRightButton_Pressed(struct HEADER *control,void *data)
425
{
426
	struct ControlScrollBar *ScrollBar;
427
	struct	HEADERPARENT	*main_parent;
428
 
429
	ScrollBar=(struct ControlScrollBar*)data;
430
	if (ScrollBar->ruller_size!=1.0)
431
	{
432
		ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
433
	}
434
	if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
435
	ScrollBar_DrawPressedRightButton(ScrollBar);
436
 
437
	if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
438
	{
439
		main_parent=(struct	HEADERPARENT*)ScrollBar->main_parent;
440
		ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
441
		main_parent->control_for_callback_function[main_parent->number_callbacks]=
442
		(DWORD*)ScrollBar;
443
		main_parent->callback_for_control_callback[main_parent->number_callbacks]=
444
		(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
445
		main_parent->number_callbacks++;
446
	}
447
	DrawRuller(ScrollBar);
448
}
449
 
450
void ScrollBar_FuncCallbackForRightButton_Released(struct HEADER *control,void *data)
451
{
452
	struct ControlScrollBar *ScrollBar;
453
 
454
	ScrollBar=(struct ControlScrollBar*)data;
455
	ScrollBar_DrawReleasedRightButton(ScrollBar);
456
	DrawRuller(ScrollBar);
457
}
458
 
459
////////////////////////////////////////////////////////////////////////////////
460
//		callback function for ruller bar button of Scroll Bar
461
////////////////////////////////////////////////////////////////////////////////
462
void ScrollBar_FuncCallbackForScrollRullerPressed(struct HEADER *control,void *data)
463
{
464
	struct ControlScrollBar *ScrollBar;
465
 
466
	ScrollBar=(struct ControlScrollBar*)data;
467
	ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_RULLER_PRESSED;
468
}
469
 
470
void ScrollBar_FuncCallbackForScrollRullerReleased(struct HEADER *control,void *data)
471
{
472
	struct ControlScrollBar *ScrollBar;
473
 
474
	ScrollBar=(struct ControlScrollBar*)data;
475
	ScrollBar->scb_flags=ScrollBar->scb_flags & FLAG_SCROLL_RULLER_RELEASED;
476
}
477
 
478
//---------------------------------------------------------------------------------
479
//			 control ScrollBar
480
//---------------------------------------------------------------------------------
481
void ScrollBarProc(struct ControlScrollBar *ScrollBar,struct MESSAGE *message)
482
{
483
	int			mx,my;
484
	char			mouse_buttons_state;
485
	int			x,y,sizex,sizey;
486
	int			scrollbar_size,ruller_size,ruller_pos;
487
	int			ruller_min,ruller_max;
488
	float			max_pos,current_pos,last_ruller_pos;
489
	struct	FINITION	*fin;
490
	struct TIMER		*timer;
491
	struct	HEADERPARENT	*main_parent;
492
 
493
	x=ScrollBar->ctrl_x;
494
	y=ScrollBar->ctrl_y;
495
	sizex=ScrollBar->ctrl_sizex;
496
	sizey=ScrollBar->ctrl_sizey;
497
 
498
	switch(message->type)
499
	{
500
		case MESSAGE_FULL_REDRAW_ALL:
501
		{
502
			//draw ScrollBar
503
			if (ScrollBar->flags & FLAG_SHOW_CONTROL)	DrawScrollBar(ScrollBar);
504
			break;
505
		}
506
		case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
507
		{
508
			fin=(struct FINITION*)ScrollBar->finition;
509
			fin->flags=fin->flags | FINITION_ON;
510
			fin->x=message->arg1;
511
			fin->y=message->arg2;
512
			fin->sizex=message->arg3;
513
			fin->sizey=message->arg4;
514
			DrawScrollBar(ScrollBar);
515
			break;
516
		}
517
		case MESSAGE_SPECIALIZED:
518
		{
519
			if (ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
520
			{
521
				if (ScrollBar->flags & FLAG_SHOW_CONTROL)	DrawScrollBar(ScrollBar);
522
				ScrollBar->flags=ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
523
			}
524
			break;
525
		}
526
		case MESSAGE_MOUSE_EVENT:
527
		{
528
			mx=message->arg1;
529
			my=message->arg2;
530
			mouse_buttons_state=message->arg3;
531
			main_parent=(struct	HEADERPARENT*)ScrollBar->main_parent;
532
 
533
			//check ruller state
534
			if (ScrollBar->scb_flags & FLAG_SCROLL_RULLER_PRESSED)
535
			{	//		horizontal ScrollBar
536
				if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
537
				{
538
					scrollbar_size=sizex-sizey*2;
539
					ruller_size=scrollbar_size*ScrollBar->ruller_size;
540
					if (ruller_size<5) ruller_size=5;
541
 
542
					ruller_min=x+sizey;     //minimum x
543
					ruller_max=ruller_min+scrollbar_size-ruller_size;
544
					ruller_pos=mx-(ruller_size/2);//ruller centred under mouse pointer
545
 
546
					if (ruller_pos
547
					if (ruller_pos>ruller_max) ruller_pos=ruller_max;
548
 
549
					if (ruller_max!=ruller_min)
550
					{
551
						max_pos=(float)(ruller_max-ruller_min);
552
						current_pos=(float)(ruller_pos-ruller_min);
553
						last_ruller_pos=ScrollBar->ruller_pos;
554
						ScrollBar->ruller_pos=current_pos/max_pos;
555
					}
556
					else {ScrollBar->ruller_pos=0.0;}
557
 
558
					if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
559
					{
560
						if (ScrollBar->ruller_pos!=last_ruller_pos)
561
						{
562
							ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
563
							main_parent->control_for_callback_function[main_parent->number_callbacks]=
564
							(DWORD*)ScrollBar;
565
							main_parent->callback_for_control_callback[main_parent->number_callbacks]=
566
							(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
567
							main_parent->number_callbacks++;
568
						}
569
					}
570
					if (ScrollBar->ruller_pos!=last_ruller_pos)	DrawRuller(ScrollBar);
571
					break;
572
				}
573
				//		vertical ScrollBar
574
				if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
575
				{
576
					scrollbar_size=sizey-sizex*2;
577
					ruller_size=scrollbar_size*ScrollBar->ruller_size;
578
					if (ruller_size<5) ruller_size=5;
579
 
580
					ruller_min=y+sizex;     //minimum x
581
					ruller_max=ruller_min+scrollbar_size-ruller_size;
582
					ruller_pos=my-(ruller_size/2);//ruller centred under mouse pointer
583
 
584
					if (ruller_pos
585
					if (ruller_pos>ruller_max) ruller_pos=ruller_max;
586
 
587
					if (ruller_max!=ruller_min)
588
					{
589
						max_pos=(float)(ruller_max-ruller_min);
590
						current_pos=(float)(ruller_pos-ruller_min);
591
						last_ruller_pos=ScrollBar->ruller_pos;
592
						ScrollBar->ruller_pos=current_pos/max_pos;
593
					}
594
					else {ScrollBar->ruller_pos=0.0;}
595
 
596
					if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
597
					{
598
						if (ScrollBar->ruller_pos!=last_ruller_pos)
599
						{
600
							ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
601
							main_parent->control_for_callback_function[main_parent->number_callbacks]=
602
							(DWORD*)ScrollBar;
603
							main_parent->callback_for_control_callback[main_parent->number_callbacks]=
604
							(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
605
							main_parent->number_callbacks++;
606
						}
607
					}
608
					if (ScrollBar->ruller_pos!=last_ruller_pos)	DrawRuller(ScrollBar);
609
				}
610
			}
611
			break;
612
		}
613
		case MESSAGE_CHANGE_POSITION_EVENT:
614
		{
615
			ScrollBar->ctrl_x=ScrollBar->ctrl_x+message->arg1;
616
			ScrollBar->ctrl_y=ScrollBar->ctrl_y+message->arg2;
617
			break;
618
		}
619
		case MESSAGE_CALL_TIMER_EVENT:
620
		{
621
			if (ScrollBar->timer!=(DWORD*)NULL)
622
			{
623
				timer=(struct TIMER*)ScrollBar->timer;
624
				if (timer->flags & FLAG_TIMER_ON)	Timer(timer);
625
			}
626
			break;
627
		}
628
		case MESSAGE_DESTROY_CONTROL:
629
		{
630
			if (ScrollBar->timer!=(DWORD*)NULL)	free(ScrollBar->timer);
631
			free(ScrollBar->finition);
632
			break;
633
		}
634
		case MESSAGE_SET_MAIN_PARENT:
635
		{
636
			SendMessage((struct HEADER*)ScrollBar,message);
637
			ScrollBar->main_parent=(DWORD*)message->arg1;
638
			break;
639
		}
640
 
641
		default: break;
642
	}
643
	//send message to child controls(if there is)
644
	SendMessage((struct HEADER*)ScrollBar,message);
645
}
646
 
647
//---------------------------------------------------------------------------------
648
//				create control ScrollBar
649
//---------------------------------------------------------------------------------
650
void* CreateScrollBar(struct ScrollBarData *info_for_control)
651
{
652
	struct ControlScrollBar *ScrollBar;
653
	struct FINITION 	*fin;
654
 
655
	ScrollBar=malloc(sizeof(struct ControlScrollBar));
656
	ScrollBar->finition=malloc(sizeof(struct FINITION));
657
	fin=(struct FINITION*)ScrollBar->finition;
658
	fin->flags=0;
659
 
660
	ID++;
661
#ifdef	DEBUG
662
	printf("\ncreated scroll bar with ID=%d",(int)ID);
663
#endif
664
	ScrollBar->child_bk=(DWORD*)NULL;
665
	ScrollBar->child_fd=(DWORD*)NULL;
666
	ScrollBar->active_control_for_keys=(DWORD*)NULL;
667
	ScrollBar->active_control_for_mouse=(DWORD*)NULL;
668
	ScrollBar->callback=(DWORD*)NULL;
669
	ScrollBar->timer=(DWORD*)NULL;
670
 
671
	ScrollBar->ctrl_proc=(DWORD*)&ScrollBarProc;
672
	ScrollBar->ctrl_x=(DWORD)info_for_control->x;
673
	ScrollBar->ctrl_y=(DWORD)info_for_control->y;
674
	ScrollBar->ctrl_sizex=(DWORD)info_for_control->width;
675
	ScrollBar->ctrl_sizey=(DWORD)info_for_control->height;
676
	ScrollBar->ctrl_ID=ID;
677
	ScrollBar->ruller_size=info_for_control->ruller_size;
678
	ScrollBar->ruller_pos=info_for_control->ruller_pos;
679
	ScrollBar->ruller_step=info_for_control->ruller_step;
680
	ScrollBar->flags=0;
681
	ScrollBar->flags=ScrollBar->flags | FLAG_SHOW_CONTROL;
682
 
683
	return(ScrollBar);
684
}
685
 
686
void* CreateHorizontalScrollBar(struct ScrollBarData *info_for_control)
687
{
688
	struct ControlScrollBar *ScrollBar;
689
	struct ControlButton	*ChildButton1;
690
	struct ControlButton	*ChildButton2;
691
	struct ControlButton	*ScrollRuller;
692
	struct ButtonData		ChildButton1Data;
693
	struct ButtonData		ChildButton2Data;
694
	struct ButtonData		ScrollRullerData;
695
 
696
	ScrollBar=CreateScrollBar(info_for_control);
697
	//set horizontal orientation
698
	ScrollBar->scb_flags=0;
699
	ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON;
700
 
701
	//fill data for first child button of scroller
702
	ChildButton1Data.x=0;
703
	ChildButton1Data.y=0;
704
	ChildButton1Data.width=ScrollBar->ctrl_sizey;
705
	ChildButton1Data.height=ChildButton1Data.width;
706
 
707
	//fill data for second child button of scroller
708
	ChildButton2Data.x=ScrollBar->ctrl_sizex-ScrollBar->ctrl_sizey;
709
	ChildButton2Data.y=0;
710
	ChildButton2Data.width=ScrollBar->ctrl_sizey;
711
	ChildButton2Data.height=ChildButton2Data.width;
712
 
713
	//fill data for scroll ruller button of scroller
714
	ScrollRullerData.x=ScrollBar->ctrl_sizey;
715
	ScrollRullerData.y=0;
716
	ScrollRullerData.width=ScrollBar->ctrl_sizex-2*ScrollBar->ctrl_sizey;
717
	ScrollRullerData.height=ScrollBar->ctrl_sizey;
718
 
719
	ChildButton1=CreateButton(&ChildButton1Data);
720
	ChildButton2=CreateButton(&ChildButton2Data);
721
	ScrollRuller=CreateButton(&ScrollRullerData);
722
 
723
	ChildButton1->flags=ChildButton1->flags &  FLAG_HIDE_CONTROL;
724
	ChildButton2->flags=ChildButton2->flags &  FLAG_HIDE_CONTROL;
725
	ScrollRuller->flags=ScrollRuller->flags &  FLAG_HIDE_CONTROL;
726
 
727
	SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Pressed,ScrollBar);
728
	SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Released,ScrollBar);
729
 
730
	SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForRightButton_Pressed,ScrollBar);
731
	SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForRightButton_Released,ScrollBar);
732
 
733
	SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
734
	SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
735
 
736
	//pack button in control ScrollBar
737
	PackControls(ScrollBar,ChildButton1);
738
	PackControls(ScrollBar,ChildButton2);
739
	PackControls(ScrollBar,ScrollRuller);
740
 
741
	return(ScrollBar);
742
}
743
 
744
void* CreateVerticalScrollBar(struct ScrollBarData *info_for_control)
745
{
746
	struct ControlScrollBar *ScrollBar;
747
	struct ControlButton	*ChildButton1;
748
	struct ControlButton	*ChildButton2;
749
	struct ControlButton	*ScrollRuller;
750
	struct ButtonData		ChildButton1Data;
751
	struct ButtonData		ChildButton2Data;
752
	struct ButtonData		ScrollRullerData;
753
 
754
	ScrollBar=CreateScrollBar(info_for_control);
755
	//set vertical orientation
756
	ScrollBar->scb_flags=0;
757
	ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON;
758
 
759
	//fill data for first child button of scroller
760
	ChildButton1Data.x=0;
761
	ChildButton1Data.y=0;
762
	ChildButton1Data.width=ScrollBar->ctrl_sizex;
763
	ChildButton1Data.height=ChildButton1Data.width;
764
 
765
	//fill data for second child button of scroller
766
	ChildButton2Data.x=0;
767
	ChildButton2Data.y=ScrollBar->ctrl_sizey-ScrollBar->ctrl_sizex;
768
	ChildButton2Data.width=ScrollBar->ctrl_sizex;
769
	ChildButton2Data.height=ChildButton2Data.width;
770
 
771
	//fill data for scroll ruller button of scroller
772
	ScrollRullerData.x=0;
773
	ScrollRullerData.y=ScrollBar->ctrl_sizex;
774
	ScrollRullerData.width=ScrollBar->ctrl_sizex;
775
	ScrollRullerData.height=ScrollBar->ctrl_sizey-2*ScrollBar->ctrl_sizex;
776
 
777
	ChildButton1=CreateButton(&ChildButton1Data);
778
	ChildButton2=CreateButton(&ChildButton2Data);
779
	ScrollRuller=CreateButton(&ScrollRullerData);
780
 
781
	ChildButton1->flags=ChildButton1->flags &  FLAG_HIDE_CONTROL;
782
	ChildButton2->flags=ChildButton2->flags &  FLAG_HIDE_CONTROL;
783
	ScrollRuller->flags=ScrollRuller->flags &  FLAG_HIDE_CONTROL;
784
 
785
	SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForUpButton_Pressed,ScrollBar);
786
	SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForUpButton_Released,ScrollBar);
787
 
788
	SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForDownButton_Pressed,ScrollBar);
789
	SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForDownButton_Released,ScrollBar);
790
 
791
	SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
792
	SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
793
 
794
	//pack button in control ScrollBar
795
	PackControls(ScrollBar,ChildButton1);
796
	PackControls(ScrollBar,ChildButton2);
797
	PackControls(ScrollBar,ScrollRuller);
798
 
799
	return(ScrollBar);
800
}
801