Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
144 Lrz 1
;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32)
2
;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке
3
;Оптимизация команд.
360 Lrz 4
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox
144 Lrz 5
;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а.
360 Lrz 6
;  - Теплов Алексей  www.lrz.land.ru
144 Lrz 7
 
8
;заголовок приложения
9
use32		; транслятор, использующий 32 разрядных команды
10
    org 0x0		; базовый адрес кода, всегда 0x0
11
    db 'MENUET01'	; идентификатор исполняемого файла (8 байт)
12
    dd 0x1		; версия формата заголовка исполняемого файла
13
    dd start		; адрес, на который система передаёт управление
14
	                ; после загрузки приложения в память
15
    dd i_end		; размер приложения
16
    dd (i_end+0x100) and not 3	; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
17
    dd (i_end+0x100) and not 3	; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
18
    dd 0x0,0x0		; указатель на строку с параметрами.
19
                 ;    если после запуска неравно нулю, приложение было
20
                 ;    запущено с параметрами из командной строки
21
 
22
		 ;    указатель на строку, в которую записан путь,
23
                 ;    откуда запущено приложение
24
;------------------
360 Lrz 25
	include 'macros.inc'
144 Lrz 26
	include 'check.inc'	;включить файл check.inc
27
	use_check_box		;используя макросы внести процедуры для рисования чек бокса
28
;Область кода
360 Lrz 29
align 16
144 Lrz 30
start:				;Точка входа в программу
360 Lrz 31
	mov  eax,48             ;получить системные цвета
32
	mov  ebx,3
33
	mov  ecx,sc
34
	mov  edx,sizeof.system_colors
35
	int  0x40
36
 
144 Lrz 37
	mov	eax,40		;установить маску для ожидаемых событий
38
	mov 	ebx,0x25        ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
39
        int	0x40
40
red_win:
41
    call draw_window 		;первоначально необходимо нарисовать окно
42
still:				;основной обработчик
43
     mov  eax,10 		;Ожидать события
44
     int  0x40      		;ожидать событие в течение 2 миллисекунд
45
 
46
    cmp al,0x1    ;если изменилось положение окна
47
    jz red_win
48
    cmp al,0x3    ;если нажата кнопка то перейти
49
    jz button
50
     mouse_check_boxes check_boxes,check_boxes_end  ;проверка чек бокса
51
	jmp still    ;если ничего из перечисленного то снова в цикл
52
button:
53
    or eax,-1       ;в eax,-1 - 5 ,байтов у нас же только 3  выйти
54
    int 0x40 ;далее выполняется выход из программы
55
 
56
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
57
draw_window:		;рисование окна приложения
58
    mov eax,12		;в регистр внести значение = 12
59
    mov ebx,1 		;присвоить 1
60
    int 0x40
61
 
360 Lrz 62
    xor  eax,eax		;обнулить eax
63
    mov  ebx,50*65536+180	;[координата по оси x]*65536 + [размер по оси x]
64
    mov  ecx,30*65536+100	;[координата по оси y]*65536 + [размер по оси y]
65
    mov  edx,[sc.work] 	         ; color of work area RRGGBB,8->color gl
66
    or   edx,0xb3000000
67
    mov  edi,hed
68
    int  0x40			;нарисовать окно приложения
69
 
144 Lrz 70
	draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов
71
 
360 Lrz 72
    mov eax,12 			;Функция 12 - начать/закончить перерисовку окна.
144 Lrz 73
    mov ebx,2			;Подфункция 2 - закончить перерисовку окна.
74
    int 0x40
75
    ret
76
 
77
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
78
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
79
;DATA данные
80
;Формат данных чек бокса:
81
;10 - координата чек бокса по х
82
;30 - координата чек бокса по у
360 Lrz 83
;0 - цвет рамки чек бокса если нужно так используются ситемные цвета
84
;0 - цвет текста надписи  если нужно так используются ситемные цвета
144 Lrz 85
;ch_text.1 - указатель на начало строки
86
;ch_text.e1-ch_text.1 - длина строки
87
;
360 Lrz 88
align 16
144 Lrz 89
check_boxes:
360 Lrz 90
ch1 check_box 10,15,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
91
ch2 check_box 10,30,ch_text.2,ch_text.e2-ch_text.2
92
ch3 check_box 10,45,ch_text.3,ch_text.e3-ch_text.3
144 Lrz 93
check_boxes_end:
94
 
95
ch_text:		; Сопровождающий текст для чек боксов
96
.1 db 'Check_Box #1'
97
.e1:
98
.2 db 'Check_Box #2'
99
.e2:
100
.3 db 'Check_Box #3'
101
.e3:
102
 
360 Lrz 103
hed db 'Checkbox [19.02.2007]',0	;заголовок приложения
104
sc     system_colors
144 Lrz 105
i_end:			;конец кода