Subversion Repositories Kolibri OS

Rev

Rev 355 | Rev 362 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
356 Lrz 1
;компонент OptionBox (основан на Checkbox)
2
;Огромная благодарность Maxxxx32, Diamond, Heavyiron и другим программистам, и их программам, без
355 Lrz 3
;которых я не смог бы написать этот компонент.
4
;16.02.2007
5
;  - Теплов Алексей  www.lrz.land.ru
6
 
7
;заголовок приложения
8
use32		; транслятор, использующий 32 разрядных команды
9
    org 0x0		; базовый адрес кода, всегда 0x0
10
    db 'MENUET01'	; идентификатор исполняемого файла (8 байт)
11
    dd 0x1		; версия формата заголовка исполняемого файла
12
    dd start		; адрес, на который система передаёт управление
13
	                ; после загрузки приложения в память
14
    dd i_end		; размер приложения
15
    dd (i_end+0x100) and not 3	; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
16
    dd (i_end+0x100) and not 3	; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
17
    dd 0x0,0x0		; указатель на строку с параметрами.
18
                 ;    если после запуска неравно нулю, приложение было
19
                 ;    запущено с параметрами из командной строки
20
 
21
		 ;    указатель на строку, в которую записан путь,
22
                 ;    откуда запущено приложение
23
;------------------
24
	include	'macros.inc'
25
	include 'optionbox.inc'	;включить файл check.inc
356 Lrz 26
	use_option_box		;используя макросы,внести процедуры для рисования optionbox
355 Lrz 27
align 16
28
;Область кода
29
start:				;Точка входа в программу
30
	mov  eax,48             ;получить системные цвета
31
	mov  ebx,3
32
	mov  ecx,sc
33
	mov  edx,sizeof.system_colors
34
	int  0x40
35
 
36
	mov	eax,40		;установить маску для ожидаемых событий
37
	mov 	ebx,0x25        ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
38
        int	0x40
39
red_win:
40
    call draw_window 		;первоначально необходимо нарисовать окно
41
still:				;основной обработчик
42
     mov  eax,10 		;Ожидать события
43
     int  0x40      		;ожидать событие в течение 2 миллисекунд
44
 
45
    cmp al,0x1    ;если изменилось положение окна
46
    jz red_win
47
    cmp al,0x3    ;если нажата кнопка то перейти
48
    jz button
49
     mouse_option_boxes option_boxes,option_boxes_end  ;проверка чек бокса
50
	jmp still    ;если ничего из перечисленного то снова в цикл
51
button:
356 Lrz 52
;    mov eax,17		;получить идентификатор нажатой клавиши
53
;    int 0x40
54
;    test ah,ah		;если в ah 0, то перейти на обработчик событий still
55
;    jz  still
355 Lrz 56
    or eax,-1       ;в eax,-1 - 5 ,байтов у нас же только 3  выйти
57
    int 0x40 ;далее выполняется выход из программы
58
 
59
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
60
draw_window:		;рисование окна приложения
61
    mov eax,12		;в регистр внести значение = 12
62
    mov ebx,1 		;присвоить 1
63
    int 0x40
64
 
65
    xor  eax,eax		;обнулить eax
66
    mov  ebx,50*65536+180	;[координата по оси x]*65536 + [размер по оси x]
67
    mov  ecx,30*65536+200	;[координата по оси y]*65536 + [размер по оси y]
68
    mov  edx,[sc.work] 	         ; color of work area RRGGBB,8->color gl
69
    or   edx,0xb3000000
356 Lrz 70
    mov  edi,hed
355 Lrz 71
    int  0x40			;нарисовать окно приложения
72
	draw_option_boxes option_boxes,option_boxes_end ;рисование чекбоксов
73
 
74
    mov eax,12 			;Функция 12 - начать/закончить перерисовку окна.
75
    mov ebx,2			;Подфункция 2 - закончить перерисовку окна.
76
    int 0x40
77
    ret
78
 
79
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
80
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
81
;DATA данные
82
;Формат данных чек бокса:
83
;10 - координата чек бокса по х
84
;30 - координата чек бокса по у
85
;0 - цвет рамки чек бокса
86
;0 - цвет текста надписи
87
;op_text.1 - указатель на начало строки
88
;option_group1 - это признак группы, т.е. этот код может обрабатывать много групп из optibox
89
;op_text.e1-ch_text.1 - длина строки
90
;
356 Lrz 91
align 16
355 Lrz 92
option_boxes:
356 Lrz 93
op1 option_box 10,15,0,0,ch_text.1,ch_text.e1-ch_text.1,option_group1
94
op2 option_box 10,30,0,0,ch_text.2,ch_text.e2-ch_text.2,option_group1
95
op3 option_box 10,45,0,0,ch_text.3,ch_text.e3-ch_text.3,option_group1
96
op11 option_box 10,80,0,0,ch_text.1,ch_text.e1-ch_text.1,option_group2
97
op12 option_box 10,95,0,0,ch_text.2,ch_text.e2-ch_text.2,option_group2
98
op13 option_box 10,110,0,0,ch_text.3,ch_text.e3-ch_text.3,option_group2
355 Lrz 99
option_boxes_end:
100
 
101
ch_text:		; Сопровождающий текст для чек боксов
102
.1 db 'Option_Box #1'
103
.e1:
104
.2 db 'Option_Box #2'
105
.e2:
106
.3 db 'Option_Box #3'
107
.e3:
108
 
109
option_group1	dd op1 	;указатели, они отображаются по умолчанию, когда выводится
110
option_group2	dd op11 ;приложение
111
 
112
hed db 'Optionbox [16.02.2007]',0	;заголовок приложения
113
sc     system_colors
356 Lrz 114
i_end:			;конец кода
115