Subversion Repositories Kolibri OS

Rev

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